Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未发出启动数据库管理器命令错误_C#_.net_Db2 - Fatal编程技术网

C# 未发出启动数据库管理器命令错误

C# 未发出启动数据库管理器命令错误,c#,.net,db2,C#,.net,Db2,我的机器中有一个DB2 expresss,我能够使用命令窗口从数据库中进行查询(在执行以下两个命令之后): 现在,当我尝试从一个C#控制台应用程序连接到数据库时,我得到了以下不同连接字符串的错误 尝试1 string connectionString = @"Provider = IBMDADB2; Database = TIMS; Hostname = localhost; CurrentSchema=db2inst1; "; SQL1032N未发出启动数据库管理器命令。SQLSTAT

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

现在,当我尝试从一个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();
        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();
            }
        }
请参考此url

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

 Provider=IBMDADB2;Database=urDataBase;Hostname=urServerAddress;Protocol=TCPIP;Port=50000;
Uid=urUsername;Pwd=urPassword;
在更多信息中,您也可以参考这一点

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

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

  • 在C:\Windows\System32\drivers\etc\services文件(db2c\u db2inst1 50010/tcp)中创建了一个端口
  • 为实例设置“TCP/IP服务名称”(=db2c_db2inst1)。使用“db2getdbmcfg”命令进行验证
  • 使用值“db2inst1”更新了环境变量DB2INSTANCE
  • 重新启动机器
  • 启动实例
  • 连接字符串

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

    代码

            string connectionString = @"Provider = IBMDADB2; Database = TIMS; Hostname = localhost;  CurrentSchema=db2inst1;  ";
    
            OleDbConnection myConnection = new OleDbConnection();
            myConnection.ConnectionString = connectionString;
            myConnection.Open();
    
            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连接问题(这两个问题都很常见)

    您的机器上是否有多个DB2实例运行?您可以通过执行
    db2ilist
    命令来获取现有实例的列表

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

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

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

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

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

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