Microsoft SQL Server Express 2022 在 25 行后将 vb.net 程序冻结到 DataGridView 中

Microsoft SQL Server Express 2022 freezing vb.net program after 25 rows into DataGridView

提问人:Valkyro 提问时间:11/13/2023 最后编辑:Valkyro 更新时间:11/20/2023 访问量:97

问:

我的表单上有一个,这个网格链接到我的 Microsoft SQL Server Express 2022,并填充了我的 .我目前遇到的问题是,一旦我输入了 25 行数据,第 25 行在中途被截断,我预计会出现一个垂直滚动条,但它没有。然后,当我添加另一行或等待一段时间(1-3 秒)时,程序会冻结并崩溃。DataGridView1frmAddDatadbo.DoorEntries

我试过检查垂直滚动条是否已启用(它们已启用),我也尝试过虚拟模式,此外我已经在使用后台加载器,所以我有点不知道该怎么做或如何解决这个问题。

要重现该问题,请按照以下步骤操作:

其他信息:Microsoft SQL Server Express 2022 和 Visual Basic .NET 6.0 框架。在我的 SQL Server 上,我使用的是 SQL 身份验证而不是 Windows 身份验证。

步骤1:在 SSMS 中创建一个新数据库(我有我的DGVproblem)

  • 在创建一个新表(我有我的DGVproblemDoorData)
  • 创建以下列:“日期”、“时间”、“说明”、“注释”和“额外”。所有数据类型均为 (nvarchar(50))。
  • 手动输入 25 到 30 行数据(直到在表单上开始切断数据条目的程度)DataGridView1

步骤2:在 Visual Basic .NET 6.0 Framework 中,创建一个 VB.net WinForm 应用程序。

  • 请确保已安装 NuGet 包。Microsoft.Data.SqlClient
  • 在窗体上添加 a。按如下方式设置属性:AllowUserToAddRows = False、AllowUserToDeleteRows = False、AllowUserToOrderColumns = False、AllowUserToResizeColumns = False、AllowUserToResizeRows = False、AutoSizeColumnsMode = AllCells、BorderStyle = None、ColumnHeadersHeight = 30、 ColumnHeadersHeightSizeMode = DisableResizingMultiSelect = False、ReadOnly = True、 RowHeadersVisible = false,ScrollsBars = Vertical,SelectionMode = FullRowSelect,大小 = 586,426。 DataGridView1
  • 将以下代码添加到 中。Form1.vb
Imports System.ComponentModel
Imports Microsoft.Data.SqlClient

Public Class Form1
    Dim connectionString As String = "Server=Your-Server-Name\SQLEXPRESS;Database=DGVproblem;User Id=Your-User-ID;Password=Your-User-Password;TrustServerCertificate=True;"
    Dim connection As New SqlConnection(connectionString)

    Private Sub LoadDataToDGV()
        If Not bckLoader.IsBusy Then
            bckLoader.RunWorkerAsync()
        End If
    End Sub

    Private Sub bckLoader_DoWork(sender As Object, e As DoWorkEventArgs) Handles bckLoader.DoWork
        Dim query As String = "SELECT Date, Time, Description, Notes, Extra FROM DoorData"

        Try
            connection.Open()
            Dim sqlCommand As New SqlCommand(query, connection)
            Dim doorData As New DataTable()

            ' Execute the query and fill the DataTable
            Dim dataAdapter As New SqlDataAdapter(sqlCommand)
            dataAdapter.Fill(doorData)

            DataGridView1.DataSource = doorData

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message)
        Finally
            ' Close the connection when done
            connection.Close()
        End Try
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LoadDataToDGV()
    End Sub
End Class
  • 运行代码时,如果信息超过 25 行,则表单应冻结,并且在一段时间无响应后,表单应解冻。

如何防止这种情况冻结/优化代码?

vb.net WinForms DataGridView 用户窗体 SQL-Server-2022

评论

1赞 jmcilhinney 11/13/2023
“此网格链接到我的 Microsoft SQL Server Express 2022”。不,它没有。您的网格(希望)绑定到本地数据。该数据来自 SQL Server 数据库与网格无关。它可能来自任何地方。您需要首先向我们展示相关代码,即您如何准确填充网格。接下来,您需要阅读本文并相应地更新您的问题。如果我们可以执行您正在执行的操作,并且没有看到相同的问题,则这是特定于您的环境的问题。
1赞 jmcilhinney 11/13/2023
我们需要查看代码。我们总是需要看到代码。
1赞 jmcilhinney 11/14/2023
在 UI 线程上执行 UI 操作,在其他线程上执行其他操作。您的问题很可能是您尝试在 UI 线程以外的线程上填充网格(UI 元素)。在事件处理程序中填充 ,然后将其绑定到事件处理程序中的网格。重点是在工作完成后更新 UI。DataTableDoWorkDataTableRunWorkerCompletedRunWorkerCompleted
1赞 jmcilhinney 11/14/2023
顺便说一句,不要创建单个连接并重复使用它。将连接字符串存储在单个位置,但就像在需要时创建数据适配器一样,也要对连接执行相同的操作。
1赞 jmcilhinney 11/14/2023
这是一篇关于使用 的帖子,其中包括在事件处理程序中获取数据并在事件处理程序中使用它的示例。BackgroundWorkerDoWorkRunWorkerCompleted

答: 暂无答案