I want to connect to a DB2 database on an IBM i 7.2 server from a Windows client machine using .NET Core 3.1. I installed IBM.Data.DB2.Core via NuGet, but it always throws this cryptic exception:
IBM.Data.DB2.Core.DB2Exception
HResult=0x80004005
Message=External component has thrown an exception.
Source=IBM.Data.DB2.Core
StackTrace:
at IBM.Data.DB2.Core.DB2ConnPool.Open(DB2Connection connection, String& szConnectionString, DB2ConnSettings& ppSettings, Object& ppConn)
at IBM.Data.DB2.Core.DB2Connection.Open()
at Dapper.SqlMapper.<QueryImpl>d__140`1.MoveNext() in /_/Dapper/SqlMapper.cs:line 1079
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in /_/Dapper/SqlMapper.cs:line 721
at Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in /_/Dapper/SqlMapper.cs:line 648
at SqlPerformanceTesting.Program.<Main>d__0.MoveNext() in C:\Users\mmarchese\Desktop\SqlPerformanceTesting\SqlPerformanceTesting\Program.cs:line 54
I think I need to install different drivers/software on my Windows client machine first. Right now, I have "IBM I Access Client Solutions" installed, but maybe I need something else instead such as "IBM Data Server Drivers?" And that requires a license, it seems? Do I also need to install something on the IBM server to go with it? Can someone spell it out for me or point me to a good guide? I haven't been able to find much myself. Like, "Here are the general steps:"
Update:
If I specify a bad connection string, I get a different error. Since IBM.Data.DB2.Core includes a class for building valid connection strings, I assume my connection string is ok:
var connStringBld = new DB2ConnectionStringBuilder()
{
Database = "myDb",
UserID = "myUser",
Password = "myPassword",
Server = "myIp"
};
Console.WriteLine(connStringBld.ConnectionString);
// Database=myDb;User ID=myUser;Password=myPassword;Server=myIp
I had the same problem but I only follow the next steps:
Install IBM.Data.DB2.Core (is ONLY for windows, if using in Linux, you must install IBM.Data.DB2.Core-lnx instead. Also installed cause I run it into Docker container).
Paste the licences files (of Windows) in my project located at {MyProject}/License folder. The licences are db2.consv.lic and db2ese.lic files
Also check that when I use the Nuget, a linked folder named "clidriver" is attached in the root project. I also verified that the location %userprofile%\.nuget\packages\ibm.data.db2.core\1.3.0.100\build\clidriver\license had the licence files.
Define DI in Startup.cs using:
services.AddDbContext<Db2Context>(options =>
{
options.UseDb2(connection, si =>
{
si.SetServerInfo(IBMDBServerType.AS400, IBMDBServerVersion.AS400_07_02));
}
});
And that's all I've done. Model the entities and use LINQ as well.
User contributions licensed under CC BY-SA 3.0