我对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;
清除主键无法正常工作
上面的代码将用于许多表格。
答案 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();