在 VB.NET 中执行查询会导致 GUI 错误 [重复]

Posted

技术标签:

【中文标题】在 VB.NET 中执行查询会导致 GUI 错误 [重复]【英文标题】:Executing a query in VB.NET causes GUI bug [duplicate] 【发布时间】:2018-05-01 12:22:06 【问题描述】:

每当我的程序需要查询数据库时,都会导致 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】:

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

【讨论】:

非常感谢,我下载了 64 位版本并将目标输出从“所有 CPU”更改为“x64”,还必须修改连接方法,在高级属性的服务器资源管理器中我将 Oledb 服务从 Default 更改为 Enable All 并终止所有它的工作。我还启用了上一篇文章中所述的 DPI 感知,但我想这样做还不够。 这让我疯了很长时间。我认为它在“令人难以置信的收缩形式”下的 MS 论坛中 :-)

以上是关于在 VB.NET 中执行查询会导致 GUI 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

vb.net SQL 导致 - “必须声明标量变量”

如何减少查询执行时间 vb.net webform

如何在带有 VB.net GUI 的 C++ OpenCV 项目中使用 C# 库?

从我的 VB.NET 应用程序中在命令提示符下执行命令列表

查询表达式 vb.net 中缺少运算符

查询“必须声明标量变量”