【发布时间】:2016-03-21 09:09:09
【问题描述】:
我有一个DataTable BonLivraison,其主键是一个格式为2016/ + 递增数字的字符串。我用这段代码生成了这个主键:
SqlCommand cmdRow = new SqlCommand("select TOP(1) CodeBonLivraison from BonLivraison ORDER BY 1 DESC", con);
string LastCode = (string)cmdRow.ExecuteScalar();
string getID = LastCode.Split('/')[1];
int getIntID = Convert.ToInt32(getID);
numeroBonReceptionTextBox1.Text = DateTime.Now.Year.ToString() + "/" + (getIntID + 1).ToString();
此代码通常会生成主键2016/1...2016/2....直到2016/10 它重新生成2016/10,这是主键违规。
那么如何修改此代码以获取最后插入的密钥并获取 2016/11...2016/12...
【问题讨论】:
-
我猜,在
"2016/10"之后,您还没有更新CodeBonLivraison列中的这个值。只需再次检查您的代码。 -
不,我使用此代码生成 Id,并且在 2016/10 之后,SqlCommand 始终返回 2016/9 并添加 1,因此我们始终得到 2016/10
-
你调试了吗?
-
显然他没有。 Stackoverflow 可以替代您自己的工作。
-
因为该列是字符串。在 2016/9 之后,您插入了 2016/10。但随后的 SELECT TOP 1 .. 。 ORDER BY CodeBonLivraison DESC 仍会为您提供 2016/9。添加 1 并尝试 INSERT 会给你 pk 违规
标签: c# sql-server last-insert-id