C#连接Informix数据库 C#连接Informix数据库的问题
aimevous 人气:0引言
Informix 11 与之前版本的 Informix 相比,新增了很多特性,如 SQL 语句跟踪、非阻断的检查点、SDS 辅节点、星型连接、自动存储扩展、图形界面的管理工具 OAT 等,并且在性能上有了很大的提升。另外,由于 Informix 版本 7、9、10 已进入 EOS (End Of Support) 状态,所以很多 Informix 用户纷纷选择将 Informix 升级到版本 11。
Informix 数据库升级简介
Informix 数据库升级是指把使用的 Informix 数据库从低版本转化为高版本。对 Informix 数据库进行升级是一项系统工程,包括升级前的测试、升级前的检查、升级操作过程、升级后的测试、升级后的调优等。
Informix 数据库升级有两种类型:in-place 和 non-in-place。In-place 升级中,新版本的 Informix 使用的数据文件与旧版本的 Informix 相同,数据库管理员无需导出导入数据。Non-in-place 升级中,新版本的 Informix 使用的数据文件与旧版本的 Informix 不同,数据库管理员需要导出导入数据。
In-place 升级比较简单,升级操作时间短。non-in-place 升级比较复杂,升级操作时间长,所需的硬件资源多,风险较小。在一些情况下我们只能使用 non-in-place 升级,例如改变了硬件或操作系统。
两种类型的 Informix 数据库升级的示意图如图 1 所示。
图 1. 两种类型的 Informix 数据库升级的示意图
两种类型的 Informix 数据库升级的示意图
正文
最近在工作中遇到了需要连接Informix数据库的问题,在通过研究后发现了可以通过多种方式实现,我选择的是通过IBM Informix .NET Provider。该方式需要引用IBM.Data.Informix.dll。
using IBM.Data.Informix; using System; 7 namespace InformixLinkTest { class Program { static void Main(string[] args) { try { // Open a connection IfxConnection conn = new IfxConnection( "Host=127.0.0.1;Service=9098;" + "Server=informixserver;Database=MyDatabase;" + "User ID=informix;password=MyPassword;db_locale=en_us.819" ); conn.Open(); IfxDataReader rd; using (IfxCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from simpletable"; rd = cmd.ExecuteReader(); rd.Read(); do { if (rd.HasRows) { ///Assuming the table has two columns Console.WriteLine("{0}", rd[0]); } } while (rd.Read()); } conn.Close(); } catch (IfxException e) { Console.WriteLine(e.ToString()); Console.ReadLine(); } } }
在调试过程中会发现出现异常(System.DllNotFoundException:“无法加载 DLL“IfxDotNetIntrinsicModule.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”),具体如图:
通过提示可以看到找不到IfxDotNetIntrinsicModule.dll,我通过在安装Informix数据库的路径中找到了这个包放到了bin文件夹下后
就能正常运行了。
另一个问题就是在连接串中最开始db_locale的值我是给的utf8,按照这个也会出现异常情况,异常代码为(ERROR [HY000] [Informix .NET provider][Informix]Database locale information mismatch. ),截图如下:
最后将其设置为db_locale=en_us.819后就可正常连接到informix数据库。
总结
加载全部内容