2012-02-22 98 views
2

我試圖在加載IDataReader對象所包含的信息後,在DataTable中添加新條目,DbDataReader具體說明。加載進行得很好,查詢到數據庫是正確的,我想。如何將新行添加到由IDataReader填充的表中?

當試圖添加一個新行我得到了以下信息的ArgumentException

Cannot set column 'ID'. The value violates the MaxLength limit of this column. 

這是代碼,我現在所擁有的:

// Build the query: 
DbCommand cmd = dbCon.CreateCommand(); 
cmd.CommandText = "SELECT ID, Name || ' ' || SurName AS FullName FROM Clients ORDER BY FullName;"; 
// Execute it: 
DbDataReader reader = cmd.ExecuteReader(); 
// Construct the table out of the query result: 
DataTable table = new DataTable(); 
table .Load(reader); 
table.Rows.Add(0, "None"); 

在數據庫中(SQLite的)IDINTEGER的類型,並且NameSurName都是VARCHAR s。難道我做錯了什麼? 0如何違反MaxLength限制?

+0

是否確定在手動添加行的行上引發異常,而不是從讀取器加載表的行上引發異常? – 2012-02-22 15:36:56

+0

我這麼認爲,然後通過Visual Studio調試器執行,這是鏈接到異常的行。 – Armos 2012-02-22 15:52:37

+1

如果您的ID是非文本列,則應忽略MaxLength屬性。 http://msdn.microsoft.com/en-us/library/system.data.datacolumn.maxlength.aspx – 2012-02-22 16:16:57

回答

1

最後你用我最喜歡的調試器「招數」一個未mistify奇怪DataTable解決問題例外。來自評論:

您可以隨時使用 調試器查看導致ConstraintException的原因。在QuickWatch對話框中執行table.Load(閱讀器)。 然後執行table.GetErrors()。然後,您可以查看RowError屬性返回的行 。瞧!

由於我在幾乎所有情況下使用DbDataAdapter.Fill(DataTable),我已經忘記了DataTable.Load(IDataReader)推斷基於此結果來自進口IDataReader集的模式。但當然它至少需要一個DataRow才能這樣做。這就是爲什麼它在DataTable不是空的時候工作的原因。

0

檢查您的ID列MaxLength屬性在數據表中

size = dataTables(0).Columns(0).MaxLength 

http://forums.asp.net/t/306971.aspx

+1

在C#中它會是table.Columns [0] .MaxLength,它似​​乎是0 ... – Armos 2012-02-22 15:53:04

+0

好吧,應該是一個屬性,你可以設置它像10或者你可能需要設置上面的註釋DataColumn.DataType – 2012-02-22 16:46:53