通过 C# 连接到 Informix

Posted

技术标签:

【中文标题】通过 C# 连接到 Informix【英文标题】:Connect to Informix via C# 【发布时间】:2018-06-26 12:17:11 【问题描述】:

我需要连接到 Informix,但看似简单的任务却变得有点烦人。 我下载了 Client SDK 并添加了对 DLL 的引用。

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IBM.Data.Informix;

namespace ConsoleApp3

    class Program
    

        public static IfxConnection conn  get; set; 

        public static IfxCommand cmd  get; set; 

        /// <summary>
        /// Opens a database connection
        /// </summary>
        /// <param name="host">Set the host of the database. Ex: 192.168.0.1</param>
        /// <param name="service">Set the service number (port). Ex: 1525</param>
        /// <param name="server">Set the server name. Ex: srv</param>
        /// <param name="database">Set the database name. Ex: InformixDB</param>
        /// <param name="userID">Set the userID. Ex: informix</param>
        /// <param name="password">Set the password. Ex: P@ssw0rd</param>
        /// <returns></returns>
        public static void OpenConnection(string host, string service, string server, string database, string userID, string password)
        
            string ConnectionString =
                "Host = " + host + "; " +
                "Service=" + service + "; " +
                "Server=" + server + "; " +
                "Database=" + database + "; " +
                "User Id=" + userID + "; " +
                "Password=" + password + "; ";

            try
            
                conn = new IfxConnection();
                conn.ConnectionString = ConnectionString;
                conn.Open();
            
            catch (Exception e)
            
                var ex = new Exception(string.Format("0 - 1", e.Message, (e as Win32Exception).ErrorCode));
                throw ex;
            
        
        static void Main(string[] args)
        
            OpenConnection("", "", "", "", "", "");

            Console.ReadKey();
        
    

我知道我对 OpenConnection 方法没有任何参数。在这种情况下它并不重要,因为它甚至在尝试连接之前就抛出异常。创建 IfxConnection 对象时会引发异常。它说“无法加载 DLL 'iclit09b.dll'”。

根据IBM,可能的原因是 INFORMIXDIR 和 PATH 必须设置为环境变量。但是他们并不清楚到底要设置什么......

我们将不胜感激。

【问题讨论】:

INFORMIXDIR 需要到您安装 CSDK 的目录。 PATH 需要设置为 %INFORMIXDIR%\bin (基本上是包含iclit09b.dll 库的目录。除此之外,编译时必须使用x64 或x86。不能将AnyCPU 用作.NET驱动程序未完全托管,需要加载本机库。 CSDK 版本上的后缀(例如“4.10.FC11”或“4.10.TC11”)会告诉您这些库是什么架构。 “F”代表 64 位 CSDK,“T”代表 32 位 嘿,谢谢。现在唯一的错误就是连接,这是完全正常的,因为我还没有定义任何东西。但是,“%INFORMIXDIR%\bin”不起作用。我必须像这样定义路径: Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("INFORMIXDIR")+ @"\bin"); 有没有办法以动态方式获取informix目录而不是指定整个路径?问题是,我正在本地机器上测试它,但它稍后会在服务器上,所以它必须重新定义。 另外,由于它将在 Linux 服务器上,我是否需要指定其他内容?我认为不需要,因为它只需要一个 DLL,但是... 【参考方案1】:

这个旧技术说明提供了如何配置 Windows 客户端的简单指南(包括 PATH 和 INFORMIXDIR 环境变量所需的值)

http://www-01.ibm.com/support/docview.wss?uid=swg21083599

【讨论】:

以上是关于通过 C# 连接到 Informix的主要内容,如果未能解决你的问题,请参考以下文章

C# 客户端通过 SSL 连接到 Java 服务器

通过 C# 连接到在 XAMPP 中创建的数据库

无法从 C# 通过 Wallet 连接到 Oracle DB

如何在不实际安装连接器的情况下通过 C# 使用 mysql 连接器连接到 mysql

如何使用 C# 连接到 Blob 存储容器

如何从 C# 连接到 SQL 数据库?