我正在尝试使用VB.Net在MS Access数据库中搜索包含1000000条记录的字符串。该程序一旦运行或者需要很长时间才会响应。但是,如果我减少程序运行的数据库的大小。 以下是代码任何人都可以告诉我如何解决它...提前致谢。
Imports System.Data.SqlClient
Public Class Form1
Dim rcount As Integer
Dim conn As New ADODB.Connection
Dim rcset As New ADODB.Recordset
Dim sqlStr As String
Public Sub openConn()
Dim strConnect As String
strConnect = "DRIVER={Microsoft Access Driver (*.mdb)}; DefaultDir=" & Application.StartupPath & ";DBQ=atg;UID=;PWD=;"
If conn.State = 0 Then
conn.ConnectionString = strConnect
conn.Open()
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Public Sub rcdSet(ByVal sqlStr As String)
If conn.State = 0 Then
Call openConn()
End If
If rcset.State = 1 Then
rcset.Close()
rcset = Nothing
rcset = New ADODB.Recordset
rcset.CursorLocation = ADODB.CursorLocationEnum.adUseServer
rcset.CursorType = ADODB.CursorTypeEnum.adOpenDynamic
rcset.LockType = ADODB.LockTypeEnum.adLockOptimistic
End If
rcset.Open(sqlStr, conn)
End Sub
Private Sub btn_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_search.Click
Dim sql As String
Dim rs As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset
Dim res As String
res = ""
Call openConn()
Dim SearchString_exist As New List(Of String)(txt_exist.Text.Split(Environment.NewLine))
' Dim SearchString_not_exist As New List(Of String)(txt_not_exist.Text.Split(Environment.NewLine))
' Do Until SearchString_exist.Count = 0
sql = "SELECT * FROM ATG WHERE Term like '%cam%'"
rs.Open(sql, conn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
While (rs.EOF <> True)
res += rs.Fields("Term").Value + Environment.NewLine
rs.MoveNext()
End While
rs.Close()
SearchString_exist.RemoveAt(0)
txt_exist.Lines = SearchString_exist.ToArray
'Loop
txt_result.Text = res
End Sub
End Class
答案 0 :(得分:0)
如果您说单击按钮后应用程序没有响应,那是因为您在更新应用程序的同一个线程上搜索Access数据库 - 这意味着应用程序将显示为忙,直到您的数据库搜索为止完成(可能需要一段时间)。如果你想在后台线程中执行此操作并在搜索期间保持应用程序响应,可以使用线程池执行此操作:
http://www.dotnetperls.com/threadpool-vbnet
此外,查询运行得更少,记录更少,因为它搜索的数据较少,这表明它可能没有很好地编入索引。你可以在“Term”字段上添加一个索引,这将有助于加快速度 - 你必须看看它是否有帮助。访问必须进行索引扫描,而不是更快的索引搜索,因此响应不会立即响应,但它可能有助于显着缩短您的等待时间。这是一篇Microsoft文章,展示了如何执行此操作:
答案 1 :(得分:0)
如果您有1,000,000条记录,为什么不使用SQL Server?这个应用程序将获得多少流量?我不希望任何网站使用MS-Access作为其数据存储来扩展。