没有发出启动数据库管理器命令错误

时间:2013-07-05 06:22:06

标签: c# .net db2

我的机器上有一个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

此方案的正确连接字符串应该是什么?

CODE

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

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

答案 1 :(得分: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

答案 2 :(得分: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”
  4. 更新了环境变量DB2INSTANCE
  5. 重新启动机器
  6. 启动实例
  7. <强>的ConnectionString

      

    “Provider = IBMDADB2; Database = TIMS; Hostname = localhost; Protocol = TCPIP; Port = 50010; Uid = myUserID; Pwd = myPassword”;

    <强> CODE

            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连接问题(这两者都很常见)