C#错误在OleDbCommand中选择表... *找不到LIBL

时间:2016-03-15 15:10:54

标签: c# sql db2 oledb

我正在尝试连接到位于AS400(ISeries)上的DB2数据库。我可以连接到成功使用连接字符串但是一旦我尝试访问表,我就会收到此错误:CPF9812:库中的文件SELECT *未找到LIBL。

此时我只是想看看我是否可以访问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();

            }

        }
    }
}

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

1 个答案:

答案 0 :(得分:1)

我希望看到以下错误:

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

默认情况下,在使用SQL命名时,系统将使用用户ID隐式限定非限定表名。有关详细信息,请参阅here

您似乎使用的是OLE DB provider而不是.NET provider

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

对于OLEDB提供程序,您要设置库列表命名约定

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

对于.NET提供程序,它是 LibraryList 命名属性。

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