【问题标题】:Query field values from SQL Server Compact从 SQL Server Compact 查询字段值
【发布时间】:2012-09-01 11:06:09
【问题描述】:
(playerListTableAdapter.GetHeight(sortedPlayers[counter])

“Sorted Players” 是一个小数数组,与 主键 匹配。

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

查询的 SQL 语句是:

SELECT        Height
FROM            PlayerList
WHERE        (Number = @PlayerID)

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

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

关于导致此错误的原因有什么想法吗?

谢谢!

-多米尼克

【问题讨论】:

  • sortedPlayers[counter] 的值是多少?

标签: c# sql-server-ce constraintexception


【解决方案1】:

您在查询中添加主键

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

【讨论】:

  • 如果我这样做,它不会尝试返回主键以及高度吗? (WHERE 语句中的数字是主键)
  • 是的,为了用你的主键本地化你的高度目标,为了修改好的值
  • 明确一点,我只是想读取高度,我不想修改它。
  • 但如果您没有设置 EnforceConstraints = false,请根据您的查询;你看不懂
【解决方案2】:

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

EplayerListTableAdapter.EnforceConstraints = false;

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

【讨论】:

    【解决方案3】:

    在努力让查询正常工作后,我发现我可以使用以下语法更直接地访问该值:

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

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

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

    感谢您的帮助!

    【讨论】:

    • 真的很好!恭喜您以更简单的方式解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多