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

从 Visual C# 连接到 MySQL

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (27投票s)

2007 年 12 月 7 日

CPOL

4分钟阅读

viewsIcon

170022

downloadIcon

2165

使用 Visual C# 2008 连接 MySQL 5.1 数据库,并使用 MySQL Connector/NET 5.1.7

引言

本文的主要目的是分享代码,并介绍使用 C# 创建和连接 MySQL 数据库的一些基本原理。您可能会找到许多使用 ODBC 驱动程序连接 MySQL 数据库的示例,但在这里我们将使用 MySQL Connector/NET 5.1.7。使用的 DBMS 是 MySQL Server 5.1.31 社区版。

正如您可能已经知道的,MySQL 是互联网上最广泛使用的开源关系数据库管理系统之一。它速度快、易于使用且免费。您可以 在此处 下载。如果您是第一次下载 MySQL,请同时下载 MySQL GUI Tools,最重要的是,下载 MySQL Connector/NET 5.1,它将允许您从 C# 连接到您创建的任何 MySQL 数据库。如果您在安装方面需要帮助,请按照网站上提供的说明进行操作。

在 MySQL 中创建数据库

我将简要说明如何创建一个简单的数据库。首先,启动 MySQL 命令行客户端,然后输入在安装过程中设置的密码。之后,您会在窗口中看到 mysql> 命令提示符。尝试输入以下命令,看看会发生什么

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

mysql> 

这指示 MySQL 列出您的用户会话拥有权限的所有数据库。现在让我们输入以下命令来创建数据库

mysql> CREATE DATABASE shop;
Query OK, 1 row affected (0.00 sec)

