如何连接MySQL数据库?

106

我刚开始学习C#编程,想要访问 MySQL 数据库。

我知道在C#开发中需要使用 MySQL connector/NETMySQL for Visual Studio
我需要将它们安装到我的应用程序中吗?
是否可以只发布连接器DLL文件而不安装它们?

更新:
终端用户需要同时安装这两个东西吗?还是只需要连接器?
还需要安装其他什么东西吗?


4
是的,你只需要将DLL和程序一起打包,当你运行程序时,它应该已经在输出的debug/release文件夹中了。 - ohmusama
注意:MySQL for Visual Studio不适用于VS2010E。 - Enrique San Martín
关于@EnriqueSanMartín的上述注释版本2.0版本1.2,_不再支持Microsoft Visual Studio 2010_。 - Curiosity
如果您需要通过SSH连接MySQL而不是直接在3306端口上连接,请参阅此处:https://dev59.com/fGgv5IYBdhLWcg3wKtlB - Matthew Lock
6个回答

120
安装Oracle的MySql.Data NuGet包。
using MySql.Data;
using MySql.Data.MySqlClient;

namespace Data
{
    public class DBConnection
    {
        private DBConnection()
        {
        }

        public string Server { get; set; }
        public string DatabaseName { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }

        public MySqlConnection Connection { get; set;}

        private static DBConnection _instance = null;
        public static DBConnection Instance()
        {
            if (_instance == null)
                _instance = new DBConnection();
           return _instance;
        }
    
        public bool IsConnect()
        {
            if (Connection == null)
            {
                if (String.IsNullOrEmpty(databaseName))
                    return false;
                string connstring = string.Format("Server={0}; database={1}; UID={2}; password={3}", Server, DatabaseName, UserName, Password);
                Connection = new MySqlConnection(connstring);
                Connection.Open();
            }
    
            return true;
        }
    
        public void Close()
        {
            Connection.Close();
        }        
    }
}

例子:

var dbCon = DBConnection.Instance();
dbCon.Server = "YourServer";
dbCon.DatabaseName = "YourDatabase";
dbCon.UserName = "YourUsername";
dbCon.Password = "YourPassword";
if (dbCon.IsConnect())
{
    //suppose col0 and col1 are defined as VARCHAR in the DB
    string query = "SELECT col0,col1 FROM YourTable";
    var cmd = new MySqlCommand(query, dbCon.Connection);
    var reader = cmd.ExecuteReader();
    while(reader.Read())
    {
        string someStringFromColumnZero = reader.GetString(0);
        string someStringFromColumnOne = reader.GetString(1);
        Console.WriteLine(someStringFromColumnZero + "," + someStringFromColumnOne);
    }
    dbCon.Close();
}

4
如果您可能会面临互联网连接问题,并且希望尝试连接,直到连接成功,那么这种方法行不通。请删除“if (_instance == null)”这一行。同时将“bool result = false”默认设置为false,因为它可能由于网络连接问题和其他原因而无法连接,而不仅仅是因为未设置数据库名称。在这种情况下,“if (String.IsNullOrEmpty(databaseName)) return false;”,否则程序会抛出异常,甚至可能返回true,这是不正确的。不过,我对您简洁干净的代码表示赞赏。 - Brackets
3
为什么你的代码中会有一个“循环引用”,并且其中包含一个私有构造函数?(new DBConnection();private DBConnection()) - Soleil
3
这很适合入门!我已经对 public bool IsConnect() 进行了一些扩展。为了重复使用连接,在 if 语句之后: else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); } 在先前的查询中关闭后,您可以再次执行 dbCon.IsConnect()。 因此,在 DBConnection.Close() 中不要像Roman建议的那样执行 connection = null;,否则重用将无法工作。 - Larphoid
Error CS0103 The name 'databaseName' does not exist in the current context - Alex G
"MySqlConnection Connection" 属性需要设置为 public 才能访问。 - KBNanda
显示剩余2条评论

56

您可以使用包管理器将其添加为软件包,这是最简单的方法。您不需要任何其他东西来处理MySQL数据库。

或者您可以在包管理器控制台中运行此命令:

PM> Install-Package MySql.Data

NuGet MySql.Data


如果您通过“管理NuGet包”窗口搜索它,请记住包名称是区分大小写的。对于那些来自小写名称的软件包管理器的人来说,这可能不是一个显而易见的事情。 - Dimitry K
1
谢谢,这是非常微小的细节,所以如果有人想要检查连接MySQL的完整逐步过程,请查看以下链接: https://qawithexperts.com/article/c-sharp/mysql-connection-in-c-console-application-example/321 - user13993546

18

您需要从此处下载MySQLConnection NET。

然后,您需要像这样将MySql.Data.DLL添加到MSVisualStudio中:

  1. 打开项目菜单
  2. 添加
  3. 引用
  4. 浏览到C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.12\Assemblies\v4.5.2
  5. 添加 MySql.Data.dll

如果您想了解更多信息,请访问:此链接

要在代码中使用,您必须导入库:

using MySql.Data.MySqlClient;

通过点击事件与Mysql数据库(非SSL模式)建立连接的示例:

using System;
using System.Windows;
using MySql.Data.MySqlClient;


namespace Deportes_WPF
{

public partial class Login : Window
{
    private MySqlConnection connection;
    private string server;
    private string database;
    private string user;
    private string password;
    private string port;
    private string connectionString;
    private string sslM;

    public Login()
    {
        InitializeComponent();

        server = "server_name";
        database = "database_name";
        user = "user_id";
        password = "password";
        port = "3306";
        sslM = "none";

        connectionString = String.Format("server={0};port={1};user id={2}; password={3}; database={4}; SslMode={5}", server, port, user, password, database, sslM);

        connection = new MySqlConnection(connectionString);
    }

    private void conexion()
    {
        try
        {
            connection.Open();

            MessageBox.Show("successful connection");

            connection.Close();
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message + connectionString);
        }
    }

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        conexion();
    }
  }

}

1
我喜欢方法名conexion - Arkyo

3
看下面的代码,我尝试了一下发现: 将 DBCon = DBConnection.Instance(); 改成 DBConnection DBCon - new DBConnection(); (这个对我有效)。
而将 MySqlComman cmd = new MySqlComman(query, DBCon.GetConnection()); 修改为 MySqlCommand cmd = new MySqlCommand(query, DBCon.GetConnection());(d漏写了)。

1

另一个需要考虑的库是MySqlConnector,https://mysqlconnector.net/。Mysql.Data使用GPL许可证,而MySqlConnector使用MIT许可证。


-6
 private void Initialize()
    {
        server = "localhost";
        database = "connectcsharptomysql";
        uid = "username";
        password = "password";
        string connectionString;
        connectionString = "SERVER=" + server + ";" + "DATABASE=" + 
        database + ";" + "U`enter code here`ID=" + uid + ";" + "PASSWORD=" + password + ";";

        connection = new MySqlConnection(connectionString);
    }

16
你把这个从http://www.codeproject.com/Articles/43438/Connect-C-to-MySQL复制过来了。这已经是“bout Hamed Shams”的答案了。 - Elmue
我同意,@Elmue - - Momoro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接