【问题标题】:No start database manager command was issued error未发出启动数据库管理器命令错误
【发布时间】:2013-07-05 06:22:06
【问题描述】:

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

【问题讨论】:

    标签: c# .net db2


    【解决方案1】:

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

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

    您可以通过多种方式做到这一点:

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

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

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

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

    【讨论】:

      【解决方案2】:

      参考这个网址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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2015-10-22
          • 1970-01-01
          • 2015-03-06
          • 1970-01-01
          • 2018-10-27
          • 2013-07-04
          • 1970-01-01
          • 1970-01-01
          • 2019-06-20
          相关资源
          最近更新 更多