SqlCommand ExecuteNonQuery() 不提交更改
SqlCommand ExecuteNonQuery() not committing changes
我有一个函数,我在其中传递一些 SQL 并尝试对数据库执行它。
函数正常完成,SQL 跟踪显示正在对数据库执行查询,但是当我刷新 select 语句时,数据没有更新。在这种情况下,查询很简单:
update *table* set *columnA* = *columnA* + 1
在 SQL 或 Visual Studio 中没有生成错误,但如前所述,更新未提交,数据保持不变。
下面是我的函数代码:
Public Function RunSQL(TaskCommand As String) As String
Try
'Opens connection to DB
OpenDatabase()
'Start an SQL Transaction to ensure data integrity
Dim trn As SqlTransaction = mCn.BeginTransaction
Using trn
If trn Is Nothing _
OrElse trn.Connection.State <> ConnectionState.Open Then
Throw New ApplicationException("SaveProjectInfo: SQL Transaction object is either Nothing or has no connection")
End If
Try
Using mCn
Dim command As New SqlCommand()
'command = mCn.CreateCommand()
command.CommandType = CommandType.Text
command.CommandText = TaskCommand
command.Transaction = trn
command.ExecuteNonQuery()
End Using
Catch ex As Exception
Config.LogError(ex)
trn.Rollback()
End Try
'trn.Commit()
End Using
Catch ex As Exception
Config.LogError(ex)
'TODO – Bubble this back to the UI
Finally
CloseDatabase()
End Try
Return 0
End Function
我试过强制提交(目前上面已注释掉)但这会导致异常捕获器捕获到“'This SqlTransaction has completed; it is no longer usable.'”错误消息。我花了几个小时搜索 google 寻找答案,但我现在束手无策。
谁能帮忙解释一下为什么我的 ExecuteNonQuery 正在执行 SQL 查询但没有提交更改??
我正在使用 Visual Studio Community 2017 和 SQL Server 2019。
编辑:mCn 来自另一个函数 OpenDatabase(),如下所示:
Private Sub OpenDatabase()
mCn = New SqlConnection(Config.SQLConnectionString)
If mCn.State <> ConnectionState.Open Then
mCn.Open()
End If
End Sub
mCn 是我用作数据库连接的 - 又名“我的连接”
好像你没有在任何地方提交你的交易,尝试在 ExecuteNonQuery
之后提交
Using mCn
Dim command As New SqlCommand()
'command = mCn.CreateCommand()
command.CommandType = CommandType.Text
command.CommandText = TaskCommand
command.Transaction = trn
command.ExecuteNonQuery()
trn.Commit()
End Using
我有一个函数,我在其中传递一些 SQL 并尝试对数据库执行它。
函数正常完成,SQL 跟踪显示正在对数据库执行查询,但是当我刷新 select 语句时,数据没有更新。在这种情况下,查询很简单:
update *table* set *columnA* = *columnA* + 1
在 SQL 或 Visual Studio 中没有生成错误,但如前所述,更新未提交,数据保持不变。
下面是我的函数代码:
Public Function RunSQL(TaskCommand As String) As String
Try
'Opens connection to DB
OpenDatabase()
'Start an SQL Transaction to ensure data integrity
Dim trn As SqlTransaction = mCn.BeginTransaction
Using trn
If trn Is Nothing _
OrElse trn.Connection.State <> ConnectionState.Open Then
Throw New ApplicationException("SaveProjectInfo: SQL Transaction object is either Nothing or has no connection")
End If
Try
Using mCn
Dim command As New SqlCommand()
'command = mCn.CreateCommand()
command.CommandType = CommandType.Text
command.CommandText = TaskCommand
command.Transaction = trn
command.ExecuteNonQuery()
End Using
Catch ex As Exception
Config.LogError(ex)
trn.Rollback()
End Try
'trn.Commit()
End Using
Catch ex As Exception
Config.LogError(ex)
'TODO – Bubble this back to the UI
Finally
CloseDatabase()
End Try
Return 0
End Function
我试过强制提交(目前上面已注释掉)但这会导致异常捕获器捕获到“'This SqlTransaction has completed; it is no longer usable.'”错误消息。我花了几个小时搜索 google 寻找答案,但我现在束手无策。
谁能帮忙解释一下为什么我的 ExecuteNonQuery 正在执行 SQL 查询但没有提交更改??
我正在使用 Visual Studio Community 2017 和 SQL Server 2019。
编辑:mCn 来自另一个函数 OpenDatabase(),如下所示:
Private Sub OpenDatabase()
mCn = New SqlConnection(Config.SQLConnectionString)
If mCn.State <> ConnectionState.Open Then
mCn.Open()
End If
End Sub
mCn 是我用作数据库连接的 - 又名“我的连接”
好像你没有在任何地方提交你的交易,尝试在 ExecuteNonQuery
之后提交Using mCn
Dim command As New SqlCommand()
'command = mCn.CreateCommand()
command.CommandType = CommandType.Text
command.CommandText = TaskCommand
command.Transaction = trn
command.ExecuteNonQuery()
trn.Commit()
End Using