【问题标题】:C# Error Selecting Table in OleDbCommand ...*LIBL not foundC# 在 OleDbCommand 中选择表时出错 ...*LIBL 未找到
【发布时间】:2016-03-15 15:10:54
【问题描述】:

我正在尝试连接到我们的 AS400 (ISeries) 上的 DB2 数据库。我可以使用连接字符串成功连接,但是一旦我尝试访问表,我就会收到此错误:CPF9812: File SELECT in library *LIBL not found.

此时我只是想看看我是否可以访问表 GLPCT 中的数据。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data;

namespace Testing_Connection_to_GLDBFA
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionstring = "Provider=IBMDARLA.DataSource.1;Data Source=INFINIUM;Persist Security Info=True;Password=MyPassword;User ID=UserID;Initial Catalog=S06947A4;Default Collection=GLDBFA";
            string querySTring = "";
            DataTable schema;
            int i = 0;

            using( OleDbConnection cn = new OleDbConnection(connectionstring))
            {

                querySTring = "SELECT * FROM GLPCT";
                OleDbCommand command = new OleDbCommand(querySTring, cn);

                cn.Open();
                OleDbDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine(reader[0].ToString());
                    i++;
                    if (i == 20)
                        break;
                }

                cn.Close();

            }

        }
    }
}

非常感谢任何帮助或指导。 提前致谢。

【问题讨论】:

    标签: c# sql db2 oledb


    【解决方案1】:

    我希望看到以下错误:

    CPF9812:在库 USERID 中找不到文件 GLPCT

    默认情况下,当使用 SQL 命名时,系统将使用用户 ID 隐式限定不合格的表名。详情见here

    看来您使用的是OLE DB provider 而不是.NET provider

    如果要使用库列表,则需要使用系统命名并确保在连接上配置了库列表。

    对于 OLEDB 提供程序,您要设置 Library List命名约定

    <connection>.Open('Provider=IBMDA400;Data Source=SystemA;Library List=lib1,lib2, *USRLIBL;Naming Convention=1', 'Userid', 'Password');
    

    对于 .NET 提供程序,它是 LibraryListNaming 属性。

    最后,如果您想继续使用 OLE DB 提供程序,您可以考虑使用 IBMDASQL 而不是 IBMDARLA。

    【讨论】:

    • 对不起,如果这是一个愚蠢的问题,库列表是表所在的数据库的名称吗?我需要指定,否则它只是默认为 LIBL?
    • 不,库是 IBM i 的传统术语,表示其他 DB 称之为 SCHEMA。有关其他等效项,请参见 here。库列表只是将搜索以查找不合格对象的库列表。大多数 IBM i 安装只有一个数据库。虽然你可以有多个。
    • 好的,谢谢。我认为我在阅读有关如何执行此操作时最困难的地方是知道我使用哪个参数插入哪些变量。我有一个 SSIS 脚本,它设法连接到 AS400 并将表拉到我在 SSMS 中的数据仓库。所以我对哪些参数有效。我只是努力将这些设置插入正确的位置。例如,服务器被称为“S06947A4”,数据库被称为“GLDBFA”,然后我有我想要拉过来的 4 个表的名称,以及用户 ID 和密码。
    • 我一直在尝试通过 SSMS 中的存储过程找到一种方法来执行此 SSIS 脚本,但在理解我需要插入的参数时遇到了同样的问题。
    • GLDBFA 似乎是一个库,又名模式,又名集合。实际的数据库名称可能是 S09647A4。要查看数据库名称,可以使用 WRKRDBDIRE 命令。
    猜你喜欢
    • 1970-01-01
    • 2019-02-09
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2018-01-08
    相关资源
    最近更新 更多