【发布时间】:2012-07-13 05:17:04
【问题描述】:
我正在用 c#.and 使用 sql 数据库创建一个 winform 应用程序。
我有一张表employee_master,其中有Id, name, address 和phone no 之类的列。 Id 是自动递增的,所有其他数据类型都是 varchar。
我正在使用此代码来获取下一个自动增量值:
string s = "select max(id) as Id from Employee_Master";
SqlCommand cmd = new SqlCommand(s, obj.con);
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
int i = Convert.ToInt16(dr["Id"].ToString());
txtId.Text = (i + 1).ToString();
我正在一个文本框上显示。
但是当表中的最后一行被删除时,我仍然得到最近在文本框中删除的值
我应该如何获得下一个自增值?
【问题讨论】:
-
为什么要这样做?您无法在多用户环境中向用户显示下一个 ID,因为任何人都可以获取它...
-
什么样的SQL数据库?品种很多
-
没有可靠的方法来确定 SQL Server 中自动增量 (
IDENTITY) 列的下一个值。 直到INSERT实际发生后,该值才得到保证。 -
为什么在你决定插入之前需要这个值?你打算用它做什么,为什么?你为什么要向用户展示它?最终用户不应该知道或关心分配了哪些身份值。我真的必须提醒您不要接受您已接受的 IDENT_CURRENT“解决方案”,并鼓励您使用多个并发用户和回滚进行测试。
-
@agleno 我认为这有助于提出手头的实际问题,防止浪费时间解决甚至可能不存在的问题(有助于澄清)。
标签: c# sql sql-server winforms sql-server-2000