2017-07-11 59 views
0

在更新命令中,我得到了上述錯誤。獲取確切的違規字段:併發衝突: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) - 我希望能詳細說一下是錯誤的 - 不產生任何輸出。

我用來對數據庫中的數據進行干擾的下半部分,這似乎與它應該是完全一樣的。

+0

也許你的更新語句有問題嗎?或者你在調用存儲過程? – PrfctByDsgn

回答

0

我只是記錄了所有的數據。事實證明,我在之前的日誌記錄邏輯中存在錯誤,導致我無法發現我的錯誤。 然後我在存儲過程中發現一個錯誤,在更新返回錯誤數據後(錯字,缺少兩個返回值之間的「,」)。

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; 
相關問題