使用.NET连接到AS400

mad*_*nic 38 .net c# sql asp.net ibm-midrange

我正在尝试使用SQL构建一个.NET Web应用程序来查询AS400数据库.这是我第一次遇到AS400.

我需要在我的机器(或AS400服务器)上安装什么才能连接?(IBM iSeries Access for Windows ??)

连接字符串的组成部分是什么?

在哪里可以找到使用SQL命令构建数据访问层的示例代码?

谢谢.

dcp*_*dcp 28

您需要AS400 .Net数据提供程序.点击此处:https: //www-01-01.ibm.com/support/docview.wss?uid = isg3T1027163

有关连接字符串示例,请访问:https: //www.connectionstrings.com/as-400/

另外,请查看红皮书以获取代码示例并开始使用. http://www.redbooks.ibm.com/redbooks/pdfs/sg246440.pdf

  • @madantanic - 没问题.我想你必须从IBM获得这个软件.自从我在AS/400上工作已经很长时间了(当时我正在使用JAVA访问它),但是如果我没记错的话,在我们的商店,我们不得不联系IBM的支持代表,他们给我们发了CD它.我将从您的AS/400系统管理员开始,告诉他们您需要什么.不幸的是,我不认为这些东西是免费下载的. (3认同)

LCJ*_*LCJ 10

以下是我为解决问题所做的工作.

装了IBM i Access for Windows.不是免费的

在项目中引用了以下dll

  • IBM.Data.DB2.iSeries.dll
  • Interop.cwbx.dll(如果使用了数据队列)
  • Interop.AD400.dll(如果使用了数据队列)

数据访问

  using (iDB2Command command = new iDB2Command())
        {
            command.Connection = (iDB2Connection)_connection;
            command.CommandType = CommandType.Text;
            command.Parameters.AddWithValue(Constants.ParamInterfaceTransactionNo, 1);
            command.CommandText = dynamicInsertString;
            command.ExecuteScalar();
        }
Run Code Online (Sandbox Code Playgroud)

连接字符串

<add name="InterfaceConnection" 
connectionString="Data Source=myserver.mycompany.com;User ID=idbname;Password=mypassxxx;
Default Collection=ASIPTA;Naming=System"/>
Run Code Online (Sandbox Code Playgroud)

UPDATE

IBM不打算在Windows 8.1以外的操作系统上支持IBM i Access for Windows.替代产品是IBM i Access Client Solutions

IBM i Access Client解决方案


小智 5

如其他答案中所述,如果您已经安装了IBM i Access客户端,那么可以使用IBM.Data.DB2.iSeries软件包。

如果您没有IBM i Access软件,则可以利用JTOpen并使用Java驱动程序。您将需要nuget软件包JT400.78,它将插入IKVM运行时。

就我而言,我需要查询AS400上的DB2数据库并输出一个DataTable。我发现了一些提示和少量代码片段,但是没有什么全面的内容,因此我想分享一下我能够建立的内容,以防它对其他人有帮助:

using com.ibm.as400.access;
using java.sql;

var sql = "SELECT * FROM FOO WITH UR";

DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
Connection conn = DriverManager.getConnection(
    "jdbc:as400:" + ServerName + ";prompt=false", UserName, Password);

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int ct = md.getColumnCount();

DataTable dt = new DataTable();
for(int i=1; i<=ct; i++)
    dt.Columns.Add(md.getColumnName(i));

while (rs.next())
{
    var dr = dt.NewRow();
    for (int i = 1; i <= ct; i++)
        dr[i - 1] = rs.getObject(i);
    dt.Rows.Add(dr);
}
rs.close();
Run Code Online (Sandbox Code Playgroud)

从RecordSet到DataTable的转换有些笨拙,给我回想起VBScript时代的糟糕回忆。性能可能并不会很快使人眼花,乱,但它确实有效。