1

私には、データベース作業を行っているバックグラウンドワーカーがいます。バックグラウンドワーカーを使用することにした理由は、データベースの作業に多くの時間がかかるためです。したがって、コードは最初は機能しますが、データベースを更新し続けると、「保存できませんでした。現在、別のユーザーによってロックされています。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

私が使用しているすべてのコードを助けてください

4

0 に答える 0