我正在使用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文件中。
答案 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
。我从来没有遇到过麻烦。