2017-07-11 10 views
0

Updateコマンドで、上記のエラーが発生します。正確な違反フィールドを取得する:並行性違反:UpdateCommandが予期された1レコードの0に影響を受けました

私はすべてをログアウトしようとしましたが、問題の原因となっているフィールドを見つけることができません。私は "myoriginal"をSSMS経由でデータベースから得た値と比較しました。まったく同じです。

同時実行エラーの原因となる正確なフィールドを見つけるにはどうすればよいですか?

エラーを特定するための私のコード:

public virtual int Update(global::System.Data.DataRow[] dataRows) 
{ 
    try 
    { 
    return this.Adapter.Update(dataRows); 
    } 
    catch (System.Exception ex) 
    { 
    var msg = "my little exception, " + dataRows.Length + " rows attempted to update"; 
    foreach (var row in dataRows) 
    { 
     msg += "row has errors: " + row.HasErrors; 
     if (row.HasErrors) 
     { 
     msg += " descr " + row.RowError + System.Environment.NewLine; 
     foreach (var col in row.GetColumnsInError()) 
      msg += " col " + row.GetColumnError(col.ColumnName); 
     } 
     { 
     msg += "mynewone"; 
     msg += System.Environment.NewLine; 
     var columns = row.Table.Columns; 
     foreach (System.Data.DataColumn col in columns) 
      msg += col.ColumnName + "->" + row[col.ColumnName]; 
     msg += System.Environment.NewLine; 

     msg += "myoriginal"; 
     msg += System.Environment.NewLine; 

     foreach (System.Data.DataColumn col in columns) 
      msg += col.ColumnName + "->" + row[col.ColumnName, System.Data.DataRowVersion.Original]; 
     msg += System.Environment.NewLine; 

     msg += "theend"; 
     msg += System.Environment.NewLine; 
     } 
    } 
    throw new System.Exception(msg, ex); 
    } 
} 

最初の部分(row.HasErrors) - 任意の出力を生成しません - 私はどのようなエラーであることは細部に望みました。

下の部分は、DBのデータと照合するために使用しましたが、正確にはそうであるようです。

+0

おそらく、更新ステートメントに問題がありますか?または、ストアドプロシージャを呼び出していますか? – PrfctByDsgn

答えて

0

私は単純にすべてのデータをログに記録しました。以前のロギングロジックにエラーがあり、エラーが表示されなくなっていました。 そして、ストアドプロシージャで、更新が間違ったデータを返す(typo、missing "、" 2つの戻り値の間)というエラーが見つかりました。

msg += "mynewone"; 
msg += System.Environment.NewLine; 
var columns = row.Table.Columns; 
foreach (System.Data.DataColumn col in columns) 
    msg += col.ColumnName + "->" + row[col.ColumnName]; 
msg += System.Environment.NewLine; 

msg += "myoriginal"; 
msg += System.Environment.NewLine; 

try { 
    foreach (System.Data.DataColumn col in columns) 
     msg += col.ColumnName + "->" + row[col.ColumnName, System.Data.DataRowVersion.Original]; 
} 
catch (System.Exception) { 
    // possible that original data does not exist - simply skip this then 
} 
msg += System.Environment.NewLine; 
関連する問題