我尝试将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,而NameSurName均为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/

10-11 11:45