使用C#从NHibernate连接到AS400(iSeries)时出现错误RROR [08] [IBM] SQL30081N

时间:2012-07-05 15:32:37

标签: c# database nhibernate ibm-midrange

我对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上设置了错误的东西。

任何建议都会受到最高的赞赏。

非常感谢提前

2 个答案:

答案 0 :(得分:5)

IBM i上有两种类型的数据库连接 - DRDA DDM DRDA 用于本机连接(DB2.Net.iSeries), DDM 用于DB / 2 LUW(DB2.Net,DB / 2 Connect)连接。

DRDA

验证数据库主机服务器是否正在运行:

WRKACTJOB SBS(QSERVER) JOB(QZDASRVSD)

检查端口状态:

NETSTAT OPTION(*CNN),点击 F2 并验证端口449,8470,8471和8476处于状态收听

使用以下命令启动数据库主机服务器:

STRHOSTSVR SERVER(*DATABASE)

DDM

验证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地址能够侦听连接,则可能未正确启用。