在DataTable中加载DataReader时获取约束异常

时间:2011-10-18 13:07:36

标签: c# sql-server-2008 datatable dbdatareader

我对SQL2008数据库运行一个Merge查询,该数据库使用以下c#代码返回合并的输出:

cmd.CommandText = query;
if (conn.DBConn.State == ConnectionState.Closed) conn.DBConn.Open();
DbDataReader dbReader = cmd.ExecuteReader();
DataTable dt = new DataTable("Results");
dt.Load(dbReader);

最后一行抛出错误:

  

System.Data.ConstraintException - 无法启用约束。一个或   更多行包含违反非null,唯一或外键的值   约束

我在MSDN上找到this,它符合我的情况,但我该如何解决这个问题?

使用dt.PrimaryKey=null;清除主键无法正常工作

上面的代码将用于许多表格。

5 个答案:

答案 0 :(得分:2)

我发现此错误的最简单的解决方法是将其包装在Catch块中并忽略错误。我在实现cjb110的excellent article时发现了它,以挖掘有关约束错误的更多信息。令我惊讶的是,我完全了解到我们可以完全忽略错误并按原样使用数据表。我已经验证下面的VB代码(随意通过C#语法的代码转换器运行它)按预期返回所有行和列,至少在我遇到问题的实例中(在我的情况下有主要是在ADOMD Command对象上。)

 Try

 TempDataTable.Load(PrimaryCommand.ExecuteReader)

Catch ex As ConstraintException

  End Try

请注意,此问题可能是较新的帖子DataTable.Load, One or more rows contain values violating non-null

的副本

答案 1 :(得分:1)

这样做。将select output作为派生表,将select *放在派生表中。

似乎有所帮助。

喜欢

Select * from
(Select columnB,columnB ) -- if your table is being created on the fly.

答案 2 :(得分:0)

也许您的查询返回多个结果集?在Management Studio中运行您的查询或类似的查看。

答案 3 :(得分:0)

违反非空,唯一或外键约束。

非null:检查某些字段是否返回null以及字段是否允许为null。

独特:似乎已经确认

答案 4 :(得分:0)

在调用Load。之前放置dt.BeginLoadData()

 dt.BeginLoadData();
 dt.Load(dbReader);
 dt.EndLoadData();