mysql> USE shop;
Database changed
mysql> CREATE TABLE article (
    ->   article_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ->   article_name VARCHAR(50),
    ->   article_price DOUBLE(16, 2),
    ->   PRIMARY KEY (article_id)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> DESCRIBE article;
+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| article_id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| article_name  | varchar(50)      | YES  |     | NULL    |                |
| article_price | double(16,2)     | YES  |     | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+
3 rows in set (0.05 sec)

mysql> INSERT INTO article (article_name, article_price)
    -> VALUES ('PhotoPC XYZ Camera', 899.00);
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM article;
+------------+--------------------+---------------+
| article_id | article_name       | article_price |
+------------+--------------------+---------------+
|          1 | PhotoPC XYZ Camera |        899.00 |
+------------+--------------------+---------------+
1 row in set (0.00 sec)

mysql> 

这里需要注意几点:创建数据库后,默认情况下它不会被选中;我们需要使用 USE <database-name> 语句显式选择它。我们一次输入一个命令。

对于表创建,我在这里使用的约定是:(1) 表名使用单数;(2) 列名使用小写字符;(3) 列名中的单词用下划线分隔;(4) 每个字段都以其所属的表名作为前缀;(5) 主键的命名方式是在表名后附加 "_id"。您还将看到我用于描述表结构、向表中插入数据和查询表的其他命令。

MySQL 中的存储过程不允许使用 USE 语句,因为它们只在其创建的数据库中运行。SELECT DATABASE() 语句用于确保我们正在使用 shop 数据库。实际上,这并不是选择要使用的数据库。在编写存储过程时,我们还需要指定一个分隔符,因为行是以分号结尾的。

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| shop       |
+------------+
1 row in set (0.00 sec)

mysql> DELIMITER $$
mysql> CREATE PROCEDURE append_data
    ->   (IN param_name VARCHAR(50), IN param_price DOUBLE(16, 2))
    ->   BEGIN
    ->     DECLARE var_name VARCHAR(50);
    ->     DECLARE var_price DOUBLE(16, 2);
    ->     SET var_name = param_name;
    ->     SET var_price = param_price;
    ->     INSERT INTO article (article_name, article_price)
    ->       VALUES (var_name, var_price);
    ->   END; $$
Query OK, 0 rows affected (0.08 sec)

mysql> DELIMITER ;
mysql> CALL append_data ('ABC 1200 Scanner', 299.00);
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM article;
+------------+--------------------+---------------+
| article_id | article_name       | article_price |
+------------+--------------------+---------------+
|          1 | PhotoPC XYZ Camera |        899.00 |
|          2 | ABC 1200 Scanner   |        299.00 |
+------------+--------------------+---------------+
2 rows in set (0.00 sec)

mysql>

现在我们可以开始用 C# 编码了。在下一节中,我将向您展示如何构建连接字符串以建立到数据库的连接。

从 C# 连接到数据库

让我们能够在 C# 中使用任何 MySQL 数据库中的数据,这需要引用 MySql.Data 程序集,它在 MySQL Connector/NET 安装后会注册到全局程序集缓存中。首先,在 Visual C# 中创建一个新的控制台应用程序项目。您可以将其命名为 MySQLDBConnection 或您决定的任何名称。现在,在 Visual C# IDE 中的解决方案资源管理器中,右键单击“引用”文件夹,然后选择“添加引用...”,如下图所示

在出现的“添加引用”对话框中,从列表中选择“MySQL.Data”项

现在,完成此操作后,我们必须在 Visual C# IDE 中将 using MySql.Data.MySqlClient 语句添加到我们的代码中

下面是执行从 C# 连接到任何 MySQL 数据库所需的基本代码行

using System;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;

namespace MySQLDBConnection
{
    class Program
    {
        static void Main(string[] args)
        {
            MySqlConnectionStringBuilder connBuilder = new MySqlConnectionStringBuilder();

            connBuilder.Add("Database", "shop");
            connBuilder.Add("Data Source", "localhost");
            connBuilder.Add("User Id", "root");
            connBuilder.Add("Password", "masterkey");

            MySqlConnection connection = new MySqlConnection(connBuilder.ConnectionString);

            MySqlCommand cmd = connection.CreateCommand();

            connection.Open();

            // Here goes the code needed to perform operations on the
            // database such as querying or inserting rows into a table

            connection.Close();
        }
    }
}

请注意,我选择使用 MySqlConnectionStringBuilder 类,而不是将所有连接项放入一个单独的字符串中。这提高了代码的可读性和可维护性。

首先,我们通过将 MySql.Data.MySqlClient 命名空间添加到我们的代码中来开始。然后,我们创建一个 MySqlConnectionStringBuilder 实例,并添加数据库名称、数据源、用户 ID 和密码的名称/值对。之后,我们创建一个 MySqlConnection 类的实例,并将 MySqlConnectionStringBuilder 实例中的 ConnectionString 作为参数传递。

让我们在 Program 类中创建以下两个方法。一个用于读取我们正在处理的表的内容,另一个用于向表中追加新数据。

public static void QueryCommand(MySqlCommand cmd)
{
    cmd.CommandText = "SELECT * FROM article";
    cmd.CommandType = CommandType.Text;

    MySqlDataReader reader = cmd.ExecuteReader();

    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}, {1}, {2}",
            reader.GetInt32(0), reader.GetString(1), reader.GetDouble(2))
        );
    }

    reader.Close();
}

public static void InsertCommand(MySqlCommand cmd, string name, double price)
{
    cmd.CommandText = "append_data";
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add(new MySqlParameter("param_name", name));
    cmd.Parameters.Add(new MySqlParameter("param_price", price));

    cmd.ExecuteNonQuery();
}

现在,让我们在 connection.Open()connection.Close() 语句之间添加一些代码来执行一些基本的数据库操作。

InsertCommand(cmd, "MQ95 Flat Monitor", 399.00);
QueryCommand(cmd);

关注点

我决定写这篇文章,是因为几周前我开始寻找类似的东西,但找不到任何能教我需要知道的东西的例子。我必须说,MySQL 在某些方面很容易使用,特别是与其他免费提供的商业 DBMS 轻量级版本相比。我在这里提供的代码还有一些可以改进的地方,但我希望这个例子尽可能简单。

历史

文章最初写于 2007 年 11 月 30 日。

© . All rights reserved.