SqlTransaction “对象引用未设置为对象的实例”
本文关键字:对象 实例 设置 对象引用 SqlTransaction | 更新日期: 2023-09-27 18:36:36
我在项目中使用了许多事务: 像这样:
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;
}
}
我使用错误日志来知道我在哪里有问题,
该应用程序在许多客户端中运行良好,但我在新客户端中安装了该应用程序,并且文件日志中出现错误,出现代码错误和异常。消息
正在初始化:对象引用未设置为对象的实例
此行中的错误:SqlTransaction trans = null;
抱歉,我发现了真正的问题,sqlCe 未安装,并且有 ex.innerexception = null 日志已保存此错误而不是真正的错误
如果创建事务时出错,则永远不会设置变量:
trans = connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)
所以trans
将是null
.就像你期望trans
存在的catch
一样,你正在创造这个吞噬真实例外的新例外。
为了获得实际的异常,请在trans.Rollback()
之前添加此行:
if(trans == null) throw;
这是:如果出现错误并且未创建事务,请抛出错误。
抱歉,我发现了真正的问题,sqlCe 未安装,并且有 ex.innerexception = null 日志已保存此错误而不是真正的错误