Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过C连接到Informix#_C#_Informix - Fatal编程技术网

C# 通过C连接到Informix#

C# 通过C连接到Informix#,c#,informix,C#,Informix,我需要连接到Informix,但看似简单的任务却变得有点烦人。 我下载了客户端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 ConsoleAp

我需要连接到Informix,但看似简单的任务却变得有点烦人。 我下载了客户端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();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用IBM.Data.Informix;
名称空间控制台AP3
{
班级计划
{
公共静态IfxConnection conn{get;set;}
公共静态IfxCommand cmd{get;set;}
/// 
///打开数据库连接
/// 
///设置数据库的主机。例如:192.168.0.1
///设置服务编号(端口)。例如:1525
///设置服务器名称。例如:srv
///设置数据库名称。例如:InformixDB
///设置userID.Ex:informix
///设置密码。例如:P@ssw0rd
/// 
公共静态void OpenConnection(字符串主机、字符串服务、字符串服务器、字符串数据库、字符串用户标识、字符串密码)
{
字符串连接字符串=
“Host=“+Host+”;”+
“Service=“+Service+”;”+
“Server=“+Server+”;”+
“Database=“+Database+”;”+
“用户Id=“+userID+”;”+
“Password=“+Password+”;”;
尝试
{
conn=新的IfxConnection();
conn.ConnectionString=连接字符串;
conn.Open();
}
捕获(例外e)
{
var ex=新异常(string.Format(“{0}-{1}”),e.Message,(e为Win32Exception.ErrorCode));
掷骰子;
}
}
静态void Main(字符串[]参数)
{
OpenConnection(“,”,“,”,“,”,“,”,”);
Console.ReadKey();
}
}
}
我知道我没有关于OpenConnection方法的任何参数。在这种情况下,它并不重要,因为它甚至在尝试连接之前就抛出了异常。它在创建IfxConnection对象时引发异常。它表示“无法加载DLL‘iclit09b.DLL’”

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


非常感谢您的帮助。

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


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