我对AS400 DB2没有任何经验,所以请原谅我正在学习的任何明显错误。我有2个盒子可以连接到 v5r3 或 v4r3。,我正在使用 NHibernate 3 。但是,当我尝试连接时,我会遇到以下异常: -
ERROR [08001] [IBM] SQL30081N A communication error has been detected.
Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS".
Location where the error was detected: "192.168.1.11". Communication function detecting the error: "connect". Protocol specific error code(s): "10061", "*", "*". SQLSTATE=08001
以下是我的NHibernate配置文件: -
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.DB2400Dialect</property>
<property name="connection.driver_class">NHibernate.Driver.DB2Driver</property>
<property name="connection.connection_string">Server=192.168.1.11;Database=TESTDB;UID=XXX;PWD=XXX; </property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name="command_timeout">15000</property>
<property name="current_session_context_class">thread_static</property>
</session-factory>
</hibernate-configuration>
我不确定这是不是因为AS400的版本太早了?我的nhibernate配置不正确?或者我在AS400上设置了错误的东西。
任何建议都会受到最高的赞赏。
非常感谢提前
答案 0 :(得分:5)
IBM i上有两种类型的数据库连接 - DRDA 和 DDM 。 DRDA 用于本机连接(DB2.Net.iSeries), DDM 用于DB / 2 LUW(DB2.Net,DB / 2 Connect)连接。
验证数据库主机服务器是否正在运行:
WRKACTJOB SBS(QSERVER) JOB(QZDASRVSD)
检查端口状态:
NETSTAT OPTION(*CNN)
,点击 F2 并验证端口449,8470,8471和8476处于状态收听。
使用以下命令启动数据库主机服务器:
STRHOSTSVR SERVER(*DATABASE)
验证ddm tcp服务器是否正在运行:
WRKACTJOB SBS(QSYSWRK) JOB(QRWTLSTN)
检查端口状态:
NETSTAT * CNN,点击 F2 并验证端口446是否处于收听状态。
使用以下命令启动ddm tcp服务器:
STRTCPSVR SERVER(*DDM)
在连接字符串中包含ddm端口号:
Server=192.168.1.11:446;Database=TESTDB;UID=XXX;PWD=XXX;
此IBM红皮书应提供更多信息:
Integrating DB2 Universal Database for iSeries with Microsoft ADO .NET
答案 1 :(得分:2)
真正的潜在错误是这一个:
TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它
所以显然终点是没有收听,或者有一些防火墙阻止你,或者你误认了地址。如果要在as / 400中配置某些内容以使该TCP地址能够侦听连接,则可能未正确启用。