如何将新行添加到由IDataReader填充的表中

本文关键字:填充 IDataReader 新行 添加 | 更新日期: 2023-09-27 18:25:21

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

当尝试添加新行时,我得到一个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都是VARCHARs。我做错了什么吗?0怎么会违反MaxLength限制?

如何将新行添加到由IDataReader填充的表中

最后,您使用我最喜欢的调试器"技巧"之一来消除奇怪的DataTable异常,从而解决了这个问题。来自评论:

您可以通过使用调试器。执行表。在QuickWatch对话框中加载(读取器)。然后执行表。GetErrors()。然后你可以查看在其RowError属性处返回了行。瞧!

由于我在几乎所有情况下都使用DbDataAdapter.Fill(DataTable),所以我忘记了DataTable.Load(IDataReader)是根据导入的IDataReader的结果集推断模式的。当然,它至少需要一个DataRow才能做到这一点。这就是为什么它在DataTable不为空时工作的原因。

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

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

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