我在SQL Server数据库的数据表中有一个identity
(自动增量整数)列。
当我启动程序并向该表添加新记录时,标识列始终等于-1。对于下一个记录,它变为-2,依此类推。我用这种方式添加新记录:
http://msdn.microsoft.com/en-us/library/5ycd1034.aspx
然而,当我重新启动程序时,所有标识值都会重新排序(变为1,2,...)。
为什么会这样?如果我可以删除这些记录而不重新启动就没有问题。我使用SQL Server 2008.
还有什么方法可以通过GUI界面为列数据类型指定MAX
大小(在visual studio 2012服务器资源管理器中添加表时)?
答案 0 :(得分:2)
为什么他们是消极的我不知道。但是,当您重新加载应用程序时,这些记录已存在于数据库中,并具有在提交到数据库时分配的ID;这就是为什么他们在重启时有真正的价值。
但是,您不需要从DataTable
删除记录,只需在将其提交到数据库后刷新该行。有很多方法可以做到这一点,并且在很大程度上取决于您现在如何访问数据,但是您可以使用SELECT SCOPE_IDENTITY()
命令执行INSERT
命令,然后执行使用ExecuteScalar
提交行,如下所示:
var insertCmd = "INSERT INTO tbl (fld1, fld2) VALUES (@fld1, @fld2); SELECT SCOPE_IDENTITY()";
using (var c = new SqlConnection(connString))
using (var cmd = new SqlCommand(insertCmd, c))
{
cmd.AddParameterWithValue("@fld1", fld1Value);
cmd.AddParameterWithValue("@fld2", fld2Value);
var result = cmd.ExecuteScalar();
int id;
if (int.TryParse(result, out id))
{
// update the DataTable row here
dataTable.Rows[index]["id_column"] = id;
dataTable.AcceptChanges();
}
}
您甚至可以选择在执行更新后重新加载整个DataTable
。