在VB.NET中执行查询会导致GUI错误

时间:2018-05-01 12:22:06

标签: sql vb.net user-interface ms-access oledbconnection

每当我的程序需要查询数据库时,它会导致GUI错误,例如表单字体随机变化,表单本身调整大小,数据网格中的数据混合在一起,它会影响整个程序,而不是只是调用查询函数的表单。

我使用此连接

 "Provider=Microsoft.ACE.OLEDB.12.0;"

 Public DBDA As OleDbDataAdapter
 Public DBDT As DataTable
 DBDT = New DataTable
 DBDA = New OleDbDataAdapter(DBCmd)
 RecordCount = DBDA.Fill(DBDT)

这是我的执行查询功能:

Public Sub ExecQuery(Query As String)
    'RESET QUERY STATS
    RecordCount = 0
    Exception = ""
    Try
        'OPEN A CONNECTION
        DBCon.Open()

        'CREATE DB COMMAND
        DbCmd = New OleDbCommand(Query, DBCon)

        'LOAD PARAMETERS INTO COMMAND
        Params.ForEach(Sub(Par) DbCmd.Parameters.Add(Par))

        'CLEAR PARAMETERS LIST
        Params.Clear()

        'EXECUTE COMMAND & FILL DATA
        DBDT = New DataTable
        DBDA = New OleDbDataAdapter(DbCmd)
        RecordCount = DBDA.Fill(DBDT)
    Catch ex As Exception
        Exception = ex.Message
    End Try

    'CLOSE CONNECTION
    If DBCon.State = ConnectionState.Open Then DBCon.Close()
End Sub

以及我如何从表单查询的示例

Private QC As New QueryControl
Public Sub RefreshGrid()
    'RUN QUERY
    QC.ExecQuery("SELECT * FROM Database")
    If Not String.IsNullOrEmpty(QC.Exception) Then MsgBox(QC.Exception) : Exit Sub
    'POPULATE DATAGRID
    Datagridview1.DataSource = QC.DBDT
 End Sub

我尝试运行调试程序,同时单独评论每一行,并得出结论,ExecQuery()函数是导致问题的原因。有人见过类似的东西吗?

1 个答案:

答案 0 :(得分:0)

我遇到了调整表单大小的问题。这是32位Ace提供商。我下载了64位Ace提供程序并安装了它。在解决方案属性中取消选中prefer 32位框,一切都应该很好。