1

我的机器中有一个 DB2 express,我可以使用命令窗口从数据库中查询(在执行两个命令之后):

set DB2INSTANCE=db2inst1
db2 connect to tims user

现在,当我尝试从 C# 控制台应用程序连接到数据库时,我收到了使用不同连接字符串的以下错误。

尝试 1

 string connectionString = @"Provider = IBMDADB2; Database = TIMS; Hostname = localhost;  CurrentSchema=db2inst1;  ";

SQL1032N 未发出启动数据库管理器命令。SQLSTATE=57019

尝试 2

string connectionString = @"Provider = IBMDADB2; Database = TIMS;  CurrentSchema=db2inst1;  ";

SQL1031N 在指示的文件系统上找不到数据库目录。SQLSTATE=58031

这种情况下正确的连接字符串应该是什么?

代码

        string connectionString = @"Provider = IBMDADB2; Database = TIMS; Hostname = localhost;  CurrentSchema=db2inst1;  ";

        OleDbConnection myConnection = new OleDbConnection();
        myConnection.ConnectionString = connectionString;
        myConnection.Open();
4

3 回答 3

2

您的机器上是否运行了多个 DB2 实例?db2ilist您可以通过执行命令获取存在的实例列表。

如果您必须在打开 DB2 命令窗口时执行该set DB2INSTANCE=db2inst1语句才能使用该命令连接到TIMS数据库db2 connect to TIMS,那么您需要确保以相同方式配置 C# 应用程序的环境。

您可以通过多种方式执行此操作:

  • 通过在启动应用程序之前设置 DB2INSTANCE 环境变量

  • 使用命令更改您机器上的默认 DB2 实例db2set -g DB2INSTDEF=db2inst1 (** 请参阅下面的注释)

  • 使用 TCPIP 连接字符串(如 @Bhaarat 所述),以便您的应用程序不依赖于默认实例的数据库目录

注意:在更改之前,您可能希望通过执行命令并在输出中查找DB2INSTDEF来查看当前值。另请注意,更改默认实例可能会影响您机器上运行的其他应用程序。db2set -allDB2INSTDEF

于 2013-07-08T14:19:09.630 回答
0

参考这个网址http://www.c-sharpcorner.com/uploadfile/nipuntomar/connection-strings-for-ibm-db2/

你的连接字符串应该是这样的

 Provider=IBMDADB2;Database=urDataBase;Hostname=urServerAddress;Protocol=TCPIP;Port=50000;
Uid=urUsername;Pwd=urPassword;

你也可以参考这个 http://www.codeproject.com/Articles/4870/Connect-to-DB2-from-Microsoft-NET

于 2013-07-08T09:49:06.780 回答
0

我的 DB2 insatnce 名称是“db2inst1”,当我使用 DB2 命令窗口时它工作正常。

现在我做了以下设置,现在工作正常。:-)

  1. 在 C:\Windows\System32\drivers\etc\services 文件中创建了一个端口(db2c_db2inst1 50010/tcp)
  2. 为实例设置“TCP/IP 服务名称”(= db2c_db2inst1”)。使用“db2 get dbm cfg”命令验证
  3. 使用值“db2inst1”更新了环境变量 DB2INSTANCE</li>
  4. 重新启动了机器
  5. 启动实例

连接字符串

“提供者 = IBMDADB2;数据库 = TIMS;主机名 = localhost;协议 = TCPIP;端口 = 50010;Uid = myUserID;Pwd = myPassword”;

代码

        string queryString = "SELECT * FROM DBATABC";
        try
        {
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                OleDbCommand command = new OleDbCommand(queryString, connection);
                connection.Open();
                OleDbDataReader reader = command.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {

                        if (!reader.IsDBNull(0))
                        {
                            string companyCode = reader.GetString(0).ToString();
                        }
                    }
                }
                reader.Close();
            }
        }

注意:尝试为 ODBC 创建 DSN,并在示例 SSIS 包中使用 ODBC 连接。这也将有助于解决 OLEDB 连接问题(两者都很常见)

于 2013-07-08T14:16:07.753 回答