在使用数据存储/数据窗口时,如何在PowerBuilder中插入unicode字符串?

在使用数据存储/数据窗口时,如何在PowerBuilder中插入unicode字符串?,unicode,powerbuilder,Unicode,Powerbuilder,下面的SQL Insert语句用于插入unicode字符串,在SQL Server Management Studio或查询分析器中执行时,该语句可以成功工作 Column Specs: SONUM VARCHAR(50) CONTRACTNUM NVARCHAR(150) FNAME VARCHAR(70) INSERT INTO SCH_EDI_3B12RHDR ( SONUM, CONTRACTNUM, FNAME ) VALUES ( 'DPH1130916

下面的SQL Insert语句用于插入unicode字符串,在SQL Server Management Studio或查询分析器中执行时,该语句可以成功工作

 Column Specs:
 SONUM    VARCHAR(50)
 CONTRACTNUM NVARCHAR(150)
 FNAME     VARCHAR(70)

 INSERT INTO SCH_EDI_3B12RHDR ( SONUM, CONTRACTNUM, FNAME ) 
 VALUES ( 'DPH11309160073CC' , N'Globe MUX Project(客户合同号:NA)' , 'TEST' )
在使用数据存储/数据窗口进行插入操作时,是否可以实现前缀N?如果是,如何进行?以下是PB中的当前脚本,该脚本成功插入数据,但汉字被替换为“?”(问号)


您需要将自己挂接到dw/ds的sqlpreview事件上,并添加N'yourself。或者,如果使用静态(或禁用?)绑定,则根本不需要执行任何操作。
这些都在在线文档中解释过。

我验证了PB版本10的OLE DB驱动程序支持Unicode。您可以在中找到信息

ODBC/JDBC/OLEDB/ADO.NET数据库支持

客户端/服务器PowerBuilder 10应用程序可以与数据库交换Unicode和ANSI数据 由ODBC、JDBC、OleDB和ADO.NET数据库接口支持,无需 特殊设置

建议在使用string函数时尝试强制使用不同的编码,有四种选择(参见下面的代码示例)

编码参数是以下参数之一:

■ 编码ANSI

■ 编码UTF8

■ 编码f16le!–UTF-16小端编码(PowerBuilder 10默认)

■ 编码F16BE!–UTF-16大端编码

// use the correct encoding for your actual data
ls_sonum = String(dw_1.Object.shipmentOrderNum[1], EncodingUTF16BE! ) //holds DPH11309160073CC
ls_chinesechar = String(dw_1.Object.contractnum[1], EncodingANSI!) // holds Globe MUX Project(客户合同号:NA)

可能是我引导您走错了路,但我认为这是值得尝试的,可能会解决问题。

什么版本的PB?v10和更高版本应该在Unicode中本机工作,因此我认为,只要数据库中的接收列的数据类型正确,就无需做任何事情。还有,什么PB数据库驱动程序?我认为MSS从未被引入Unicode。@Terry,它的版本是10.2,DBMS驱动程序是OLE DB。您的连接字符串中是否有DisableBind=0?已知()允许Unicode,但可能有副作用。可惜你没有达到PB11,所以你可以选择SNC驱动程序。@Terry,感谢你提供的信息。到目前为止,连接参数中没有DisableBind=0,但我可以对此进行探讨。如果DisableBind=0,如果正在实施,是否有任何关于副作用或可能影响的文档?鉴于副作用只是传闻,我怀疑除了链接和搜索中可能出现的任何其他讨论之外,没有其他文档。链接到Sybase的旧新闻组档案;这是一个搜索的好地方。
// use the correct encoding for your actual data
ls_sonum = String(dw_1.Object.shipmentOrderNum[1], EncodingUTF16BE! ) //holds DPH11309160073CC
ls_chinesechar = String(dw_1.Object.contractnum[1], EncodingANSI!) // holds Globe MUX Project(客户合同号:NA)