Informix数据库连接工具(.net vs怎么连接Informix数据库)

2024-03-01 02:30:02 :29

informix数据库连接工具(.net vs怎么连接Informix数据库)

这篇文章给大家聊聊关于informix数据库连接工具,以及.net vs怎么连接Informix数据库对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

.net vs怎么连接Informix数据库

在使用 ADO.NET 驱动程序之前,应该确保该驱动程序已安装并能正确运行。该驱动程序的当前版本可以使用 Informix Client Software Developer’s Kit (SDK) 2.90 来安装。与以前的 2.81 版本不同,此 SDK 版本包括默认的 ADO.NET 驱动程序。SDK 的安装程序也会警告您有关事项。它并不真正在您的计算机上查找 .NET 框架的安装,只是警告您必须在安装 SDK 之前安装好 .NET 框架。如果您已经安装了 2.81 SDK,那么最好先卸载它。这两个版本无法共存。还要认识到的一点是,在将 2.90 ADO.NET 驱动程序添加到 Visual Studio Projects 中时,它会不正确地报告它自己是版本 2.81。

2.9 版本是在 2.81 版本之上的一次重要升级。它包括一个新的 IfxDataAdapter 向导、IPv6 支持和一些用于 Informix 数据类型(IfxDateTime、IfxDecimal、IfxBlob 和 IfxClob)的新类。该文档更为完善,内容总量是以前的两倍。

要点:IBM Informix ADO.NET 驱动程序并不仅仅包含在安装目录下的 /bin 目录下的 IBM.Data.Informix.dll 文件中。显然,它使用了由 SDK 安装的其他客户端代码。这意味着您必须在所有将使用 ADO.NET 驱动程序的机器上安装 Informix Client SDK。您不能只在您的发行版中包括 IBM.Data.Informix.dll。这对一些应用程序而言可能是一个严重的限制。您还需要仔细检查 SDK 安装程序 (SetNet32),以定义 Informix 数据源。

在将 ADO.NET 驱动程序用于连接之前,还必须运行一个叫做 cdotnet.sql 的存储过程。这个存储过程位于 SDK 安装的 /etc 目录中。这类似于设置 OLEDB 驱动程序的过程,尽管这个过程更短一些。这个过程记录在 User’s Guide 中。(请参阅下面的 参考资料 部分。)

在完成安装之后,检查一下驱动程序,确保建立了连接。要在 Visual Studio 项目中使用 ADO.NET 驱动程序,则必须确保已将一个引用添加到客户端 SDK 安装的 /bin 目录中找到的 IBM.Data.Informix.dll 中。正确的 using 语句是:using IBM.Data.Informix。以下是一个演示如何获得到数据库的连接的简单方法:

