【发布时间】:2012-02-22 15:19:45
【问题描述】:
我正在尝试向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 均为 VARCHARs。难道我做错了什么? 0 怎么会违反 MaxLength 限制?
【问题讨论】:
-
您确定异常是在您手动添加行的那一行引发的,而不是在您从阅读器加载表格的那一行吗?
-
我认为是这样,然后通过 Visual Studio 调试器执行链接到异常的行。
-
如果您的 ID 是非文本列,则应忽略 MaxLength 属性。 msdn.microsoft.com/en-us/library/…
-
@TimSchmelter 嗯...每当表为空时,我就会出现错误,查询没有返回任何行。当里面有东西时,例如 1 行
(1, "Test Test")当表格被填充时,我在Load()方法中得到一个不同的异常: ConstraintException : 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。也许最好手动通过阅读器。 -
您始终可以使用调试器查看导致
ConstraintException的原因。在 QuickWatch 对话框中执行table.Load(reader)。然后执行table.GetErrors()。然后您可以在其RowError属性中查看返回的行。瞧!
标签: c# sqlite datatable datareader