Як підключитися до бази даних MySQL?


85

Я дуже новачок у програмуванні на C #, але хотів би мати доступ до баз даних MySQL (у мене немає грошей на MS SQL)

Однак у мене є одне запитання; Я знаю, що для розробки програми C # вам потрібно мати «MySQL Connector / NET» та «MySQL для Visual Studio», але чи вимагає їх також людина, яка встановлює програму? (Чи можливо я можу просто випустити роз'єм DLL із програмою?)

Дякую

РЕДАГУВАТИ: чи потрібні обидва вони для кінцевого користувача чи просто для роз’єму? Чи є ще щось, що їм було б потрібно?


3
Так, все, що вам потрібно зробити, - це упакувати DLL із вашою програмою, вона вже повинна бути у вашій папці налагодження / випуску під час запуску програми.
омусама

Примітка: MySQL для Visual Studio не працює у VS2010E
Енріке Сан-Мартін,

Що стосується наведеної вище примітки @ EnriqueSanMartín версії 2.0 та версії 1.2, підтримку Microsoft Visual Studio 2010 було видалено .
Цікавість

Відповіді:


96

Встановіть MySql.Dataпакет NuGet від 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();
        }        
    }
}

Приклад:

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
Якщо у вас можуть виникнути проблеми з підключенням до Інтернету, і ви хотіли б спробувати, поки не підключитесь, це не буде працювати. Видалити if (_instance == null)рядок. Також зробіть bool result = falseза замовчуванням, оскільки він може бути не підключений через проблеми з підключенням до Інтернету та багато іншого насправді, не тільки тому, що ім'я бази даних не буде встановлено. У такому випадку, if (String.IsNullOrEmpty(databaseName)) return false;оскільки він просто викине виняток, інакше може навіть повернути true, що було б неправильним. Однак, підтриманий, дякую за чистий код.
Брекети

1
Чому у вас є "кругова" посилання на приватний конструктор? ( new DBConnection();і private DBConnection())
Солей - Матьє Прево

Ви повинні були б зробити connection = nullна DBConnection.Close()так як це Сінглтон , і ви можете використовувати його знову
Roman

1
Це чудово для початку! Я вже трохи розширив public bool IsConnect(). Щоб повторно використовувати з’єднання, після ifоператора: else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); }у вашій програмі ви можете просто зробити це dbCon.IsConnect()знову, після того, як ви закрили його після попереднього запиту. Так що не робити connection = null;в DBConnection.Close()якості запропонував Роман, в іншому випадку повторного використання не працюватиме.
Larphoid

Чудова відповідь, але як мені підключитися до певного порту. Моя мережа полягає в тому, що дані розробника, тесту та поточні дані знаходяться на одному сервері, але на різних портах. Як я можу підключитися лише до 1 порту.
Linux4Life531

54

Ви можете використовувати Package Manager, щоб додати його як пакет, і це найпростіший спосіб зробити. Вам не потрібно нічого іншого для роботи з базою даних mysql.

Або ви можете запустити команду нижче в консолі диспетчера пакетів

PM> Install-Package MySql.Data

NUGET Mysql.Data


Якщо ви шукаєте його у вікні "Управління пакетами NuGet", майте на увазі, що назва пакета чутлива до регістру . Можливо, не така очевидна річ для когось із менеджерів пакетів з малими іменами.
Dimitry K

13

Вам потрібно завантажити 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 (NO SSL MODE) за допомогою події Click :

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

Подивившись на код нижче, я спробував його і виявив: Замість того, щоб писати, DBCon = DBConnection.Instance();ви повинні поставити DBConnection DBCon - new DBConnection();(Це працювало для мене)

і замість MySqlComman cmd = new MySqlComman(query, DBCon.GetConnection());вас слід поставити MySqlCommand cmd = new MySqlCommand(query, DBCon.GetConnection());(у ньому бракує 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
Ви скопіювали це з codeproject.com/Articles/43438/Connect-C-to-MySQL Це вже відповідь від "bout Hamed Shams"
Елму

Я згоден, @Elmue -
Моморо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.