使用 C# 和 Mono.NET 连接 MySQL






4.74/5 (13投票s)
2005年7月4日
4分钟阅读

183730

2749
一篇关于从 Mono 连接和使用 MySQL 的文章。
引言
大多数程序都需要某种数据库连接。可能是用于存储数据、设置或许可证详细信息。如果您习惯在 Windows 中使用 Visual Studio .NET,通常会使用 ADO.NET 连接到 Access 或 SQL Server,那么您在 Linux 中使用什么呢?在此平台上最常用的数据库是 MySQL,它也适用于 Windows。如果您想创建真正跨平台的应用程序,MySQL 是首选。在本文中,我将演示如何从使用 Mono 的控制台应用程序连接到 MySQL 并创建新数据库。Mono 是 Microsoft .NET Framework、CLR、C# 和 Visual Basic 编译器的开源实现。实际上,您通过本文创建的应用程序将在两个平台上运行而无需修改。
背景
使用 Mono 连接数据库的基础与 Microsoft .NET 中的几乎相同。主要区别在于用于连接和运行命令的数据提供程序。在撰写本文时,我使用的是安装在 SUSE Linux 9.3 Professional 上的最新版本的 Mono 1.1.8。这包括用于 MySQL 的 ByteFX 提供程序。如果您安装了 Mono 1.1.8 的 Windows 安装程序,您可以在 Windows 平台上按照本文操作。您还需要从 MySQL 网站(版本 4.1)或从您的 Linux 发行版介质上 下载的最新免费版本的 MySQL。在 SUSE 9.3 中,这包含在安装中,以及一个 管理应用程序和查询浏览器。
本文假设您具备基本的 SQL 技能,并且知道如何从命令行登录到 MySQL。在安装了 MySQL 和 Mono 之后,使用 Linux 的控制台或 Windows 的命令提示符连接到您的 MySQL 服务器。在 MySQL 提示符下使用以下命令将服务器设置为使用 OLD_PASSWORD 加密。
mysql> SET PASSWORD FOR root@yourserver = OLD_PASSWORD('yourpassword')
如果未能这样做,从您的应用程序连接时将导致协议错误。我使用开源免费 .NET 开发环境 MonoDevelop 编写了本文中的应用程序,但您也可以轻松地在 Linux 上使用 Kate 或 Emacs 文本编辑器。在 Windows 上,我推荐 SharpDevelop、Visual Studio .NET 或记事本。
使用代码
为了使代码尽可能简单,我使用了一个 C# 类文件和一个配置文件。配置文件应放置在应用程序目录中,并命名为您的 exe 文件加上 .config 扩展名,即yourApp.exe.config。
在配置文件中,请按照以下格式设置 MySQL 连接字符串,将 mypassword
替换为您自己的连接密码。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>l;
<appSettings>
<add key="mysqlConnectionString"
value="Server=localhost;User ID=root;password=mypassword;" />
</appSettings>
</configuration>
当然,我们可以将此硬编码到应用程序中,但这是一种良好的编码实践,它允许在不重新编译应用程序的情况下更改服务器。
在您选择的编辑器中创建一个新文件并另存为Main.cs。这将是我们的应用程序源文件。在此文件的最顶部,我们需要导入我们希望在类中使用的命名空间,如下所示
using System;
using System.Configuration;
using ByteFX.Data;
using System.IO;
using System.Reflection;
与任何应用程序一样,我们需要一个入口点类和一个 Main
方法,因此您现在可以像下面这样将此添加到您的类文件中,包括我们将在 Main
函数中使用的一些变量。
class MainClass
{
private static string connectionString = string.Empty;
private static string databaseName = string.Empty;
private static ByteFX.Data.MySqlClient.MySqlConnection mysqlConn;
public static void Main(string[] args)
{
try
{
}
catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
}
}
为了连接到您的 MySQL 数据库,我们现在需要在 Main
函数中添加代码以从配置文件中读取连接字符串。当然,您可以扩展此代码以查看命令行参数,从而在命令行中动态指定连接字符串。
public static void Main(string[] args)
{
try
{
connectionString =
ConfigurationSettings.AppSettings["mysqlConnectionString"].ToString();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
}
为了创建数据库,需要从用户那里获取数据库名称。如果输入了名称,则初始化并打开数据库连接。从下面的代码可以看出,我还添加了一个 finally
块,以确保在应用程序退出之前连接将被关闭并标记为已释放。
public static void Main(string[] args)
{
try
{
connectionString =
ConfigurationSettings.AppSettings["mysqlConnectionString"].ToString();
Console.WriteLine("Please enter a new database name:");
databaseName = Console.ReadLine();
if(databaseName.Length > 0)
{
mysqlConn = new ByteFX.Data.MySqlClient.MySqlConnection();
mysqlConn.ConnectionString = connectionString;
mysqlConn.Open();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
if(mysqlConn != null)
{
mysqlConn.Close();
mysqlConn.Dispose();
}
}
}
下一个代码片段展示了 SQL 脚本的创建以及 MySqlCommand
对象的用法来执行它。如果成功,将告知用户已创建数据库。
...
if(databaseName.Length > 0)
{
mysqlConn = new ByteFX.Data.MySqlClient.MySqlConnection();
mysqlConn.ConnectionString = connectionString;
mysqlConn.Open();
//Create the sql script...
string createdbSql =
string.Format("CREATE DATABASE {0}", databaseName);
using(ByteFX.Data.MySqlClient.MySqlCommand cmd
= new ByteFX.Data.MySqlClient.MySqlCommand(createdbSql, mysqlConn))
{
cmd.ExecuteNonQuery();
Console.WriteLine(string.Format("Database" +
" {0} successfully created", databaseName));
}
}
...
编译代码
本文介绍了如何使用 Mono 或 Microsoft .NET 连接和与 MySQL Server 安装进行交互。要在 IDE 之外编译此代码,请在应用程序目录中的命令窗口中运行以下命令
mcs Main.cs /r:ByteFX.Data /r:Mono.Posix
/r:ICSharpCode.SharpZipLib /out:MySQLConsole.exe
在 Windows 上,使用 Microsoft CLR 运行应用程序,在 Linux 上,使用 su 切换到 root 用户,并在应用程序目录中的命令窗口中运行以下命令
mono MySQLConsole.exe
历史
- 版本 1.0 - 2005 年 6 月 28 日。