清单 1. 到 Informix 数据库的连接public void MakeConnection() {    string ConnectionString = "Host=" + HOST + "; " +     "Service=" + SERVICENUM + "; " +     "Server=" + SERVER + "; " +     "Database=" + DATABASE + "; " +     "User id=" + USER + "; " +     "Password=" + PASSWORD + "; ";    //Can add other DB parameters here like DELIMIDENT, DB_LOCALE etc    //Full list in Client SDK’s .Net Provider Reference Guide p 3:13    IfxConnection conn = new IfxConnection();    conn.ConnectionString = ConnectionString;    try {        conn.Open();        Console.WriteLine("Made connection!");        Console.ReadLine();    } catch (IfxException ex) {        Console.WriteLine("Problem with connection attempt: "                          + ex.Message);    }}

示例代码中包括一个用于此功能的 BasicConnection 类。如您所见,ConnectionString 只是一个用于连接的分号分隔的参数列表。Open() 方法打开了到数据库的连接,如果连接失败,则抛出一个 IfxException。IfxException.Message 属性通常提供关于失败原因的合理数量的详细信息

基本命令

一旦建立了连接,就可以开始对数据库执行命令。要做到这一点,需要使用 IfxCommand 对象。IfxCommand 的构造函数接收一个字符串(SQL 命令文本)和一个 IfxConnection 作为参数。IfxCommand 对象有一系列的 Execute 方法,以便对数据库执行命令。要清除连接,可以使用 IfxConnection.Close() 方法。以下是执行某个不返回结果集的简单命令的例子。该命令可能是 insert、update 或 delete。

清单 2. 执行 insert、update 或 delete 命令IfxCommand cmd;cmd = new IfxCommand("insert into test values (1, 2, ’ABC’)",conn);cmd.CommandTimeout = 200; //seconds to wait for command to finishtry {    int rows = cmd.ExecuteNonQuery();}catch (IfxException ex) {    Console.WriteLine("Error "+ex.Message);}

ExecuteNonQuery 以整数形式返回受命令影响的行数。您还可以构建参数化语句和查询,后面部分将对它们进行研究。注意 IfxCommand 的 CommandTimeout 属性。默认超时时间是 30 秒,尽管在文档中没有对此进行说明。除非更改此属性,否则运行 30 秒后,命令就会超时,并且将抛出一个异常。

下一个例子是执行一条 select 语句,并处理由数据库服务器返回的结果集。对于快速的、只向前通过结果的游标,可以使用由 ExecuteReader 方法返回的 IfxDataReader。不过,每个 IfxConnection 只可以有一个打开的 IfxDataReader。(这是一条 ADO.NET 限制,不是 Informix ADO.NET 驱动程序的特定限制。)

清单 3. 迭代通过 IfxDataReaderIfxCommand cmd = new IfxCommand("select * from test",bconn.conn);try {    IfxDataReader dr = cmd.ExecuteReader();    while (dr.Read()) {        int a = dr.GetInt32(0);        int b = Convert.ToInt32(dr;    }    dr.Close();}catch (IfxException ex) {    Console.WriteLine("Error "+ex.Message);}

每一列都被作为一般的 Object 类型进行检索。正如代码所演示的,存在一些将列 Objects 转换为正确数据类型的方法。您可以使用 IfxDataReader 的 GetXxx 方法。对于每种数据类型,几乎都有相应的方法。GetXxx 方法将列数目作为一个参数。可以使用 IfxDataReader 的索引,通过列的名称来访问列。如果可能的话,.NET 框架的 Convert 函数可以将这些 Objects 转换为正确的类型。最后,可以根据列编号为这些列建立索引,并直接强制转换结果(对于某些类型)。

下一个例子将展示如何调用需要一个参数值的存储过程。

清单 4. 执行带有一个参数的存储过程IfxCommand cmd = new IfxCommand("test_proc",conn);cmd.CommandType = CommandType.StoredProcedure; //from System.Datacmd.Parameters.Add("in_parameter",2); //many ways to create thesetry {    cmd.ExecuteScalar();}catch (IfxException ifxe) {    Console.WriteLine("Error "+ifxe.Message);}

对于此 IfxCommand,必须将 CommandType 设置为来自 System.Data 中的 CommandType 枚举的 StoredProcedure 值。为了创建参数,可以使用 IfxCommand 的 Parameters.Add 方法。IfxCommands.Parameters 是一个集合,因此您可以添加您所需数量的参数。您可以使用任意 IfxParameter() 构造函数来创建参数,或者可以像上面这样简化参数的创建。不过要注意的是,每个 IfxParameter 都与一个特定的 IfxCommand 相关。您不能先创建 IfxParameters,然后在多个 IfxCommand 对象中使用它们。ExecuteScalar() 方法现在只返回 1。这一示例没有从存储过程返回任何东西。

要构建一个不执行存储过程的参数化 SQL 语句,需要将问号作为占位符插入 CommandText 中。例如:

清单 5. 参数化查询IfxCommand insCmd = new IfxCommand("insert into clientstest "     + "(clientcode, clientacctname, primarycontact, primaddrcode, "    + "initialamt,createdate) values (0,?,?,?,?,TODAY)",conn);

按照 IfxParameter 对象在命令文本中的顺序,将这些对象添加到 IfxCommand 的 Parameters 集合中。在下面的扩展示例中的最终强类型化 DataSets 中,将进一步演示此技术。 

强类型数据集

ADO.NET 包括一个叫做 DataSet 的专用数据库对象。它是一个内存数据库。DataSet 由一个或多个(由一些 DataRow 对象的)DataTable 对象组成。DataTable 可以通过主键和外键相关联。可以对数据设置一些约束。DataSet 也与实际的数据存储断开连接,可以通过一个或多个 DataAdapter(每个 DataTable 一个)来填充它,然后在内存中保存这些数据和所有更改。稍后,DataAdapter 可以将这些更改提交回数据存储。

基本的 DataSet 不是强类型的。它不知道数据库的实际行和列是什么。因此编译器没有检查这些列名称。直到运行的时候,列名称中的任何错误才会显现出来。此外,当开发者记不清列名是 "itemcode" 还是 "itemid" 的时候,他会发现基本的 DataSet 在这方面毫无帮助。

一个强类型的 DataSet 可以解决这些问题。而一个普通的 DataRow 却无法取代它,因为普通的 DataRow 只有一个(例如)作为 OrderDetailDataTable 一部分的 OrderDetailDataRow。您可以将这些列作为 OrderDetailDataRow 的实际属性 (row.ItemCode) 进行引用。用这种方式,可以提高 IntelliSense 的生产率。表名称和列名称在属性器中也会变得有效,从而增强诸如数据绑定之类的设计人员级工具。

那么,怎样构建这个提高生产率的强类型 DataSet 呢?要花费如此多的时间或精力来构建一个您还没有体验到任何净生产效率的东西吗?Informix ADO.NET 驱动程序可能没有其他一些驱动程序那么复杂。Microsoft 的 SQLDataAdapter(用于 SQL Server)包括一个 Generate DataSet 向导。而 IfxDataAdapter 没有这样的向导。不过,您可以构建一些工具来帮助您,也可以使用一些已在 .NET 框架中构建的工具。最后,您将拥有封装所有数据库交互的强类型 DataSet 的一个子代。

.NET 框架包括一个 XSD 编译器 (xsd.exe),它可以从某个经过特殊格式化的 .xsd 文件中生成一个强类型 DataSet。但是,谁想键入一串 XML 呢?幸运的是,DataSet 对象包括一个叫做 WriteXmlSchema() 的方法。此方法允许您使用非类型化的 DataSet 为强类型 DataSet 创建 XSD 文件。让我们来看一下如何做到这一点。以下是一个示例表:

清单 6. Clientstest 表CREATE TABLE clientstest (  clientcode SERIAL not null,  clientacctname CHAR(60) not null,  primarycontact CHAR(30) not null,  primaddrcode CHAR(10),  createdate DATE,  initialamt DECIMAL (18,0));    以下是用于此表的单表 DataSet :清单 7. 定义 DataSetDS = new DataSet("dsClients");//main table definitionDataTable mainTable = new DataTable("clients");DataColumnCollection cols = mainTable.Columns;DataColumn column = cols.Add("clientcode",typeof(Int32));column.AllowDBNull = false;cols.Add("clientacctname",typeof(String)).MaxLength = 60;cols.Add("primarycontact",typeof(String)).MaxLength = 30;cols.Add("primaddrcode",typeof(String)).MaxLength = 10;cols.Add("initialamt",typeof(Decimal));cols.Add("createdate",typeof(System.DateTime));//primary keymainTable.PrimaryKey = new DataColumn};//add table to DataSetDS.Tables.Add(mainTable);//Write schema to fileDS.WriteXmlSchema("dsClients.xsd");

在这个定义中,可以在数据上设置类型和限制条件。还可以设置列名称。这些名称不必与数据库的列名称匹配。观察本文 下载 部分中的代码文件,以查看得到的 dsClients.xsd 文件。

为了使生成 XSD 文件(或者在发生更改后重新生成它)变得更容易,可以为这些 DataSet Builders 构建一个框架。(完成此任务所需的所有代码都包含在下面部分。)在想用该框架确定要构建哪些 Builders 时,可以使用反射来动态确定某一 Builders 是否是 DataSetBuilder。让我们从编写 IBuildable 接口开始。它定义了 DataSetBuilder 必须实现的属性和方法。

清单 8. IBuildable 接口public interface IBuildable {    string FileName {get; set;}    string FilePath {get; set;}    Logger Log {get; set;}    DataSet DS {get; set;}    void BuildXSD();    void CompileXSD(string outputDirectory);}

windos 连接 linux 下的informix

项目中用到的开发相关资料主要有:系统开发环境:Windows+LinuxWindows开发软件:MyEclipse5.5+IBM Informix Client-SDK 2.90+FlashFXPLinux软件:Informix11数据库相关技术:JSP+Struts+JavaBean+Informix 方式一:MyEclipse直接连接Informix数据库准备文件有:d:/ifxjdbc.jar操作步骤:"开始"--“所有程序”--“MyEclipse 5.5”--"Windows"--"Open Perspctive"--"My Eclipse Database Explorer" 打开DB Browser窗体,鼠标右键"new"新建一个数据库连接 Driver name:自定义连接标识( 如informix.jdbc.IfxDriver)nnection URL:jdbc:informix-sqli://192.168.1.249:9000/databasename:informixserver=informixservername;newcodeset=GBK,8859-1,819User name: informixPassword: informixDriver JARs :d:/ifjdbc.jar 其中192.168.1.249为Linux服务器IP,databasename为Linux服务器数据库名和informixservername为Linux服务器数据库服务名称 方式二:ODBC连接Informix数据库1.安装IBM Informix Client-SDK 2.902.打开控制面板--数据源(ODBC)--新建一个新的系统DSN,设置如下:Server Name: Informix ServerHost Name :192.168.1.249Service :sqlexeclprotocol :onsoctcp Options :Database Name :DataBaseNameUser Id : Informix User NamePassword : Informix Password3.设置Windows系统文件service内容C:/WINDOWS/system32/drivers/etc/serviceman 9535/tcp #Remote Man Serversqlexecl 9003/tcp #Remote Linux Informix Data Server3.设置Windows系统文件hosts内容C:/WINDOWS/system32/drivers/etc/hosts127.0.0.1 localhost192.168.1.249 LinuxMachineName

eclipse birt报表 与 informix数据库连接

百灵报表(BIRT)是一个非常有用的开源报表工具,它不仅能满足一般需求的商业智能报表设计领域,也可以用Java语言相结合,实现了更丰富的个性化的报表样式。 RTL是从右到左的简写。 如果我们输出的HTML值RtL.The是一个Boolean对象,默认是Boolean.FALSE的。

python调用dbaccess连接informix数据库

使用informixdb库,如下是快速示例:》》》 import informixdb》》》 conn = informixdb.connect(’mydatabase’)》》》 cursor = conn.cursor()》》》 cursor.execute("SELECT * FROM names")》》》 cursor.fetchall()

怎样通过DbVisualizer 7.1.3工具连接上informix数据库

在连接URL中, 增加DB_LOCALE=en_us.819;CLIENT_LOCALE=en_us.57372;NEWCODESET=GBK,8859-1,819示例:jdbc:informix-sqli://《ip》:《port》/《dbname》:informixserver=《servername》;DB_LOCALE=en_us.819;CLIENT_LOCALE=en_us.57372;NEWCODESET=GBK,8859-1,819

如何远程连接informix数据库 怎样配置

Class.forName("com.informix.jdbc.IfxDriver");conn = DriverManager.getConnection("jdbc:informix-sqli://IP:port/database:informixserver=server", "user", "password");IP:你要连接数据库的IP地址port:你要连接数据库的端口号database:你要连接数据库的库名server:你要连接数据库的serveruser:你要连接数据库的用户名password:你要连接数据库的密码stmt = conn.createStatement();rs = stmt.executeQuery("select a from b"); //你要执行的sql语句while(rs.next()){ System.out.println(rs.getString("a")); //输出结果}连接之前需要导入ifxjdbc.jar这个包,异常就用eclipse自动抛吧

winform 怎么连接informix数据库

informix的数据库要用odbc来连接,首先安装informix的数据库驱动,然后配置odbc,把服务名,主机地址什么的都填好并测试连通,然后得数据库连接和普通其他odbc方式连接没有什么区别了

.net vs怎么连接Informix数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于.net vs怎么连接Informix数据库、.net vs怎么连接Informix数据库的信息别忘了在本站进行查找哦。

informix数据库连接工具(.net vs怎么连接Informix数据库)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.