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