快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

从Visual C#连接到MySQL

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

介绍

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

图片2

您可能已经知道,MySQL是Internet上使用最广泛的开源关系数据库管理系统之一。它快速,易于使用且免费。可以在这里下载 。如果这是您第一次下载MySQL,请同时下载MySQL GUI工具,最重要的是,下载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()声明是确保我们在使用店铺数据库。实际上,这不是选择要使用的数据库。编写存储过程时,我们还需要指定定界符,因为行以分号结尾。

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#中创建一个新的Console Application项目。您可以将其称为MySQLDBConnection或您决定的任何名称。现在,在Visual C#IDE中的解决方案资源管理器中,右键单击References文件夹,然后选择Add Reference …,如下所示:

图片3

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

图片4

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

图片5

在下面,您将找到执行从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类,我们通过 ConnectionString我们的MySqlConnectionStringBuilder实例作为参数。

让我们在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轻型版本进行比较时。我在这里提供的代码可以做一些改进,但是我想使这个示例尽可能简单。

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1922638