在我使用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限制?
答案 0 :(得分:1)
最后,您通过使用我最喜欢的调试器“技巧”解决了这个问题,以排除奇怪的DataTable
异常。来自评论:
您可以随时查看导致ConstraintException的原因 调试器。在QuickWatch对话框中执行table.Load(reader)。 然后执行table.GetErrors()。然后你可以看看 在RowError属性返回行。瞧!
由于我几乎在所有情况下都使用DbDataAdapter.Fill(DataTable)
,因此我忘记DataTable.Load(IDataReader)
根据导入的IDataReader
的结果集推断架构。但当然至少需要一个DataRow
才能这样做。这就是DataTable
不为空的原因。
答案 1 :(得分:0)
检查数据表 size = dataTables(0).Columns(0).MaxLength