1

我对 SQL2008 数据库运行合并查询,该数据库使用以下 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 - 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。

我在 MSDN 上找到了这个,它适合我的场景,但我该如何解决这个问题呢?

清除主键dt.PrimaryKey=null;不起作用

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

4

5 回答 5

2

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

 Try

 TempDataTable.Load(PrimaryCommand.ExecuteReader)

Catch ex As ConstraintException

  End Try

请注意,此问题可能与较新的线程DataTable.Load 重复,一行或多行包含违反非空值的值

于 2017-06-13T23:37:42.670 回答
1

做这个。把select output作为派生表和select *从派生。

似乎有帮助。

喜欢

Select * from
(Select columnB,columnB ) -- if your table is being created on the fly.
于 2012-02-09T23:11:30.977 回答
0

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

非空:检查某些字段是否返回空值以及该字段是否允许空值。

独特的:似乎已被证实

于 2011-10-19T10:47:25.227 回答
0

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

于 2011-10-18T14:05:12.353 回答
0

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

 dt.BeginLoadData();
 dt.Load(dbReader);
 dt.EndLoadData();
于 2013-11-06T13:26:57.710 回答