身份值不由SQL Server 2014返回

时间:2016-11-14 05:11:25

标签: oledb sql-server-2014 powerbuilder

我们有一个PowerBuilder客户端应用程序(PB 12.5),它已经在过去的6年中投入使用,并且在SQL MSDE和MS-SQL Server 2012上运行良好。

最近,我们已将一些安装(大约40个)升级到SQL Server 2014.在大约一半的安装中,我们看到一个问题,即Identity列返回到DataWindow调用update方法后。以下是有问题的代码:

If lds_Update.Update( ) < 1 then
   lb_Error = True
   ls_Temp = "The inspection header could not be created."
Else
   ll_InspID = lds_Update.GetItemNumber(1, "Insp_ID")
   If (ll_InspID <= 0) or Isnull(ll_InspID) then 
       lb_Error = True  // This is being hit as ll_InspID is null
       ls_Temp = "Could not retrieve the inspection identity."
   End If
End If

DataWindow具有Identity列和主键的正确设置。

enter image description here

在所有安装中都没有发生这种情况,只有一些安装。所有安装都完全相同。 PB应用程序安装在服务器上,并从瘦客户端启动。

连接字符串如下:

SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='ServerName',PROVIDERSTRING='Database=DBName',Identity='SCOPE_IDENTITY()'"

我们已尝试过多个测试安装和SQL Server 2014 Express,但它运行正常。只有在某些装置上才会失败,我们不知道为什么。我们也尝试过更改为Identity='@@IDENTITY',但没有效果。

有没有人有任何想法?

2 个答案:

答案 0 :(得分:1)

您可以通过更改用于检索身份值的查询 pbodbxxx.ini文件(其中xxx是您正在使用的PB版本 - 120英寸 这种情况对于PB12)。尽管文件的命名约定,Sybase也有 选择根据其中的某些设置进行OLE DB连接 文件。在这种特殊情况下,更改以下行 [MS_SQLSERVER_SYNTAX]部分

这 GetIdentity ='选择@@ identity'

要 GetIdentity ='SELECT SCOPE_IDENTITY()'

如果选择此路径,则需要使用您的路径分发INI文件 应用。请注意,这适用于PB11 - 我认为它仍然适用于 PB12。

有趣的文章: https://blogs.sap.com/2012/10/25/using-autoincrementing-columns-from-a-powerbuilder-datawindow/

答案 1 :(得分:0)

我正在使用SQL Native驱动程序。这是我的事务对象的DBparms部分的一部分:

 "Provider='SQLNCLI10', Identity='SCOPE_IDENTITY()'

这适合我。