如何通过Microsoft Azure与DB2 iseries数据库连接?

时间:2018-07-10 17:28:11

标签: c# db2 azure-webjobs db2-400

我有一个控制台应用程序,该应用程序通过db2 iseries数据库执行查询,该应用程序在我的笔记本电脑上运行良好,因为我已经安装了驱动程序。当我想在Microsoft Azure中将控制台应用程序作为WebJob执行时,控制台会引发以下错误:

  

[07/10/2018 15:14:54> 32b9fb:SYS INFO]状态已更改为Initializing

     

[07/10/2018 15:14:54> 32b9fb:SYS INFO]使用脚本主机-'WindowsScriptHost'运行脚本'ConexionDB2.exe'

     

[07/10/2018 15:14:54> 32b9fb:SYS INFO]状态已更改为“运行”

     

[07/10/2018 15:14:55> 32b9fb:错误]

     

[07/10/2018 15:14:55> 32b9fb:ERR]未处理的异常:IBM.Data.DB2.iSeries.iDB2InvalidConnectionStringException:ConnectionString属性无效。 ---> System.TypeInitializationException:'IBM.Data.DB2.iSeries.iDB2Constants'的类型初始值设定项引发了异常。 ---> IBM.Data.DB2.iSeries.iDB2DCFunctionErrorException:发生意外的异常。类型:System.DllNotFoundException,消息:无法加载DLL'cwbdc.dll':找不到指定的模块。 (来自HRESULT的异常:0x8007007E)。 ---> System.DllNotFoundException:无法加载DLL'cwbdc.dll':找不到指定的模块。 (来自HRESULT的异常:0x8007007E)

     

[07/10/2018 15:14:55> 32b9fb:ERR]在IBM.Data.DB2.iSeries.CwbDc.DcDnGetConstants(MpDcConstants&parms)

     

[07/10/2018 15:14:55> 32b9fb:ERR]在IBM.Data.DB2.iSeries.CwbDc.GetConstants(MpDcConstants&parms)

     

[07/10/2018 15:14:55> 32b9fb:ERR]在IBM.Data.DB2.iSeries.iDB2Constants..cctor()

     

[07/10/2018 15:14:55> 32b9fb:ERR] ---内部异常堆栈跟踪结束---

     

[07/10/2018 15:14:55> 32b9fb:ERR]在IBM.Data.DB2.iSeries.iDB2Constants..cctor()

     

[07/10/2018 15:14:55> 32b9fb:ERR] ---内部异常堆栈跟踪结束---

     

[07/10/2018 15:14:55> 32b9fb:ERR]在IBM.Data.DB2.iSeries.iDB2ConnectionStringBuilder.set_Item(字符串关键字,对象值)

     

[07/10/2018 15:14:55> 32b9fb:ERR]在IBM.Data.DB2.iSeries.iDB2ConnectionStringBuilder.ParseConnectionString(String&propString,String&propertyInError,Exception&innerException)

     

[07/10/2018 15:14:55> 32b9fb:ERR] ---内部异常堆栈跟踪结束---

     

[07/10/2018 15:14:55> 32b9fb:ERR]在IBM.Data.DB2.iSeries.iDB2Connection..ctor(String connectionString)

     

[ConceptionDB2.Program.Main(String [] args)在C:\ Users \ afcamacho \ source \ repos \ ConexionDB2 \ ConexionDB2 \ Program.cs中的[07/10/2018 15:14:55> 32b9fb:ERR] :第14行

     

[07/10/2018 15:14:55> 32b9fb:SYS INFO]状态已更改为“失败”

     

[07/10/2018 15:14:55> 32b9fb:SYS ERR]作业由于退出代码-532462766而失败

我认为无法建立连接,因为没有通过Microsoft Azure安装驱动程序。

这是我的代码:

string provider = "DataSource=10.0.0.0;userid=andres;password=123456;";

//Conexión
iDB2Connection cnn = new iDB2Connection(provider);
//Sentencia SQL
string sentencia = "select * from DTA.Customer FETCH FIRST 20 ROWS ONLY";

//Objeto contenedor de comandos
iDB2Command cmd = new iDB2Command(sentencia, cnn );

//Declaramos el objeto contenedor del resultado de ejecutar la sentencia
iDB2DataReader drDB2;

//Abrimos la conexión
cnn.Open();

//Creamos el objeto que va a contener el resultado de la sentencia SQL y cargamos los datos
drDB2 = cmd.ExecuteReader();

//Leemos los registros cargados
int i = 0;
while (drDB2.Read())
{
    Console.WriteLine(drDB2.GetString(i));
}
drDB2.Close();
cnn.Close();

Console.Read();

我还尝试在项目中安装“ IBM.Data.DB.Provider ”包,以将应用程序连接到db2数据库,但是它不适用于以下代码:

String cs = "Server=10.0.0.0;Database=DTA;UID=andres;PWD=123456;Connect Timeout=10";

DB2Command MyDB2Command = null;

DB2Connection MyDb2Connection = new DB2Connection(cs);

MyDb2Connection.Open();
MyDB2Command = MyDb2Connection.CreateCommand();
MyDB2Command.CommandText = "select * from DTA.customer FETCH FIRST 20 ROWS ONLY";
Console.WriteLine(MyDB2Command.CommandText);

DB2DataReader MyDb2DataReader = null;
MyDb2DataReader = MyDB2Command.ExecuteReader();
Console.WriteLine("============================");
while (MyDb2DataReader.Read())
{
    for (int i = 0; i <= 1; i++)
    {
        try
        {
            if (MyDb2DataReader.IsDBNull(i))
            {
                Console.Write("NULL");
            }
            else
            {
                Console.Write(MyDb2DataReader.GetString(i));
            }
        }
        catch (Exception e)
        {
            Console.Write(e.ToString());
        }
        Console.Write("\t");

    }
    Console.WriteLine("");
}
MyDb2DataReader.Close();
MyDB2Command.Dispose();
MyDb2Connection.Close();


Console.Read();

上面的代码抛出此错误:

  

en ConexionDB2.Program.Main(String [] args)en C:\ Users \ afcamacho \ source \ repos \ ConexionDB2 \ ConexionDB2 \ Program.cs:línea57IBM.Data.DB2.DB2Exception(0x80004005):错误[08001 ] [IBM] SQL30081N已检测到通信错误。使用的通信协议:“ TCP / IP”。使用的通信API:“ SOCKETS”。检测到错误的位置:“ 10.0.0.0”。通信功能检测到错误:“ selectForConnectTimeout”。协议特定的错误代码:“ 0”,“ ”,“ ”。 SQLSTATE = 08001

有没有办法在没有驱动程序的情况下将.net从外部服务器连接到DB2数据库?

第二个代码有问题吗?

0 个答案:

没有答案