【问题标题】:Dataset autoincrement issue数据集自增问题
【发布时间】:2012-03-11 21:21:13
【问题描述】:

我有一个包含多个表的 SQL Server 数据库。其中之一具有“ID”(主键)、“名称”和其他列,为简单起见,我不会在此提及。 “ID”列是自动递增的,唯一的,当我使用“SQL Server management studio”添加一些行时,“ID”列会正确递增。数据库很旧,当前的自动增量为 1244 左右。

现在,我创建了一个 C# 项目,它使用 TYPED 数据集来处理数据库中的数据。我的数据库开始为空,使用表适配器填充数据集,使用我的程序添加新行,但到目前为止我从未偶然发现一个问题:当我的程序向数据集添加新行时,然后更新数据库(使用表适配器),“我的数据库中的“ID”列得到正确的自动递增数字(1245,1246 等),但我在数据集中的“ID”列得到“-1”、“-2”!有什么问题?如何告诉我的数据集使用数据库指定的自动增量种子,而不是生成它自己的 NEGATIVE (???) 主键号?

编辑: 我使用这个获取并比较行:

dsNames.tbNamesRow[] TMP = basedataset.tbNames.Select() as dsNames.tbNamesRow[];
foreach (dsNames.tbNamesRow row in TMP)
{
    string Name = row.Name;
    bool Found = Name == Search;
    if (CompareDelegate != null)
        Found = CompareDelegate(Name, Search);
    if (Found)
    {
        int ID = row.ID;
        break;
    }
}

【问题讨论】:

  • 您如何从数据库中检索值?我想你没有投射到正确的类型。

标签: c# database dataset


【解决方案1】:

我最初的评论有点不正确,我认为您正在从数据库中检索值,而那个数据集的值不正确。

ADO.NET 处理与其断开连接的数据集发生冲突的方式,它分配负的 IDENTITY 列值,因为它不知道一个可能的正数,它在断开连接时不是冲突。这些(负)值在该交易中是唯一的。

当您尝试提交更改时,ADO.NET 引擎会确定正确的 SQL 以产​​生正确的结果。

【讨论】:

  • 所以,为了从数据库中获取正确的身份号码,我必须在任何更新后重新填充我的数据集?
  • 或许,您可以只“提交”、“保存”或任何术语。试试看,如果是这样的话,我很感兴趣。
  • 根据msdn.microsoft.com/en-us/library/ceab2k93(v=vs.80).aspx,当我使用表适配器更新我的数据库时会自动调用“AcceptChanges”(提交)(我在任何添加的行之后执行的操作)...
  • 查看msdn.microsoft.com/en-us/library/ms971502.aspx,特别是“检索新身份值”
  • 谢谢!阅读链接上的文本后,我意识到我正在使用不支持“刷新数据表”行为的 OldDB 连接!我已将数据集中的连接更改为“SqlServer 数据提供者”,现在数据表正在自动更新!
猜你喜欢
  • 2012-10-27
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多