SqlTransaction“对象引用未设置为对象的实例”?

时间:2012-06-09 13:54:03

标签: c# transactions sql-server-2008-r2

我在项目中使用了很多事务:像这样:

bool retVal = true;
string errorCode = string.Empty;
try
 {
   result = RecordsDal.ReadAllDoneRecords();
   retVal = Export(result, out errorCode);
 }
catch
 {
    Errorlog(errorCode, ex.Message);
    MessageBox.Show("Error Export "+ Environment.NewLine + ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Stop);
    return false;            
 }

出口:

    public static bool Export(List<Record> result,  out string error)
    {
        bool retVal = true;
        error = "sqlCeConnection";
        SqlCeConnection sqlCeConnection = null;
        error = "Initializiong";
        SqlTransaction trans = null;
        try
        {
           error = "Begin";
           .......
           error = "End";
        }
        catch (Exception ex)
        {
            trans.Rollback();
            retVal = false;                
        }
    }

我使用错误日志来了解我遇到问题的地方,

应用程序在许多客户端工作正常,但是我在新的应用程序中安装了应用程序,并且我在文件日志中出现错误,包含代码错误和异常ex.Message

  

初始化:未将对象引用设置为对象的实例

此行中的错误:SqlTransaction trans = null;

抱歉,我发现真正的问题,sqlCe没有安装,并且有ex.innerexception = null日志已保存此错误而不是真正的

2 个答案:

答案 0 :(得分:2)

如果创建事务时出错,则永远不会设置变量:

trans = connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)

因此trans将是null。正如您catch期望存在trans一样,您正在创建这个吞噬真实异常的新异常。

为了获得实际的异常,请在trans.Rollback()之前添加此行:

if(trans == null) throw;

此menas:如果出现错误并且未创建事务,则抛出错误。

答案 1 :(得分:0)

抱歉,我发现真正的问题,sqlCe没有安装,并且有ex.innerexception = null日志已保存此错误而不是真正的