提问人:Valkyro 提问时间:11/13/2023 最后编辑:Valkyro 更新时间:11/20/2023 访问量:97
Microsoft SQL Server Express 2022 在 25 行后将 vb.net 程序冻结到 DataGridView 中
Microsoft SQL Server Express 2022 freezing vb.net program after 25 rows into DataGridView
问:
我的表单上有一个,这个网格链接到我的 Microsoft SQL Server Express 2022,并填充了我的 .我目前遇到的问题是,一旦我输入了 25 行数据,第 25 行在中途被截断,我预计会出现一个垂直滚动条,但它没有。然后,当我添加另一行或等待一段时间(1-3 秒)时,程序会冻结并崩溃。DataGridView1
frmAddData
dbo.DoorEntries
我试过检查垂直滚动条是否已启用(它们已启用),我也尝试过虚拟模式,此外我已经在使用后台加载器,所以我有点不知道该怎么做或如何解决这个问题。
要重现该问题,请按照以下步骤操作:
其他信息:Microsoft SQL Server Express 2022 和 Visual Basic .NET 6.0 框架。在我的 SQL Server 上,我使用的是 SQL 身份验证而不是 Windows 身份验证。
步骤1:在 SSMS 中创建一个新数据库(我有我的DGVproblem
)
- 在创建一个新表(我有我的
DGVproblem
DoorData
) - 创建以下列:“日期”、“时间”、“说明”、“注释”和“额外”。所有数据类型均为 (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 = DisableResizing、MultiSelect = 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 行,则表单应冻结,并且在一段时间无响应后,表单应解冻。
如何防止这种情况冻结/优化代码?
答: 暂无答案
评论
DataTable
DoWork
DataTable
RunWorkerCompleted
RunWorkerCompleted
BackgroundWorker
DoWork
RunWorkerCompleted