回答
有一個屬性叫RowError,你可以檢查。
見http://dotnetdebug.net/2006/07/16/constraintexception-a-helpful-tip/
編輯以添加此鏈接顯示行,看看其中有錯誤的迭代。
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.adonet/topic58812.aspx
和許多人一樣,我有自己的標準的數據訪問組件,其中包括方法返回一個DataSet。當然,如果拋出ConstraintException,DataSet不會返回給調用者,因此調用者無法檢查行錯誤。
我做了什麼是漁獲物和重新拋出ConstraintException在這種方法中,記錄行錯誤的詳細信息,如下面的例子(使用log4net的日誌記錄):
...
try
{
adapter.Fill(dataTable); // or dataSet
}
catch (ConstraintException)
{
LogErrors(dataTable);
throw;
}
...
private static void LogErrors(DataSet dataSet)
{
foreach (DataTable dataTable in dataSet.Tables)
{
LogErrors(dataTable);
}
}
private static void LogErrors(DataTable dataTable)
{
if (!dataTable.HasErrors) return;
StringBuilder sb = new StringBuilder();
sb.AppendFormat(
CultureInfo.CurrentCulture,
"ConstraintException while filling {0}",
dataTable.TableName);
DataRow[] errorRows = dataTable.GetErrors();
for (int i = 0; (i < MAX_ERRORS_TO_LOG) && (i < errorRows.Length); i++)
{
sb.AppendLine();
sb.Append(errorRows[i].RowError);
}
_logger.Error(sb.ToString());
}
您的LogErrors方法非常棒!今天從字面上救了我。 – Dave 2010-04-14 22:36:55
我添加了一些代碼,我我發現在調試ConstraintException發生時很有用here
希望這會有所幫助。
當您使用強類型數據集和使用的可視化設計器(XSD):訪問tbl.Rows [0] .RowError信息,你需要創建填寫方法。
您的不能使用Get方法,因爲DataTable是在生成的代碼中實例化的。
像你說的,你需要填寫。很奇怪;爲什麼我只需要獲取一些數據(基本選擇)就需要填充語句。似乎在裏面的某個地方這個Fill方法被.net使用。在我生成一個填充方法(沒有改變得到)它的工作。 – Obelix 2013-12-30 14:29:12
誰想要一個片段就要上ConstraintException更多細節的Google:
try
{
ds.EnforceConstraints = true;
}
catch (ConstraintException ex)
{
string details = string.Join("",
ds.Tables.Cast<DataTable>()
.Where(t => t.HasErrors)
.SelectMany(t => t.GetErrors())
.Take(50)
.Select(r => "\n - " + r.Table.TableName + "[" + string.Join(", ", r.Table.PrimaryKey.Select(c => r[c])) + "]: " + r.RowError));
throw new ConstraintException(ex.Message + details);
}
- 1. 觸發下載計數的是什麼?
- 2. 觸發LBN_SELCANCEL的是什麼?
- 3. 爲什麼asyncRefresh事件在頁面加載時觸發
- 4. 爲什麼ng-checked在頁面加載時觸發兩次
- 5. 爲什麼Post代碼在jQuery加載時被觸發?
- 6. 爲什麼Safari在加載iframe時未觸發popstate?
- 7. 爲什麼在頁面加載時觸發jQuery點擊事件?
- 8. 爲什麼$ pageChangeStart在頁面加載時觸發?
- 9. 加載時觸發jQuery
- 10. 什麼是觸發功能
- 11. 爲什麼我的函數在頁面加載時觸發,我該怎麼辦?
- 12. 鉻開發工具,什麼是加載?
- 13. 加載腳本時會發生什麼
- 14. DataSet中DataRelation的用途是什麼?
- 15. ConstraintException但我不知道爲什麼!
- 16. 爲什麼加載的元數據不會一直觸發
- 17. 爲什麼__doPostBack()不會觸發我的綁定加載事件?
- 18. 什麼觸發了UITableView第一次加載它的數據?
- 19. 爲什麼我的DataTable臨時添加到我的DataSet中?
- 20. 我可以確定觸發組件載荷的是什麼嗎?
- 21. 爲什麼在C#中用ReadXml將DataSet加載爲空?
- 22. DOM加載時間究竟是什麼?
- 23. 在頁面加載過程MVC中觸發的最終javascript事件是什麼?
- 24. 爲什麼我的itemlistener總是觸發
- 25. node-imap:imap.end()觸發的事件是什麼?
- 26. 觸發BluetoothDevice.ACTION_ACL廣播的是什麼?
- 27. 的Javascript:爲什麼是「.deletebutton」不觸發
- 28. 爲什麼我的css類不會在初始加載時觸發?
- 29. 爲什麼只有其中的一行javascript會在頁面加載時觸發?
- 30. 是什麼觸發了「onLoad」事件的觸發?
我願意給你更多的了贊成票,如果我能。這也是我身邊的一根刺。 – 2008-09-26 15:19:56