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;