在插入数据库之前获取标识属性值

时间:2013-06-24 12:12:50

标签: c# .net database

我有一个表,它有一个属性设置为identity。我想获取在向数据库输入值后生成的identity属性的值。

我的EmpTable由EmpID和EmpName组成。 EmpID设置为Identity。我想在将新行插入数据库之前获取EmpID值。

2 个答案:

答案 0 :(得分:1)

我建议不要尝试使用设置为使用整数列作为主键的表来执行此操作。如果只是获取先前的ID并将其递增,则会遇到并发问题。相反,您应该使用GUID(SQL中的uniqueidentifier)作为主键。

这将允许您在代码中生成一个新的GUID,可以在以后安全地保存到数据库中。

http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx

http://msdn.microsoft.com/en-us/library/ms187942.aspx

答案 1 :(得分:1)

当然服务器知道自动递增计数在其序列中的位置,但是对于该信息几乎没有任何用处。想象一下,你去邮局,他们分发了编号的票,以便他们可以按顺序为客户服务。当然你可以问他们下一个他们会给出的号码是什么,但是因为任何人都可以随时走进你不知道你会得到那个号码。如果你不知道你会得到它,你就无法做任何事情 - 例如将其作为参考编号写在表格上将是一个错误。

根据您的目的,您的两个主要选项是:

  1. 使用客户端生成的guid作为您的标识符。这种搞砸的顺序因此类比不是很好,但想象一下,如果走进来的每个顾客都可以生成一个他们确定以前从未使用过的随机数。他们可以在拿号码之前用它来填写表格。

  2. 取一个数字,但在与其他操作的交易中进行。客户可以拿一个号码并用它来填写一些文书工作。如果他们意识到他们把钱留在了家里,他们就把所有东西扔掉,而你从不打电话给他们的号码。

  3. 为什么您认为您需要这些信息?您可以改用其中任何一种策略吗?