c# - 如何将新行添加到由 IDataReader 填充的表中?

标签 c# sqlite datatable datareader

在使用 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) 中,IDINTEGER 类型,NameSurName 都是 VARCHAR。难道我做错了什么? 0 怎么会违反 MaxLength 限制?

最佳答案

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

You can always look what causes the ConstraintException by using the debugger. Execute table.Load(reader) in a QuickWatch Dialog Box. Afterwards execute table.GetErrors(). Then you can look into the returned rows at their RowError property. Voilà!

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

关于c# - 如何将新行添加到由 IDataReader 填充的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9397569/

相关文章:

c# - 如何从字节数组添加电子邮件附件?

c# - 如何使用 Microsoft ASP.NET Web API OData 中的 Delta<T> 和 Code First\JsonMediaTypeFormatter

java - Hibernate 的 SQLite 方言错误

sqlite Windows Phone 8 应用程序示例

c# - 使用 linq 将列添加到当前 DataTable

javascript - JQuery dataTable删除id和class结果行需要在值中搜索

c# - 大型 C#/C++ 解决方案的良好目录结构是什么?

c# - 如何制作网页渐变 ASP.NET 和 CSS?

python - 在virtualenv中下载sqlite3

c# - DataTable 列值分组和排序