65.9K
CodeProject 正在变化。 阅读更多。
Home

Interbase 和 Visual C# .NET

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.52/5 (11投票s)

2008年6月11日

CPOL

2分钟阅读

viewsIcon

57075

downloadIcon

3857

一个用 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 日:初始发布
© . All rights reserved.