Làm thế nào để kết nối với Cơ sở dữ liệu MySQL?


85

Tôi rất mới lập trình C # nhưng muốn có thể truy cập Cơ sở dữ liệu MySQL (không có tiền cho MS SQL)

Tuy nhiên tôi có một câu hỏi; Tôi biết bạn bắt buộc phải có "MySQL connector / NET" và "MySQL for Visual Studio" để phát triển ứng dụng C #, nhưng liệu người cài đặt ứng dụng có yêu cầu chúng không? (Có thể tôi chỉ phát hành DLL kết nối với chương trình không?)

Cảm ơn

CHỈNH SỬA: Cả hai đều được yêu cầu cho người dùng cuối hay chỉ người kết nối? Có điều gì khác họ sẽ cần không?


3
Có, tất cả những gì bạn cần làm là đóng gói chương trình DLL với bạn, nó phải nằm trong thư mục gỡ lỗi / phát hành đầu ra của bạn khi bạn chạy chương trình của mình.
ohmusama

Lưu ý: MySQL cho Visual Studio không hoạt động trong VS2010E
Enrique San Martín

Đối với ghi chú ở trên của @ EnriqueSanMartín Phiên bản 2.0Phiên bản 1.2 Hỗ trợ cho Microsoft Visual Studio 2010 đã bị xóa .
Curiousity

Câu trả lời:


96

Cài đặt MySql.Datagói NuGet của Oracle .

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

Thí dụ:

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

3
Nếu bạn có thể gặp phải sự cố kết nối internet và bạn muốn thử cho đến khi kết nối được, cách này sẽ không hoạt động. Xóa if (_instance == null)dòng. Cũng đặt bool result = falsetheo mặc định vì nó có thể không được kết nối vì các sự cố kết nối internet và nhiều vấn đề khác trên thực tế, không chỉ vì tên cơ sở dữ liệu không được đặt. Trong trường hợp if (String.IsNullOrEmpty(databaseName)) return false;đó vì nó sẽ chỉ ném ra một ngoại lệ nếu không và thậm chí có thể trả về true mà sẽ không đúng. Tuy nhiên, đã ủng hộ, cảm ơn vì mã sạch.
Dấu ngoặc

1
Tại sao bạn có một tham chiếu "vòng tròn" với một phương thức khởi tạo riêng? ( new DBConnection();private DBConnection())
Soleil - Mathieu Prévot

Bạn sẽ phải làm connection = nulltrên DBConnection.Close()vì nó là singleton và bạn có thể muốn sử dụng nó một lần nữa
La Mã

1
Đây là điều tuyệt vời để bắt đầu! Tôi đã mở rộng một chút public bool IsConnect(). Để sử dụng lại kết nối, sau ifcâu lệnh: else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); }Trong ứng dụng của bạn, bạn chỉ có thể thực hiện dbCon.IsConnect()lại, sau khi bạn đã đóng nó sau một truy vấn trước đó. Vì vậy, đừng làm connection = null;theo DBConnection.Close()như Roman đề xuất, nếu không sử dụng lại sẽ không hiệu quả.
Larphoid

Câu trả lời tuyệt vời, nhưng làm cách nào để kết nối với một cổng nhất định. Mạng của tôi là cả dữ liệu phát triển, kiểm tra và dữ liệu trực tiếp đều nằm trên cùng một máy chủ, nhưng trên các cổng khác nhau. Làm thế nào tôi có thể kết nối với chỉ 1 cổng.
Linux4Life531

54

bạn có thể sử dụng Trình quản lý gói để thêm nó dưới dạng gói và đó là cách dễ nhất để thực hiện. Bạn không cần bất kỳ thứ gì khác để làm việc với cơ sở dữ liệu mysql.

Hoặc bạn có thể chạy lệnh dưới đây trong Bảng điều khiển Trình quản lý Gói

PM> Install-Package MySql.Data

NUGET Mysql.Data


Nếu bạn tìm kiếm nó qua cửa sổ "Quản lý gói NuGet", hãy nhớ rằng tên gói có phân biệt chữ hoa chữ thường . Có thể không phải là một điều hiển nhiên đối với một người nào đó đến từ các trình quản lý gói với tên viết thường.
Dimitry K

13

Bạn phải tải xuống MySQLConnection NET từ đây .

Sau đó, bạn cần thêm MySql.Data.DLLvào MSVisualStudio như thế này:

  1. Mở dự án menu
  2. Thêm vào
  3. Tài liệu tham khảo
  4. Duyệt đến C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.12\Assemblies\v4.5.2
  5. Thêm MySql.Data.dll

Nếu bạn muốn biết thêm hãy truy cập: nhập mô tả liên kết tại đây

Để sử dụng trong mã, bạn phải nhập thư viện:

using MySql.Data.MySqlClient;

Một ví dụ với kết nối với cơ sở dữ liệu Mysql (KHÔNG CÓ CHẾ ĐỘ SSL) bằng sự kiện Nhấp chuột :

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

}

3

Nhìn vào đoạn mã bên dưới, tôi đã thử và thấy: Thay vì viết, DBCon = DBConnection.Instance();bạn nên đặt DBConnection DBCon - new DBConnection();(Điều đó hiệu quả với tôi)

và thay vì MySqlComman cmd = new MySqlComman(query, DBCon.GetConnection());bạn nên đặt MySqlCommand cmd = new MySqlCommand(query, DBCon.GetConnection());(nó thiếu dấu d)



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

15
Bạn đã sao chép này từ codeproject.com/Articles/43438/Connect-C-to-MySQL này đã là câu trả lời từ "cơn Hamed Shams"
Elmue

Tôi đồng ý, @Elmue -
Momoro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.