私には、データベース作業を行っているバックグラウンドワーカーがいます。バックグラウンドワーカーを使用することにした理由は、データベースの作業に多くの時間がかかるためです。したがって、コードは最初は機能しますが、データベースを更新し続けると、「保存できませんでした。現在、別のユーザーによってロックされています。OledbExceptionは処理されませんでした」というメッセージが表示されます。この問題を回避する方法です。これは私のコードです
Private Sub DoSaveUsersAuditForUpdate_Click()
Dim myConn As OleDbConnection = frmLogIn.Conn
SyncLock myConn
'Insert Previous data before the Update
'myConn = frmLogIn.Conn
Dim cmdInsert As OleDbCommand = New OleDbCommand("Insert INTO UsersAudit (Reference,Comment) VALUES (?,?)", myConn)
cmdInsert.Parameters.Add("@Reference", OleDbType.WChar).Value = txtReference.Text
cmdInsert.Parameters.Add("@Comment", OleDbType.WChar).Value = "Update Existing Users Details"
myConn.Open()
cmdInsert.ExecuteNonQuery()
myConn.Close()
End SyncLock
Dim myKonn As OleDbConnection = frmLogIn.Conn
SyncLock myKonn
'Insert Current data after the Update
'myKonn = frmLogIn.Conn
Dim cmdInsertOriginal As OleDbCommand = New OleDbCommand("Insert INTO UsersAudit (Reference,Comment) VALUES (?,?)", myKonn)
cmdInsertOriginal.Parameters.Add("@Reference", OleDbType.WChar).Value = txtReference.Text
cmdInsertOriginal.Parameters.Add("@Comment", OleDbType.WChar).Value = "New User"
myKonn.Open()
cmdInsertOriginal.ExecuteNonQuery()
myKonn.Close()
End SyncLock
End Sub
これが私がそれを呼んでいる方法です
Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
DoSaveUsersAuditForUpdate_Click()
End Sub
これがすべて一緒になります
Private Sub btnUpdate_Click(sender As System.Object, e As System.EventArgs)Handles btnUpdate.Click
BackgroundWorker1.RunWorkerAsync()'Dim workerThread As New Thread(AddressOf DoSaveUsersAuditForUpdate_Click)' workerThread.Start()DoUpdateUsers_Click(sender、e)UsersGridViewGridFormating()End Sub
Private Sub UsersGridViewGridFormating()
Dim myConn As OleDbConnection = frmLogIn.Conn
SyncLock myConn
Dim iSql As String = "SELECT * FROM Users WHERE UserDeleted =@UserDeleted"
Dim da As New OleDbDataAdapter(iSql, myConn)
da.SelectCommand.Parameters.AddWithValue("@UserDeleted", False)
dTable.Clear()
da.Fill(dTable)
myConn.Close()
Dim dv As DataView = New DataView(dTable)
dv.Sort = "UserName asc"
dTable = dv.ToTable
UsersMasterGridview.DataSource = dTable
UsersMasterGridview.Visible = True
UsersMasterGridview.Focus()
lblNumberofRecords.Text = dTable.Rows.Count & " Records"
End SyncLock
End Sub
私が使用しているすべてのコードを助けてください