【请教】PB开发web service中连接mySQL数据库的问题

nocry115 2019-12-27 12:27:53
环境:
pb11.5+WIN2008Server R2(64位)
在系统ODBC建立了mySQL数据源apporder

传统模式做了个测试窗口应用:
//已申明全局变量
//transaction SQLAPP
// Profile appoder
SQLAPP = create transaction
SQLAPP.DBMS = "ODBC"
SQLAPP.AutoCommit = False
SQLAPP.DBParm = "ConnectString='DSN=appoder;UID=root;PWD=pwd123@;charset=gbk',DelimitIdentifier='No'"

connect using SQLAPP;
string ls_msg
IF SQLAPP.SQLCode <> 0 THEN
ls_msg = 'APP数据库连接失败!' + SQLAPP.SQLerrText
messagebox('',ls_msg)
return
end if

open(w_test)
//测试窗口中以appoder数据源做了数据窗口d_test
//检索按钮代码:
dw_1.settransobject(SQLAPP)
dw_1.retrieve()

//====以上执行成功!可即时看到mySQL中的数据内容

但是,在webservice中用同样的代码连接,还未走到datastore的retrieve步骤,

调用webservice时就在
connect using SQLAPP;
这一步骤出错,SQLAPP.SQLerrText显示Mysql IM002错误!

==========

webservice的方法中,前面SQLCA连接的oracle数据库代码执行完全没有问题,
不用webservice时连接Mysql并操作也没有问题,

就是在webservice连接Mysql,调用就出问题!晕……请教一下达人,怎么解决啊?
...全文
209 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nocry115 2020-01-02
  • 打赏
  • 举报
回复
不好意思,结贴时点错了啊……
WMERP 2020-01-01
  • 打赏
  • 举报
回复
ODBC模式
//1 手工建好指定ODBC
long ll_count
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=wmsvr;UID=dba;PWD=123'"
connect using sqlca;

//2 使用注册好的驱动源"sqlanywherews"

gs_dsn="sqlanywherews"

gs_csqlcon="DRIVER="+gs_dsn+";servername=server;UID=dba;PWD=123;AutoStop=NO;CommLinks=TCPIP{}"
sqlca.DBMS = "ODBC"
sqlca.AutoCommit = False
sqlca.DBParm = "ConnectString=' "+gs_csqlcon+"'"+",ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMPT' "
connect using sqlca;

OLEDB //'wmsvr 也是ODBC建立好的DSN

SQLCA.DBMS = "OLE DB"
SQLCA.LogPass ="123"
SQLCA.LogId = "dba"
SQLCA.AutoCommit = False
SQLCA.DBParm = "PROVIDER='MSDASQL',DATASOURCE='wmsvr'"
connect using sqlca;



SQLCA.DBMS = "ADO.Net"
SQLCA.LogPass ="123"
SQLCA.LogId = "dba"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Namespace='System.Data.Odbc',DataSource='wmsvr'"

connect using sqlca;

上面都可以在WEBSERVICE中使用
nocry115 2020-01-01
  • 打赏
  • 举报
回复
同样代码通宵中……不正常工作的朋友新年愉快!
谢谢分享,待会回去小睡会,再来研究……
引用 6 楼 WMERP 的回复:
可以支持很多种方式的,ADO.NET OLEDB 等等都可以WEBSERVIce使用的,可能是你的.NET环境设置有问题吧,特别是要打开32位应用程序
WMERP 2019-12-31
  • 打赏
  • 举报
回复
可以支持很多种方式的,ADO.NET OLEDB 等等都可以WEBSERVIce使用的,可能是你的.NET环境设置有问题吧,特别是要打开32位应用程序
WMERP 2019-12-31
  • 打赏
  • 举报
回复
我之前碰到过这个情况,就是权限问题,另外可能跟32位或者64位ODBC有关系,将.net的程序池的32位应用设置为TRUE
nocry115 2019-12-30
  • 打赏
  • 举报
回复
引用 2 楼 WMERP 的回复:
另外,你存放ODBC的mysql驱动的DLL文件必须要有访问权限,否则错误,最简单的方法就是找到驱动所在的目录,加入EVERYone的完全权限

做了demo窗口,分别用ODBC和JDBC连接Mysql都没问题!
但是就是开发webservice,到connect using SQLAPP;就出问题
//
ODBC错误提示: SQLSTATE = IM002 [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
//
JDBC错误提示:DBMS is not supported in your current installation.
//
感觉是环境的问题,照你说的赋权了,不行……
将mysql下的文件copy到webform的bin下,不行……
设置了系统环境变量,不行……
重启了应用服务器,不行……
nocry115 2019-12-30
  • 打赏
  • 举报
回复
引用 1 楼 WMERP 的回复:
webservice中每次执行API都要重新连接和断开一次,也就是写两个函数 gf_connect()和gf_disconnect() ,每次调用接口函数时开头和结尾必须的

不是这个问题,开发webservice后我一直是这样做的……
问题出在connect 这个步骤啊
WMERP 2019-12-29
  • 打赏
  • 举报
回复
另外,你存放ODBC的mysql驱动的DLL文件必须要有访问权限,否则错误,最简单的方法就是找到驱动所在的目录,加入EVERYone的完全权限
WMERP 2019-12-29
  • 打赏
  • 举报
回复
webservice中每次执行API都要重新连接和断开一次,也就是写两个函数 gf_connect()和gf_disconnect() ,每次调用接口函数时开头和结尾必须的

662

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder Web 应用
社区管理员
  • Web 应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