如何在使用Iseries ODBC时定义调用程序?
问题描述:
有没有办法使用的iSeries ODBC驱动程序时确定调用“程序名”?当我使用Iseries Access ODBC驱动程序针对AS400运行命令时,as400调用堆栈中的调用程序显示程序名称为空白。我想定义一个,因为我们有一个触发器,需要知道谁是调用者。如何在使用Iseries ODBC时定义调用程序?
答
的ODBC连接是通过QZDASOINIT
工作代理。我不相信有一种方法可以确定触发触发器的特定连接(或程序)。
答
由于JamesA指出,所有的ODBC请求经过QZDASOINIT
工作,所以你不能改变调用堆栈,以确定呼叫者。
为了解决这个问题,DB2为我包括由ODBC驱动程序(它如果你愿意,你可以忽略),然后你的触发器可以使用自动设置客户端特殊寄存器。欲了解更多信息,请参阅:http://ibmsystemsmag.blogs.com/i_can/2009/10/i-can-use-client-special-registers.html
答
这是可能的一段时间,只有从6.1暴露。举一个例子使用,请在我的Nav这一说法“运行SQL脚本...”:
select CURRENT CLIENT_APPLNAME, CURRENT CLIENT_PROGRAMID, CURRENT CLIENT_WRKSTNNAME from sysibm.sysdummy1
支持适用于使用JDBC,OLE DB,CLI或.NET数据提供程序开发。它们也可以通过调用特殊的存储过程来设置。
使用IBMDASQL例如,连接字符串可能包括:
conn.Open "Provider=IBMDASQL; Data Source=MyAS400;" & _
"Client User ID=MYWINUSRID; Client WorkStation Name=MYWINPC; " & _
"Client Program ID=somepc.exe; Application Name=Sample for Audit"
SQL Reference中讨论了新的 “特殊寄存器”。
要添加到詹姆斯的回答,任何时候有一个服务器/客户端界面,这是故意的,每一方没有其他的知识进行操作。想象一下在Windows上运行的Java程序。它可能是com.mycompany.orderEntry.inventory.GetQuantity;它使用ODBC/JDBC来访问DB2 for i。 IBM i如何调用堆栈知道启动更新的Java程序的确切名称? ODBC驱动程序不会将启动程序的名称传递给服务器。 – 2012-02-15 18:11:05
另一个想法。根据您如何设置连接,如果您为每个应用程序使用不同的通用用户,则可以通过使用'WRKACTJOB'上的选项2来查看登录用户的内容。 – 2012-02-15 18:15:55