我尝试将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
的类型为INTEGER
,而Name
和SurName
均为VARCHAR
。难道我做错了什么? 0
如何违反MaxLength限制? 最佳答案
最终,您通过使用我最喜欢的调试器“技巧”之一取消模糊了奇怪的DataTable
异常,解决了该问题。来自评论:
您始终可以使用以下命令查看导致ConstraintException的原因
调试器。在QuickWatch对话框中执行table.Load(reader)。
然后执行table.GetErrors()。然后,您可以查看
在其RowError属性中返回行。瞧!
由于我几乎在所有情况下都使用DbDataAdapter.Fill(DataTable)
,因此我已经忘记了DataTable.Load(IDataReader)
基于导入的IDataReader
的结果集推断架构。但是,当然至少需要一个DataRow
才能这样做。这就是为什么DataTable
不为空时它起作用的原因。
关于c# - 如何将新行添加到由IDataReader填充的表中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9397569/