如何连接MySQL数据库?

use*_*097 74 c# mysql database mysql-connector

我是C#编程的新手,但希望能够访问MySQL数据库(没有MS SQL的钱)

但是我有一个问题; 我知道你需要有"MySQL连接器/ NET"和"用于Visual Studio的MySQL"来开发C#应用程序,但安装应用程序的人是否也需要它们?(我可以用程序释放连接器DLL吗?)

谢谢

编辑:最终用户或连接器都需要它们吗?还有什么他们需要的吗?

小智 79

using MySql.Data;
using MySql.Data.MySqlClient;

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

        private string databaseName = string.Empty;
        public string DatabaseName
        {
            get { return databaseName; }
            set { databaseName = value; }
        }

        public string Password { get; set; }
        private MySqlConnection connection = null;
        public MySqlConnection Connection
        {
            get { return connection; }
        }

        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=localhost; database={0}; UID=UserName; password=your password", databaseName);
                connection = new MySqlConnection(connstring);
                connection.Open();
            }

            return true;
        }

        public void Close()
        {
            connection.Close();
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

例:

var dbCon = DBConnection.Instance();
dbCon.DatabaseName = "YourDatabase";
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();
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您可能遇到互联网连接问题,并且您想尝试直到连接,这将无法正常工作.删除`if(_instance == null)`行.默认情况下还要生成`bool result = false`,因为它可能没有连接互联网连接问题和其他许多其他问题,不仅因为数据库名称不会被设置.在那种情况下`if(String.IsNullOrEmpty(databaseName))返回false;`因为它只会抛出异常,甚至可能返回true,这是不正确的.但是,感谢uplist,感谢干净的代码. (3认同)
  • 为什么你有一个带有私有构造函数的“循环”引用?(`new DBConnection();` 和 `private DBConnection()`) (3认同)
  • 这是很好的开始!我已经对“public bool IsConnect()”进行了一些扩展。要重用连接,请在 `if` 语句之后: `else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); 在您的应用程序中,您可以在上次查询后关闭它后再次执行“dbCon.IsConnect()”。因此,不要像 Roman 建议的那样在“DBConnection.Close()”中执行“connection = null;”,否则重用将不起作用。 (3认同)

Dam*_*ith 49

您可以使用程序包管理器将其添加为程序包,这是最简单的方法.你不需要任何其他东西来使用mysql数据库.

或者您可以在Package Manager Console中运行以下命令

PM> Install-Package MySql.Data
Run Code Online (Sandbox Code Playgroud)

NUGET Mysql.Data


Ser*_*rez 8

您必须从此处下载MySQLConnection NET

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

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

如果您想了解更多信息,请访问:在此处输入链接描述

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

using MySql.Data.MySqlClient;
Run Code Online (Sandbox Code Playgroud)

通过Click事件连接到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();
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢方法名称“conexion” (2认同)