我有一个控制台应用程序,该应用程序通过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数据库?
第二个代码有问题吗?