我正在尝试使用官方 IBM Nuget 库 IBM.EntityFrameworkCore 6.0.300 连接到 IBM Informix 数据库。打开连接后出现错误:
Culture is not supported. (Parameter 'culture')
4096 (0x1000) is an invalid culture identifier.
我的 DbContext 类是:
public class AppDbContext : DbContext
{
public AppDbContext() : base() { }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseDb2
(@"Host=10.216.1.6:1526;Server=my_server;Database=my_database;userid=my_user;password=*******", p => p.SetServerInfo(IBMDBServerType.IDS));
}
public DbSet<Flyer> Flyers => Set<Flyer>();
}
有什么解决这个问题的建议吗?
编辑:
异常调用栈为:
at System.Globalization.CultureInfo..ctor(Int32 culture, Boolean useUserOverride)
at IBM.Data.Db2.ODC.InvalidArgument()
at IBM.Data.Db2.DB2ConnPool.ReplaceConnectionStringParms(DB2Connection connection, String szValue, DB2ConnSettings& pSettings, DB2ConnSettingsInternal& pSettingsInternal, Boolean bAttach, Boolean pushDownStrAppended)
at IBM.Data.Db2.DB2Connection.set_ConnectionString(String value)
at IBM.Data.Db2.DB2Connection..ctor(String connectionString)
at IBM.EntityFrameworkCore.Storage.Internal.Db2SqlConnection.CreateDbConnection()
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection()
at IBM.EntityFrameworkCore.Storage.Db2RelationalCommand.CreateDbCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.InitializeReader(Enumerator enumerator)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at WpfApp3.MainWindow..ctor() in C:\Users\guillermoec\source\repos\WpfApp3\WpfApp3\MainWindow.xaml.cs:line 31
编辑#2:
我解决了与文化相关的问题:我简单地添加了 en_US 组合作为一种计算机语言并且它起作用了。之前我只安装了 fr_CH 和 en_CH 语言。
如评论所说,连接字符串错误。我改变了它,现在看起来像这样:
optionsBuilder.UseDb2(@"Server=10.216.1.6:1526;Database=my_database;user id=my_user;password=*******", p => {
p.SetServerInfo(IBMDBServerType.IDS);
});
但是还是不行,我得到一个新的错误:
ERROR [08001] [IBM] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "10.216.1.6". Communication function detecting the error: "recv". Protocol specific error code(s): "*", "*", "0". SQLSTATE=08001
和堆栈跟踪:
at IBM.Data.Db2.DB2ConnPool.Open(DB2Connection connection, String& szConnectionString, DB2ConnSettings& ppSettings, Object& ppConn)
at IBM.Data.Db2.DB2Connection.Open()
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.InitializeReader(Enumerator enumerator)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at WpfApp3.MainWindow..ctor() in C:\Users\guillermoec\source\repos\WpfApp3\WpfApp3\MainWindow.xaml.cs:line 33
我安装了 Informix SDK 4.50 并为我的数据库配置了一个新的 ODBC 数据源。我尝试使用库
IfxConnection
中的方法 Informix.Net.Core.dll
打开与数据库的连接。我可以使用此连接字符串成功连接到数据库:
@"Host=10.216.1.6:1526;Server=instance_name;Database=my_database;User ID=my_userid;Password=*******"
数据库版本是11.50,会不会跟DB版本有关?
我们在同一台机器上还有其他实例,这会影响数据库连接吗?