我在项目中使用了很多事务:像这样:
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日志已保存此错误而不是真正的
答案 0 :(得分:2)
如果创建事务时出错,则永远不会设置变量:
trans = connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)
因此trans
将是null
。正如您catch
期望存在trans
一样,您正在创建这个吞噬真实异常的新异常。
为了获得实际的异常,请在trans.Rollback()
之前添加此行:
if(trans == null) throw;
此menas:如果出现错误并且未创建事务,则抛出错误。
答案 1 :(得分:0)