Как подключиться к базе данных MySQL?

88

Я новичок в программировании на C #, но хотел бы иметь доступ к базам данных MySQL (у меня нет денег на MS SQL)

Однако у меня есть один вопрос; Я знаю, что вам необходимы «MySQL connector / NET» и «MySQL для Visual Studio» для разработки приложения C #, но нужны ли они и тому, кто устанавливает приложение? (Можно ли просто выпустить DLL коннектора с программой?)

благодаря

РЕДАКТИРОВАТЬ: оба они требуются для конечного пользователя или только для коннектора? Что еще им понадобится?

user3282097
источник
4
Да, все, что вам нужно сделать, это упаковать DLL вместе с вашей программой, она уже должна быть в вашей выходной папке отладки / выпуска при запуске вашей программы.
ohmusama
Примечание: MySQL для Visual Studio не работает в VS2010E,
Энрике Сан-Мартин,
Что касается упомянутого выше примечания @ EnriqueSanMartín Версия 2.0 и Версия 1.2 Поддержка Microsoft Visual Studio 2010 была удалена .
Любопытство
См. Здесь, если вам нужно подключиться к MySQL через SSH, а не напрямую через порт 3306 stackoverflow.com/questions/10806799/…
Мэтью Лок

Ответы:

99

Установите MySql.Dataпакет Oracle 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();
}
Ocph23
источник
4
Если у вас могут возникнуть проблемы с подключением к Интернету, и вы хотите попробовать, пока не подключитесь, это не сработает. Удалить if (_instance == null)строку. Также make bool result = falseпо умолчанию, потому что он может быть не подключен из-за проблем с подключением к Интернету и многих других, не только потому, что имя базы данных не будет установлено. В этом случае, if (String.IsNullOrEmpty(databaseName)) return false;потому что в противном случае он просто вызовет исключение и может даже вернуть true, что было бы неверно. Тем не менее, проголосовали за, спасибо за чистый код.
Brackets
2
Почему у вас есть "круговая" ссылка с частным конструктором? ( 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

вы можете использовать диспетчер пакетов, чтобы добавить его как пакет, и это самый простой способ сделать. Для работы с базой данных mysql больше ничего не нужно.

Или вы можете запустить команду ниже в консоли диспетчера пакетов

PM> Install-Package MySql.Data

NUGET Mysql.Data

Damith
источник
При поиске в окне «Управление пакетами NuGet» имейте в виду, что в имени пакета учитывается регистр . Может быть, не такая очевидная вещь для тех, кто пришел из менеджеров пакетов с именами в нижнем регистре.
Dimitry K
15

Вы должны загрузить 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)

Надежда
источник
0

Еще одна библиотека, которую следует учитывать, - MySqlConnector, https://mysqlconnector.net/ . Mysql.Data находится под лицензией GPL, а MySqlConnector - MIT.

Андрей
источник
-5
 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);
    }
Neelakanta
источник
15
Вы скопировали это с codeproject.com/Articles/43438/Connect-C-to-MySQL. Это уже ответ от "bout Hamed Shams"
Elmue
Я согласен, @Elmue -
Momoro