1

私は自分のプロジェクトで多くのトランザクションを使用しています:このように:

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があり、ログには実際のエラーではなくこのエラーが保存されています。

4

2 に答える 2

2

トランザクションの作成中にエラーが発生した場合、変数は設定されません。

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

だからtransになりますnull。あなたが存在するcatchことを期待transしているように、あなたは本物の例外を飲み込むこの新しい例外を作成しています。

実際の例外を取得するには、次の行を前に追加しますtrans.Rollback()

if(trans == null) throw;

この脅威:エラーが発生し、トランザクションが作成されなかった場合は、エラーをスローします。

于 2012-06-09T14:18:45.590 に答える
0

申し訳ありませんが、実際の問題が見つかりました。sqlCeがインストールされていません。また、ex.innerexception = nullがあり、ログには実際のエラーではなくこのエラーが保存されています。

于 2012-11-26T08:46:05.753 に答える