【问题标题】:How to connect to MySQL Database?如何连接到 MySQL 数据库?
【发布时间】:2014-03-04 06:58:04
【问题描述】:

C# 编程新手,我希望能够访问MySQL 数据库。

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

更新:
最终用户都需要它们还是只是连接器?
他们还需要什么?

【问题讨论】:

  • 是的,您需要做的就是将 DLL 与您的程序一起打包,当您运行程序时,它应该已经在您的输出调试/发布文件夹中。
  • 注意:MySQL for Visual Studio 在 VS2010E 中不工作
  • 至于@EnriqueSanMartín Version 2.0Version 1.2 的上述注释已删除对 Microsoft Visual Studio 2010 的支持
  • 如果您需要通过 SSH 而不是直接在端口 3306 上连接到 MySQL,请参见此处stackoverflow.com/questions/10806799/…

标签: c# mysql nuget-package mysql-connector


【解决方案1】:

安装 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; }

        private 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();
}

【讨论】:

  • 如果您可能会遇到互联网连接问题,并且您想尝试直到连接成功,这是行不通的。删除if (_instance == null) 行。还要默认设置bool result = false,因为它可能没有连接互联网连接问题和许多其他问题,不仅因为不会设置数据库名称。在那种情况下if (String.IsNullOrEmpty(databaseName)) return false; 因为它只会抛出异常,否则甚至可能返回不正确的 true。但是,赞成,感谢干净的代码。
  • 为什么你有一个带有私有构造函数的“循环”引用? (new DBConnection();private DBConnection()
  • 您必须在 DBConnection.Close() 上执行 connection = null,因为它是单例的,您可能想再次使用它
  • 这很好开始!我已经对public bool IsConnect() 进行了一些扩展。要重用连接,在if 语句之后:else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); } 在您的应用程序中,您可以在之前的查询后关闭它之后再次执行dbCon.IsConnect()。所以不要像 Roman 建议的那样在DBConnection.Close() 中做connection = null;,否则重用将不起作用。
  • 很好的答案,但我如何连接到某个端口。我的网络是开发、测试和实时数据都在同一台服务器上,但在不同的端口上。我怎样才能只连接到 1 个端口。
【解决方案2】:

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

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

PM> Install-Package MySql.Data

NuGet MySql.Data

【讨论】:

  • 如果您通过“管理 NuGet 包”窗口搜索它,请记住包名称区分大小写。对于来自使用小写名称的包管理器的人来说,这可能不是一件显而易见的事情。
【解决方案3】:

您必须从here 下载 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

如果您想了解更多信息,请访问:enter link description here

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

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();
    }
  }

}

【讨论】:

    【解决方案4】:

    看下面的代码,我试了一下,发现: 而不是写DBCon = DBConnection.Instance();,你应该写DBConnection DBCon - new DBConnection();(这对我有用)

    你应该输入MySqlCommand cmd = new MySqlCommand(query, DBCon.GetConnection());而不是MySqlComman cmd = new MySqlComman(query, DBCon.GetConnection());(它缺少d)

    【讨论】:

      【解决方案5】:

      另一个需要考虑的库是 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);
            }
        

        【讨论】:

        猜你喜欢
        • 2020-11-20
        • 2015-11-13
        • 2015-10-31
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        相关资源
        最近更新 更多