Firebird ADO.NET 客户端 2.5 入门教程






4.82/5 (27投票s)
在本文中,我将向您展示如何使用 Firebird ADO.NET 客户端 2.5 将您的简单 C# 应用程序与 FirebirdSQL 服务器进行接口。
引言
Firebird 是一个 开源 关系数据库管理系统,运行在 Linux、Windows 以及各种 Unix 平台上。 它是一个小巧轻量级的 RDBMS,除了完全免费之外,还完全支持 存储过程 和 并且 ACID 兼容(当然也支持标准 SQL)并具有引用完整性。
您之所以阅读本文,可能是因为您是一位在脑海中有很多 SQL 的 Windows 开发者,但您的钱包里没有足够的钱购买完整的 SQL 服务器许可证,而且 SQL Server Express 的物理限制令人绝望。好吧,让我给您一线希望。
你需要什么
- FirebirdSQL Server 2.5
- Firebird ADO.NET 客户端 2.5
- Visual Studio 2008(Express 版即可)或任何其他 C# IDE,如 SharpDevelop
- FlameRobin [这只是一个数据库管理 GUI 工具,是可选的]
去年年底,当我发现并开始使用 Firebird ADO.NET 客户端时,我停止在我所有的 Windows 应用程序中使用 SQL Server Express。我只是觉得它的大小有问题……根据您的选择,安装后约为 90-500MB,但仅限于 4GB 的物理存储(每个数据库)。我必须说,使用 MySQL 及其 .NET 连接器还算可以,但 MySQL 仍然是一个庞大的 RDBMS,与 Firebird 相比。然后出现了 Firebird,Windows 安装程序仅约 6MB,存储容量高达 64TB(这是一个假设的估计……但意味着实际值就在那个范围附近!)。我想它与 Delphi 搭配得很好,但并不是很多人喜欢使用 Object Pascal(对不起 Codegear,但 Delphi 代码看起来很滑稽),更不用说有机会了。坦率地说,要感谢 Microsoft 的那些家伙,因为他们仍然有将 Windows 应用程序与他们的 SQL Server 进行接口的最简单方法;这可能就是为什么许多开发者在 .NET 平台上工作时使用 SQL Server 的原因。
然后出现了 Firebird ADO.NET 客户端
本文旨在向您介绍 Firebird ADO.NET 客户端,目前已发布第 2.5 版!我喜欢他们将每个类的名称都保持大体相似。下面将展示 `System.Data.Sqlclient` 命名空间中常用类及其在 `FirebirdSql.Data.FirebirdClient` 命名空间中的对应关系的一个示例。
SqlConnection()
变为FbConnection()
SqlCommand()
变为FbCommand()
SqlDataReader()
变为FbDataReader()
,依此类推。
我们开始吧
安装 Firebird 2.5 后,默认用户名将是 *sysdba*,密码将是 *masterkey*。Firebird 安装文件夹的 *docs* 目录中有一个非常好的快速入门指南 [我的路径是 *C:\Program Files\Firebird\Firebird_2_5\doc\ Firebird-2.1-QuickStart.pdf*]。您可以添加用户、修改密码等。您可以使用随安装一起提供的特殊 **gsec** 工具来完成此操作。但是,您不想在命令行开始创建表,对吧?这就是为什么我推荐第三方 GUI 工具的原因。我总是喜欢使用鼠标并看到您正在做什么。我选择的 GUI 工具名为 **FlameRobin**。它是一个用 C++ 编写的简单、非常小的应用程序,可让您创建数据库、注册它们、添加表、管理用户等等。现在,如果您使用的是 SQL Server 的 Management Studio 或 Visual Studio 2008,您可能已经习惯了无需编写 SQL 来创建表,因为它们允许您打开项目中的 *.mdf* 文件并单击几下鼠标即可添加表。使用 FlameRobin,您将不得不使用 SQL 创建表。这应该不难。您也可以迁移 SQL Server 中的表,我将在最后告诉您。
对于我们将要使用的表,我已经包含在 zip 压缩包中。如果您要完全使用我的项目,您将需要将 *sysdba* 密码更改为“12345”,当然,不包括引号。
接下来,您将安装 **Firebird ADO.NET 客户端**,它只有 320KB……对于一个实际上只包含两个 DLL 的包来说,这并不奇怪。
如果您在跟随教程创建自己的项目,请将 *FirebirdSql.Data.FirebirdClient.dll* 添加到 *C:\Program Files\FirebirdClient 2.0*(或您安装它的任何位置)作为您项目的引用,然后添加
using FirebirdSql.Data.FirebirdClient
以上语句到您的代码开头。
我假设您之前已经使用过 SQL Server,以及 VC# 或 VC++ .NET 或 VB.NET,并且知道如何将数据从表单添加到数据库。在我们的项目中,我们已经创建了(您应该创建)一个名为 `Details` 的表,其中包含 `Name`、`Age` 和 `Sex` 列(请使用我在源代码中包含的查询),在一个名为 *UsingFirebird.fdb* 的数据库中,位于 *C:\*。我们只会向这些列添加详细信息。在遵循上述安装步骤后,Firebird 的过程几乎完全相同。您只需键入“Fb…”来查找您想要的类,IntelliSense 功能将为您显示所有可用的类。您正在寻找的任何类很可能都在那里;我并没有穷尽所有类,但我已经翻译了我的一些大型项目。
但是,让我们看看现在最重要的功能。
Firebird ADO.NET 客户端连接字符串
在您可以对数据库执行任何其他操作之前,您必须有一个正确的连接字符串。我花了很长时间才弄清楚连接字符串必须如何编写。而且,互联网上有很多令人困惑的线索。我写这篇文章的主要原因是为了提供一个集中解决许多简单问题的中心。查看“提交”按钮事件处理程序中的代码
void SubmitButtonClick(object sender, EventArgs e)
{
try
{
string ConnectionString = "User ID=sysdba;Password=12345;" +
"Database=localhost:C:\\USINGFIREBIRD.FDB; " +
"DataSource=localhost;Charset=NONE;";
请注意“User ID
”中的空格以及“localhost:C:\\
”的说明。与 SQL Server 一样,还有许多其他高级选项可以包含在此 string
中……只需在您添加的每个设置后加上分号。与 SQL Server 不同,Firebird 数据库必须始终进行服务器身份验证。存在其他方式,但这正是我推荐的编写连接字符串的技术。
FbConnection addDetailsConnection = new FbConnection(ConnectionString);
addDetailsConnection.Open();
FbTransaction addDetailsTransaction =
addDetailsConnection.BeginTransaction();
string SQLCommandText = " INSERT into Details Values"+
"('"+ NameBox.Text+
"',"+Int32.Parse(AgeBox.Text)+
","+"'"+SexBox.Text+"')";
FbCommand addDetailsCommand = new FbCommand(SQLCommandText,
addDetailsConnection,addDetailsTransaction);
addDetailsCommand.ExecuteNonQuery();
addDetailsTransaction.Commit();
MessageBox.Show(" Details Added");
//as you can see, the procedure is exactly the same.
}
catch(Exception x)
{
MessageBox.Show(x.Message);
}
为了进一步向您证明您没有什么新东西需要学习,请看当我们要删除已添加的项目时 `FbDataReader()` 类的可能实现。我们将在 `FormDelete` 加载时填充组合框。请注意,在 *FormDelete.cs* 中,`ConnectionString` 变量已在方法外部声明,以扩大其范围。这样,您就不必每次都编写它了。
void FormDeleteLoad(object sender, EventArgs e)
{
FbConnection deleteConnection = new FbConnection(ConnectionString);
try
{
deleteConnection.Open();
// declare command
FbCommand readCommand =
new FbCommand("Select * From Details", deleteConnection);
FbDataReader myreader= readCommand.ExecuteReader();
while(myreader.Read())
{
// load the combobox with the names of the people inside.
// myreader[0] reads from the 1st Column
DeleteComboBox.Items.Add(myreader[0]);
}
myreader.Close(); // we are done with the reader
}
catch(Exception x)
{
MessageBox.Show(x.Message);
}
finally
{
deleteConnection.Close();
}
}
关注点
Firebird 的异常消息尚未完全开发。我被“No message for error code 335544755”这样的消息激怒了!嗯,关于 Firebird 错误代码有一些还不错的文档,您可以在 这里找到。
我在 `FbDataReader` 在同一源文件中被调用多次时遇到了一些问题……就好像第一次使用它时它没有完全关闭一样。
最后
那么,下一步是什么?看看您在第一次使用接口表单与 SQL Server 交互时设计的第一个项目。尝试将其进行转换。如果它是一个多文档表单,您可以考虑先只对接几个表单,然后小心地进行。您实际上会意识到,与 SQL Server 相比,使用 FirebirdSQL 时,表单添加详细信息的速度和 `DataGridView` 加载数据的速度似乎更快。
您可以 点击此链接 查看如何将您的 SQL 数据迁移到 Firebird。
请注意,Firebird ADO.NET 客户端 2.5,即使其功能齐全,仍然是一个预发布版本。因此,它可能不适合任务关键型项目。
尽管如此,它还是一个非常有用的项目。您不再需要花费 14,000 美元购买一个功能齐全的 RDBMS 来与 Visual Studio 配合使用。对于您一直以来所做的工作,让比尔大叔休息一下吧。享受那个(几乎)无限物理存储的小型服务器……绝对值得您尝试。为自由软件基金会点赞(.db?!!!!)。
历史
- 2009年2月25日:初次发布
- 2009年3月20日:文章更新