PowerBuilder:插入Sql Server表后获取标识值

时间:2011-11-10 15:54:01

标签: sql-server powerbuilder

我正在使用PowerBuilder 12 Classic DataWindow将新记录插入到具有标识列的SQL Server 2008数据库表中。在插入之后,我想获取标识列的值以供在其他表中使用。

在[MS_SQLSERVER_SYNTAX]下的pbodb120.ini中,我已将GetIndentity行更改为:

GetIdentity='Select IDENT_CURRENT (''&TableName'')'

我的代码看起来像这样(docid是标识列):

dw_document_add.update(true, true)

li_docid = dw_document_add.getitemnumber(dw_document_add.getrow(), "docid")

麻烦的是,似乎只有一半的时间才能恢复身份。我认为这可能是一个时间问题。 (记录将被插入到数据库中。)

我有什么方法可以确保每次都获得身份吗?

更新

我已将Identity ='@@ IDENTITY'添加到我的连接字符串中,它现在似乎正在运行。但我不确定是否需要在pbodbxxx.ini文件中。

3 个答案:

答案 0 :(得分:4)

最好的建议是不要试图重新发明轮子; DataWindow已经这样做了。在DataWindow画家中,进入Rows / Update Properties,在底部你会看到Identity Column。选择您的标识列(它必须已在您的SQL语句中),并且PB将在INSERT之后检索标识值。

祝你好运,

特里。

答案 1 :(得分:1)

我也不相信GetRow()调用。

应该已经为你插入的dw行的局部变量中的行号,否则你不会有一个适当的参数用于所有SetItem()调用肯定在Update()调用。

答案 2 :(得分:0)

我正在使用PB 11.5和MSSQL 2005.

我使用SQL SNC驱动程序连接。我总是将identity=SCOPE_IDENTITY()添加到我的连接字符串中。

如果您使用@@identity,如果您的应用程序是多用户,则可能会遇到麻烦。此外,如果可能,我建议您使用存储过程数据窗口更新。我将我的标识列标记为OUTPUT参数。在存储过程中,我在SELECT @id_column = SCOPE_IDENTITY()子句后调用INSERT。我从来没有遇到过麻烦。