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

使用 C# 和 Mono.NET 连接 MySQL

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (13投票s)

2005年7月4日

4分钟阅读

viewsIcon

183730

downloadIcon

2749

一篇关于从 Mono 连接和使用 MySQL 的文章。

Windows XP Version

引言

大多数程序都需要某种数据库连接。可能是用于存储数据、设置或许可证详细信息。如果您习惯在 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 上使用 KateEmacs 文本编辑器。在 Windows 上,我推荐 SharpDevelopVisual 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 日。
© . All rights reserved.