Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据集自动增量问题_C#_Database_Dataset - Fatal编程技术网

C# 数据集自动增量问题

C# 数据集自动增量问题,c#,database,dataset,C#,Database,Dataset,我有一个SQL Server数据库和几个表。其中一个有“ID”(主键)、“Name”和其他列,为了简单起见,我在这里不提这些列。“ID”列是自动递增的、唯一的,当我使用“SQLServerManagementStudio”添加一些行时,“ID”列会正确递增。数据库是旧的,当前自动增量为1244左右 现在,我创建了一个C#项目,它使用类型化数据集处理数据库中的数据。我的数据库是空的,数据集是用表适配器填充的,新行是用我的程序添加的,但到目前为止我从未遇到过一个问题:当我的程序向数据集添加新行,然后

我有一个SQL Server数据库和几个表。其中一个有“ID”(主键)、“Name”和其他列,为了简单起见,我在这里不提这些列。“ID”列是自动递增的、唯一的,当我使用“SQLServerManagementStudio”添加一些行时,“ID”列会正确递增。数据库是旧的,当前自动增量为1244左右

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

编辑: 我使用以下方法获取并比较行:

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;
    }
}

我最初的评论有点不正确,我假设您正在从数据库检索值,并且数据集中的值不正确

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


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

如何从数据库中检索值?我想您没有转换到正确的类型。因此,在任何更新之后,我必须重新填充数据集,以便从数据库中获得正确的标识号?可能,您可能只需要“提交”或“保存”或其他术语。试一试,如果是这样的话,我很感兴趣。根据这一点,当我使用表适配器更新数据库时,会自动调用“AcceptChanges”(提交)(我在添加任何行后都会执行此操作)…请签出,特别是“检索新的标识值”,谢谢!在阅读了链接上的文本后,我意识到我使用的是OldDB连接,它不支持“刷新数据表”行为!我已将数据集中的连接更改为“SqlServer数据提供程序”,现在数据表正在自动更新!