如何在由IDataReader填充的表中添加新行?

时间:2012-02-22 15:19:45

标签: c# sqlite datatable datareader

在我使用DataTable对象中包含的信息(具体为IDataReader)加载后,我正在尝试向DbDataReader添加新条目。加载很顺利,我认为对数据库的查询是正确的。

尝试添加新行时,我会收到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)中,ID的类型为INTEGERNameSurName都是VARCHAR。难道我做错了什么? 0怎么可能违反MaxLength限制?

2 个答案:

答案 0 :(得分:1)

最后,您通过使用我最喜欢的调试器“技巧”解决了这个问题,以排除奇怪的DataTable异常。来自评论:

  

您可以随时查看导致ConstraintException的原因   调试器。在QuickWatch对话框中执行table.Load(reader)。   然后执行table.GetErrors()。然后你可以看看   在RowError属性返回行。瞧!

由于我几乎在所有情况下都使用DbDataAdapter.Fill(DataTable),因此我忘记DataTable.Load(IDataReader)根据导入的IDataReader的结果集推断架构。但当然至少需要一个DataRow才能这样做。这就是DataTable不为空的原因。

答案 1 :(得分:0)

检查数据表中ID列的MaxLength属性

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

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