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

C# SqlTransaction“;对象引用未设置为对象的实例”;?,c#,transactions,sql-server-2008-r2,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 Expor

我在我的项目中使用了许多事务:如下所示:

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;                
        }
    }
公共静态bool导出(列表结果,输出字符串错误)
{
bool-retVal=true;
error=“sqlCeConnection”;
SqlCeConnection SqlCeConnection=null;
error=“initializeng”;
SqlTransaction=null;
尝试
{
error=“Begin”;
.......
error=“End”;
}
捕获(例外情况除外)
{
trans.Rollback();
retVal=false;
}
}
我用一个错误日志来知道哪里出了问题

该应用程序在许多客户端都可以正常工作,但我在新客户端安装了该应用程序,并且我在文件日志中有一个错误,有代码错误和异常消息

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

此行中的错误:
SqlTransaction=null


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

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

trans = connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)
因此
trans
将为
null
。正如您在
catch
中期望
trans
存在一样,您正在创建这个新的异常,它吞噬了真实的异常

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


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

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

您可以发布发生异常的确切代码行吗?堆栈跟踪也会有所帮助。连接设置在哪里?这是NRE,在许多地方都可能发生。它发生在对空对象调用方法时。您应该检查堆栈跟踪。需要检查两件事-连接是否为空?第二,如果事务没有启动,那么在盲目地将其回滚到Catch之前,您需要检查null。我在调试模式下或在我的测试中,在许多PC和所有客户端中都没有此错误,但这个新的错误我必须使用堆栈跟踪更改日志,并将应用程序更改为Knownexion null,我使用这个应用程序大约6个月了,这是我第一次使用它,SqlTransaction声明行中的错误是:SqlTransaction trans=null;应用程序还没有创建完全没有意义的事务。试试我的建议,或者粘贴上面写的堆栈跟踪。这完全没有意义。(是的,我知道)好的,我将进行堆栈跟踪,我将更改应用程序并获取它,CodeError说“正在初始化”,但没有说“开始”?我的意思是,您只是将日志值赋予属性,而您提供的代码甚至没有编译(缺少;),因此我无法确定这是否是您正在执行的实际代码,而且更难做出正确的诊断。
if(trans == null) throw;