ms-access和vb.net中的事务处理
我正在尝试下面的代码,但没有得到执行ms-access和vb.net中的事务处理,vb.net,transactions,Vb.net,Transactions,我正在尝试下面的代码,但没有得到执行 Private Sub btnsave_Click(sender As Object, e As EventArgs) Handles btnsave.Click Using con As New OleDbConnection(connectionString) Dim tra As OleDbTransaction = Nothing Try con.Open()
Private Sub btnsave_Click(sender As Object, e As EventArgs) Handles btnsave.Click
Using con As New OleDbConnection(connectionString)
Dim tra As OleDbTransaction = Nothing
Try
con.Open()
cmd.Transaction = tra
tra = con.BeginTransaction
Dim sqlstr As String = "insert into category(cname,comment) values('" + txtcategory.Text + "','" + txtcomment.Text + "')"
cmd = New OleDb.OleDbCommand(sqlstr, con)
cmd.ExecuteNonQuery()
Dim sql As String = "UPDATE tblInvoices SET avail = 1 WHERE (cname = txtcategory.Text)"
cmd = New OleDb.OleDbCommand(sqlstr, con)
cmd.ExecuteNonQuery()
tra.Commit()
Catch ex As Exception
MsgBox(ex.Message)
Try : tra.Rollback() : Catch : End Try
End Try
End Using
End Sub
我不理解事务。命令需要知道事务的存在。但在打开连接之前分配事务实例,然后要求连接启动事务。
这样,该命令对事务具有空引用,而不是连接创建的良好实例。此外,当您再次创建该命令时,没有与之关联的事务。
最好使用将事务作为第三个参数的OleDbCommand构造函数
Private Sub btnsave_Click(sender As Object, e As EventArgs) Handles btnsave.Click
Using con As New OleDbConnection(connectionString)
Dim tra As OleDbTransaction = Nothing
Try
con.Open()
tra = con.BeginTransaction
Dim sqlstr As String = "insert into category(cname,comment)" &
" values(@cat, @com)"
cmd = New OleDb.OleDbCommand(sqlstr, con, tra)
cmd.Parameters.Add("@cat", OleDbType.VarWChar).Value = txtcategory.Text
cmd.Parameters.Add("@com", OleDbType.VarWChar).Value = txtcomment.Text
cmd.ExecuteNonQuery()
Dim sql As String = "UPDATE tblInvoices SET avail = 1 " &
"WHERE cname = @cat"
cmd = New OleDb.OleDbCommand(sqlstr, con, tra)
cmd.Parameters.Add("@car", OleDbType.VarWChar).Value = txtcategory.Text
cmd.ExecuteNonQuery()
tra.Commit()
Catch ex As Exception
MsgBox(ex.Message)
tra.Rollback()
End Try
End Using
End
我还更改了您的代码,以使用更安全的方法处理查询。不要使用字符串连接,而是始终使用参数化查询。通过这种方式,您可以避免Sql注入,在解析文本时不会出现问题,并且查询更具可读性。谢谢,您的代码帮助很大。