从SQL Server Compact查询字段值

时间:2012-08-31 15:59:01

标签: c# sql-server-ce constraintexception

(playerListTableAdapter.GetHeight(sortedPlayers[counter])

“已排序的玩家”是一个小数组,与主键匹配。

当我调用查询 GetHeight 时,我收到以下错误:“ConstraintException未处理:无法启用约束。一行或多行包含违反非null,唯一或外键约束。“

查询的SQL语句是:

SELECT        Height
FROM            PlayerList
WHERE        (Number = @PlayerID)

注意:在数据库中,数字主键

当我们逐步执行时,我们可以看到 sortedPlayers [counter] 与数据库中的玩家匹配。

有关导致此错误的原因的任何想法?

谢谢!

-Dominique

3 个答案:

答案 0 :(得分:2)

您在查询中添加主键

SELECT       YourPrimaryKey, Height
FROM            PlayerList
WHERE        (Number = @PlayerID)

答案 1 :(得分:2)

要解决此问题,您可以在DataTable上将EnforceConstraints设置为false

EplayerListTableAdapter.EnforceConstraints = false;

更详细的答案在这里:http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/c2c9158d-cddf-40cf-bf6c-794dc3ef9c7f/

答案 2 :(得分:2)

为了使查询正常工作,我发现我可以使用以下语法更直接地访问该值:

decimal? Player1Hgt = dsPlayerTeam.PlayerList.Rows.Find(sortedPlayers[counter]).Field<decimal?>("Height");

这允许我在不使用tableAdapter查询的情况下从数据库中提取值,并且非常简单。

顺便说一下,我确实尝试将tableAdapter的 EnforceConstraints 属性设置为false,但它仍然抛出错误。

感谢您的帮助!