2012-02-22 38 views
2

我试图在加载IDataReader对象所包含的信息后,在DataTable中添加新条目,DbDataReader具体说明。加载进行得很好,查询到数据库是正确的,我想。如何将新行添加到由IDataReader填充的表中?

当试图添加一个新行我得到了以下信息的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 s。难道我做错了什么? 0如何违反MaxLength限制?

+0

是否确定在手动添加行的行上引发异常,而不是从读取器加载表的行上引发异常? – 2012-02-22 15:36:56

+0

我这么认为,然后通过Visual Studio调试器执行,这是链接到异常的行。 – Armos 2012-02-22 15:52:37

+1

如果您的ID是非文本列,则应忽略MaxLength属性。 http://msdn.microsoft.com/en-us/library/system.data.datacolumn.maxlength.aspx – 2012-02-22 16:16:57

回答

1

最后你用我最喜欢的调试器“招数”一个未mistify奇怪DataTable解决问题例外。来自评论:

您可以随时使用 调试器查看导致ConstraintException的原因。在QuickWatch对话框中执行table.Load(阅读器)。 然后执行table.GetErrors()。然后,您可以查看RowError属性返回的行 。瞧!

由于我在几乎所有情况下使用DbDataAdapter.Fill(DataTable),我已经忘记了DataTable.Load(IDataReader)推断基于此结果来自进口IDataReader集的模式。但当然它至少需要一个DataRow才能这样做。这就是为什么它在DataTable不是空的时候工作的原因。

0

检查您的ID列MaxLength属性在数据表中

size = dataTables(0).Columns(0).MaxLength 

http://forums.asp.net/t/306971.aspx

+1

在C#中它会是table.Columns [0] .MaxLength,它似​​乎是0 ... – Armos 2012-02-22 15:53:04

+0

好吧,应该是一个属性,你可以设置它像10或者你可能需要设置上面的注释DataColumn.DataType – 2012-02-22 16:46:53