使用 %SQLGatewayConnection遇到一个奇怪的问题
我用%SQLGatewayConnection把别人给我的数据转为sql 写入mysql的时候,如果数据里面有 ascii 码为57659 这样的数据的时候,
ClassMethod Execute(sql, conn, Output msg) As %Status
{
s $zt="Err"
s msg=""
k hstmt
set sc=conn.AllocateStatement(.hstmt)
set sc=conn.PrepareW(hstmt,sql)
if $$$ISERR(sc) quit sc
//Execute statement
set sc=conn.Execute(hstmt)
if $$$ISERR(sc)
{
k err
Set xsc=conn.GetErrorList(hstmt,.err)
set sc=conn.DropStatement(hstmt)
;Zwrite err
Quit err
}
set sc=conn.DropStatement(hstmt)
q $$$OK
Err
;w $ze,!
q $ze
}
ObjectScriptObjectScript
这个方法就会一直卡在 set sc=conn.PrepareW(hstmt,sql) 这一行,这时候,sql是一个insert 语句,也不报错,就是一直卡着。有没有什么办法能解决?57659 只是一个例子,还有其他的,比如57634 也不行
产品版本: Ensemble 2016.1
$ZV: %SQLGatewayConnection
建议在Unix上使用JDBCGateway,因为目前只有iODBC支持Unicode
下面是示例代码使用JDBCGateway
#dim %JDBCGateway As %Net.Remote.Java.JDBCGateway set conn = $system.SQLGateway.GetJDBCConnection("TestConn") if (conn = "") quit 0 set cmd = "select c1,c2,c3 from wrc943403 where c1 = ?" set st = %JDBCGateway.prepareStatement(conn, cmd) do %JDBCGateway.setString(st,1,9) // assign c1 to 9 set res = %JDBCGateway.execQuery(st) if (res) { set error = %JDBCGateway.getErrorText() write "error = ",error,! quit } while %JDBCGateway.next(st) { set c1 = %JDBCGateway.getString(st,1) set c2 = %JDBCGateway.getString(st,2) write "c1=",c1,! write "c2=",c2,! } write $system.SQLGateway.DropConnection("TestConn") quit