Interbase 和 Visual C# .NET






4.52/5 (11投票s)
一个用 C# .NET 管理 InterBase 数据库的解决方案
引言
在一个大学项目中,我必须用 C# 管理 Interbase、Oracle 和 SQL Server 数据库。 Oracle 和 SQL Server 很容易,但是当我搜索关于 C# 连接 Interbase 的一些信息时,简直是地狱。 我不得不阅读大量的文章,因为我从来没有做过这件事。 但几天后,我成功了!
背景
面临的第一个问题是找到正确的数据库驱动程序。 我搜索了很多,找到了 IBProvider(免费版本不起作用)、ADO 1.0 (IB Driver)。 然后我找到了 ADO 2.0 Driver(仅适用于 Windows XP 和 IB2007)。 来自 IB 的 ADO 2.0 让我松了一口气,因为我以为我永远也找不到它了。
zip 文件包含 CodeGear Interbase 的 ADO.NET 2.0 驱动程序,以及关于它如何工作的信息。 但第二个问题是“它到底是如何工作的?” 首先安装驱动程序,然后编辑来自 C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG 目录的 machine.config 文件。
在标记为 <DbProviderFactories>
的部分中添加以下行
<add name="InterBase ADO.NET 2.0 Data Provider" invariant="Borland.Data.AdoDbxClient"
description=".Net Framework Data Provider for InterBase"
type="Borland.Data.TAdoDbxProviderFactory, Borland.Data.AdoDbxClient,
Version=11.0.5000.0, Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b"/>
启动 Visual Studio 2005。
文件 - 新建 C# Windows 应用程序。
项目 - 添加引用,并将 AdoDbxCleint.dll 添加到你的项目中。
Using the Code
文件 spClass
包含 2 个类
spClass
包含两个方法(1 个重载)axUsu
包含八个方法(创建是为了理解这个驱动程序如何工作)
spClass
方法是那些获取 TAdoDbxCommand
的方法(获取连接并发送一个简单的查询)。 getDataIB
获取查询的结果(例如 SELECT * FROM
...)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Borland.Data;
using Borland.Vcl;
using Borland.Data.Units;
using System.Data.SqlClient;
using System.Data.Common;
class spClass
{
public static TAdoDbxCommand getComdIB()
{
//The string connection can change
TAdoDbxConnection c = new TAdoDbxConnection(
"DriverName=Interbase;Database=192.168.1.101:C:\\" +
"Farmacia\\Farmacia.gdb;RoleName=RoleName;User_Name=sysdba;" +
"Password=masterkey;SQLDialect=3;" +
"MetaDataAssemblyLoader=Borland.Data.
TDBXInterbaseMetaDataCommandFactory," +
"Borland.Data.DbxReadOnlyMetaData,Version=11.0.5000.0,Culture=neutral," +
"PublicKeyToken=91d62ebb5b0d1b1b;GetDriverFunc=getSQLDriverINTERBASE;" +
"LibraryName=dbxint30.dll;VendorLib=GDS32.DLL");
TAdoDbxCommand cmd = new TAdoDbxCommand();
cmd.Connection = c;
return cmd;
}
public static TAdoDbxCommand getComdIB(string query)
{
TAdoDbxConnection c = new TAdoDbxConnection(
"DriverName=Interbase;Database=192.168.1.101:C:\\Farmacia\\" +
"Farmacia.gdb;RoleName=RoleName;User_Name=sysdba;Password=masterkey;" +
"SQLDialect=3;MetaDataAssemblyLoader=" +
"Borland.Data.TDBXInterbaseMetaDataCommandFactory," +
"Borland.Data.DbxReadOnlyMetaData,Version=11.0.5000.0," +
"Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b;" +
"GetDriverFunc=getSQLDriverINTERBASE;LibraryName=dbxint30.dll;" +
"VendorLib=GDS32.DLL");
TAdoDbxCommand cmd = new TAdoDbxCommand();
cmd.Connection = c;
cmd.CommandText = query;
return cmd;
}
public static DataTable getDataIB(DbCommand cmd)
{
cmd.Connection.Open();
DbDataReader myreader = cmd.ExecuteReader();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
ds.Load(myreader, LoadOption.PreserveChanges, ds.Tables[0]);
myreader.Close();
return ds.Tables[0];
}
}
现在我们已经完成了获取 IBCommand
和一个 Datatable
的基本方法。
axUsu
类包含插入、删除、更新、从远程服务器上名为 Farmacia.dgb 的数据库获取用户的方法,但我们可以专注于一个方法:Insert method(addUsr)
public void addUsr(string usr, string pwd, string nombre, string nivel)
{
string query = "INSERT INTO USUARIOS(USR, PWD, NOMBRE, NIVEL)"
+ "VALUES(" + usr + "," + pwd + "," + nombre + "," + nivel + ")";
TAdoDbxCommand cmd = spClass.getComdIB(query);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}
在这个方法中,我们可以识别一个名为 cmd
的 TAdoDbxCommand
对象,它有一个来自 spClass.getComdIB(query)
的初始值。 这意味着调用该方法并获取具有连接和 commandText
属性初始化的 cmd
对象。 然后打开连接,执行查询并关闭连接,我们已经成功地进行了一个查询。
如果我们要在一个 Windows 窗体中获取名为 users 的表中的所有用户,我们可以通过编写此代码来获取它们
axUsu users = new axUsu();
DataTable UsAll= users.getUsrAll();
dataGridView1.DataSource = UsAll;
Insert 方法
axUsu addUsr = new axUsu();
addUsr.addUsr("User1",axUsu.cifrarSHA1("Password"), "Name", 1);
当我们完成了这些方法后,这很容易。 我希望它会有用。
历史
- 2008 年 6 月 11 日:初始发布