- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在使用 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
。难道我做错了什么? 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/
我是一名优秀的程序员,十分优秀!