通过DataAdapter检索数据表时回滚

时间:2014-09-25 22:53:15

标签: rollback dataadapter

我有几种方法可以连接到SQL Server数据库。其中之一是通过存储过程检索数据表。在某些情况下,我使用这一个,其中存储过程对数据库进行实际更新,最后我只想返回多个值,因此检索数据表而不是输出参数。

我注意到如果在UPDATE语句期间发生错误,则不会自动回滚。

所以,我在我的CATCH语句中添加了ROLLBACK函数:

 Public Function StoredProcReturnTable(ByVal colParameters As Collection, _
 ByVal strProcName As String, ByVal strTableName As String, _
 ByVal strServer As String, ByVal strDatabase As String) As Data.DataTable

    Dim cn As SqlClient.SqlConnection
    Dim cm As SqlClient.SqlCommand = New SqlClient.SqlCommand
    Dim objParameter As SqlClient.SqlParameter
    Dim ds As New DataSet
    Dim da As SqlClient.SqlDataAdapter

    Try
        With cm
            .CommandType = CommandType.StoredProcedure
            .CommandTimeout = CommandTimeout
            .CommandText = strProcName
            For Each objParameter In colParameters
                .Parameters.Add(objParameter)
            Next
             cn = GetCN(strServer, strDatabase)
            .Connection = cn
            cm.Transaction = cn.BeginTransaction
            da = New SqlClient.SqlDataAdapter(cm)
            da.Fill(ds)
            cm.Transaction.Commit()
            ds.Tables(0).TableName = strTableName
            Return ds.Tables(0) 
     End With
    Catch ex As Exception
        cm.Transaction.Rollback()
        Throw ex
    Finally
        Close(cn)
    End Try
End Function

在测试带有异常的存储过程时,我注意到我的Debug Output窗口显示:

  

单步执行:逐步执行非用户代码&System; System.Data.SqlClient.SqlCommand.RunExecuteReaderTds'   步入:踩过非用户代码&System; System.Data.SqlClient.SqlCommand.ExecuteReader'   步入:踩过非用户代码&System;数据。   步入:踩过非用户代码&System;数据。   步入:踩过非用户代码&System;数据。   步入:踩过非用户代码' System.Data.Common.DbDataAdapter.Fill'   步入:踩过非用户代码' System.Data.Common.DbDataAdapter.Fill'

我确认回滚正在运行,但我担心因为那些消息我做错了什么?在我的常规INSERT / UPDATE / DELETE存储过程中使用ExecuteNonQuery()时,我不会收到这些消息。

0 个答案:

没有答案
相关问题