【发布时间】:2012-03-26 03:06:11
【问题描述】:
我有这个方法:
public static DataTable ExecuteDataTable(IDbConnection connection, string cmdText)
{
IDbCommand command = connection.CreateCommand();
command.CommandText = cmdText;
command.CommandType = CommandType.Text;
IDataReader reader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
return dt;
}
当我针对 SQLConnection 类型的连接执行查询 select * from information_schema.Tables 时,一切正常。
但是,当我尝试针对SqlCEConnection 类型的连接运行它时,dt.Load(reader) 行会引发异常:
System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
【问题讨论】:
-
您可以随时查看
DataTable以了解导致ConstraintException的原因。在dt.Load(reader);行设置断点。用户 Quick-Watch Window 执行此行。然后您可以使用dt.GetErrors()获取所有有错误的行。然后您可以查看每个返回的 DataRow 的RowError属性以了解实际原因。 -
感谢 GetErrors() 方法的提示。我明白了:RowError:“列 'DATE_MODIFIED' 不允许 DBNull.Value。” SqlCE 似乎返回了比 SQL Server 2005 更多的列,但将它们保留为 NULL。
标签: c# datatable connection sql-server-ce datareader