2011-06-14 31 views
0

需要建议什么是最好的方法来让自动递增的ID在多个表单上相同。通过多种形式传递自动递增的ID

基本上我使用VB.Net与SQL Server作为后端。我写了几个存储过程来插入数据,然后我调用前端的存储过程。我有3个表单,一旦提交了第一个表单,它就生成一个autoID,然后将用户转到第二个表单。

在第二种形式中,我有一个单独的插入存储过程是否有一种方法来获取第一个窗体生成的id并使其一致。或者我应该在提交表单后将其存储在一个变量中,然后以第二种形式进行调用。

我阅读了关于@@Identity,但只抓取该会话中的id,因为我提交的第一个表格数据,然后去第二个会不会是一个不同的会话。

感谢

+1

为此目的不要使用@@标识,这是不可靠的。请改用scope_identity()或output子句。 – HLGEM 2011-06-14 14:59:13

回答

0

你的存储过程可以返回的标识值(使用输出条款或SCOPE_IDENTITY()来得到它),为你存储在你的应用程序中的变量输出变量,那么这将是可以使用。当人移动到不同的记录时,并且在所有相关的formas插入记录后,您都会希望确保清空该变量,以便您不会在其他时间无意中使用它。

您不希望永远使用@@ identity,因为它不可靠,并且可能会产生大量的数据完整性问题,因为如果有人添加一个触发器插入到具有标识的另一个表中,它会给您错误的值。

+0

我试图做的是将这行代码添加到我的存储过程SELECT id从mytable id = @id但是然后我无法弄清楚如何让它在前端工作,因为没有id参数传递它。你是说我应该添加id = @@ scope_identity()到存储过程,它会知道从mytable中获取它 – Tim 2011-06-14 15:28:15

0

,这是导致您的问题可能是一个指示,这是不是做到这一点的最好办法的事实。也许相反,使用DB上的函数返回ID,然后将其设置在.NET代码中?

如果您有一个自动递增的ID,那么它应该只在创建记录时递增。你的三个表格是否创建三条记录?那是你要的吗?如果是这样,那么一个自动ID肯定不是正确的路要走。

+0

我有3个不同的表格。第一种形式提交给一个生成自动识别的表格。第二个表单提交到第二个表格是我想要在第一个表格中生成的自动识别号码,并将其添加到第二个表格中。但第二种形式是一种全新的形式抱歉,如果我没有解释清楚 – Tim 2011-06-14 14:56:19

0

我想也许你在想这个?

我读到了@@身份,但只有抓住该会话中的ID,因为我提交第一形式的数据然后转到第二那不是一个不同的会话。

难道你不想让在第一个表单上生成的条目生成密钥吗?

在第二种形式中我有存储过程的一个单独的插入是有办法抢第一形式产生 id和为它是一致的。或者我应该在提交表单后将其存储在一个变量中,然后以第二种形式进行调用。

+0

你可能是正确的我仍然在学习VB,我发现自己在思考更多的东西,因为我还没有完全掌握我到底做了什么,但是我正在阅读并试图理解我在做什么,所以我可以成为一个更好的编程。只是我越读有时我读的东西让我更困惑 – Tim 2011-06-14 17:15:43

+0

我确实想获得由第一个窗体生成的关键字,除非我把我的存储过程@id = scope_identity()我不知道如何在vb中通过将其生成为第二种形式。我正在阅读有关全局变量的正确方法吗?当用户点击提交按钮时,创建一个全局变量并将其传递给第二个窗体 – Tim 2011-06-14 17:18:03

+0

对不起,不太了解VB来回答这个问题。在C#中有用于执行存储过程的meathods,它返回一个数据表。在你存储proc后,插入说选择@@身份。然后在C#中你会有类似result.rows [0] [0]的东西。 – TizzyFoe 2011-06-14 17:32:23