我有一个包含多个表的SQL Server数据库。其中一个有“ID”(主键),“名称”和其他列,为简单起见,我在此不再提及。 “ID”列是自动增量,唯一的,当我使用“SQL Server管理工作室”添加一些行时,“ID”列正确递增。数据库已旧,当前自动增量为1244左右。
现在,我创建了一个C#项目,它使用TYPED数据集来处理来自数据库的数据。我的数据库开始为空,数据集是使用表适配器填充的,使用我的程序添加了新行但是有一个问题我到目前为止从未偶然发现:当我的程序向Dataset添加新行,然后更新数据库(使用表适配器), 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;
}
}
答案 0 :(得分:2)
我的原始评论有点不正确,我假设您正在从数据库中检索值,而且数据集中的值不正确。
ADO.NET处理防止与其断开连接的数据集冲突的方式,它分配负IDENTITY列值,因为它不知道可能的正数,因为它已断开连接而不是冲突。这些(负)值在该交易方面是唯一的。
当您尝试提交更改时,ADO.NET引擎会确定正确的SQL以生成正确的结果。