如何将新行添加到由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
的类型为INTEGER
,Name
和SurName
都是VARCHAR
s。我做错了什么吗?0
怎么会违反MaxLength限制?
最后,您使用我最喜欢的调试器"技巧"之一来消除奇怪的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