sql-server-ce - 使用类型化 DataSet 和 DataGridView 的最后插入记录 ID 问题

标签 sql-server-ce strongly-typed-dataset tableadapter lastinsertid

我正在为一个简单的数据库应用程序使用以下内容:

  • SQL Server Compact Edition .sdf 文件作为数据库,具有 int 主键 ID。
  • 类型化 DataSet 和 BindingSource 作为数据访问层
  • DataGridView 用于显示数据。

  • 我的问题是,最后插入的记录/行 ID 有问题。当我使用导航器组件的追加按钮向 datagridview 添加一行时,新记录/行的 ID 为-1。即使使用 TableAdapter.Update() 将数据保存到数据库后,它仍然是 -1。我知道我可以使用带有 @@identity 或 scope_identity() 的单独查询来获取最后一个 ID,但是您只需要手动使用另一个查询来更新您的数据听起来并不正确。我在这里错过了什么吗?在保存到数据库并获取刚刚插入的记录的 ID 后,是否有自动更新数据的方法?

    另外,我在数据集设计器->表适配器配置->高级窗口中看到了“刷新数据表”选项,但由于某种原因它被禁用了。但是不知道有没有关系。。

    我会很感激这方面的任何帮助..

    最佳答案

    感谢您的两个答案。我找到了问题的根源,不幸的是没有我喜欢的解决方案。问题出在 SQL Server Compact Edition 中。由于它不支持存储过程或多事件结果集 (MARS),因此您不能在一个查询中运行多个 SQL。因此“刷新数据表”选项被禁用,如果它没有被禁用,它将用实际值更新 ID 值。我要将我的主键 ID 值从 int 更改为 Guid 并处理 DataGridView 的 RowInit 事件并手动为新行提供 Guid ID。

    关于sql-server-ce - 使用类型化 DataSet 和 DataGridView 的最后插入记录 ID 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/405189/

    相关文章:

    visual-studio-2010 - SQL Compact 4.0无法打开/读取sdf文件

    winforms - 我们如何解决所有这些 "Conversion from type DBNull to type String is not valid"的问题?

    c# - 类型化数据集可为空的日期值有问题

    c# - 从 TableAdapter 获取@@IDENTITY

    sql - 在 SQL 中转换日期

    SQL Server Compact Edition - 获取创建脚本

    .net - 数据库结构略有不同的多客户项目的架构设计(针对每个客户)

    c# - 如何根据两个表过滤 TableAdapter 的 FillBy?

    c# - 如何在 C# 中将 Npgsql 与 TableAdapter 一起使用