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 日志已保存此错误而不是真正的错误

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

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

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

所以trans将是null.就像你期望trans存在的catch一样,你正在创造这个吞噬真实例外的新例外。

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

if(trans == null) throw;

这是:如果出现错误并且未创建事务,请抛出错误。

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