Come connettersi al database MySQL?


88

Sono molto nuovo nella programmazione C # ma vorrei poter accedere ai database MySQL (non ho i soldi per MS SQL)

Tuttavia ho una domanda; So che è necessario disporre di "connettore / NET MySQL" e "MySQL per Visual Studio" per lo sviluppo dell'applicazione C #, ma la persona che installa l'applicazione li richiede anche? (È possibile che io possa semplicemente rilasciare la DLL del connettore con il programma?)

Grazie

EDIT: sono entrambi necessari per l'utente finale o solo per il connettore? C'è qualcos'altro di cui avrebbero bisogno?


4
Sì, tutto ciò che devi fare è impacchettare la DLL con il tuo programma, dovrebbe già essere nella cartella di debug / rilascio dell'output quando esegui il programma.
ohmusama

Nota: MySQL per Visual Studio non funziona in VS2010E
Enrique San Martín

Per quanto riguarda la nota sopra di @ EnriqueSanMartín Versione 2.0 e Versione 1.2 Il supporto per Microsoft Visual Studio 2010 è stato rimosso .
Curiosità

Vedi qui se hai bisogno di connetterti a MySQL tramite SSH invece che direttamente sulla porta 3306 stackoverflow.com/questions/10806799/…
Matthew Lock

Risposte:


99

Installa il MySql.Datapacchetto NuGet di Oracle .

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

Esempio:

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

4
Se potresti incontrare problemi di connessione a Internet e vorresti provare fino a quando non ti connetti, non funzionerà. Elimina if (_instance == null)riga. Anche bool result = falseper impostazione predefinita, perché potrebbe non essere connesso per problemi di connessione a Internet e molti altri in realtà, non solo perché il nome del database non sarebbe impostato. In tal caso if (String.IsNullOrEmpty(databaseName)) return false;, altrimenti verrà generata un'eccezione e potrebbe persino restituire true, il che non sarebbe corretto. Tuttavia, voto positivo, grazie per il codice pulito.
Tabelloni

2
Perché hai un riferimento "circolare" con un costruttore privato? ( new DBConnection();e private DBConnection())
Soleil - Mathieu Prévot

Dovreste fare connection = nullsu DBConnection.Close()quanto è Singleton e si consiglia di utilizzare di nuovo
Romano

1
Questo è fantastico per iniziare! Mi sono già espanso un po ' public bool IsConnect(). Per riutilizzare la connessione, dopo la ifdichiarazione: else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); }Nella tua applicazione puoi semplicemente dbCon.IsConnect()rifarla, dopo averla chiusa dopo una precedente query. Quindi non fare connection = null;in DBConnection.Close()come suggerito romana, altrimenti il riutilizzo non funziona.
Larphoid

Ottima risposta, ma come mi connetto a una determinata porta. La mia rete è che entrambi i dati di sviluppo, test e live si trovano sullo stesso server, ma su porte diverse. Come posso connettermi a una sola porta.
Linux4Life531

54

puoi usare Package Manager per aggiungerlo come pacchetto ed è il modo più semplice per farlo. Non hai bisogno di nient'altro per lavorare con il database mysql.

Oppure puoi eseguire il comando seguente nella console di Gestione pacchetti

PM> Install-Package MySql.Data

NUGET Mysql.Data


Se lo cerchi tramite la finestra "Gestisci pacchetti NuGet", tieni presente che il nome del pacchetto fa distinzione tra maiuscole e minuscole . Forse non è una cosa così ovvia per qualcuno proveniente da gestori di pacchetti con nomi in minuscolo.
Dimitry K

15

Devi scaricare MySQLConnection NET da qui .

Quindi è necessario aggiungere MySql.Data.DLLa MSVisualStudio in questo modo:

  1. Apri progetto menu
  2. Inserisci
  3. Riferimento
  4. Vai a C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.12\Assemblies\v4.5.2
  5. Aggiungi MySql.Data.dll

Se vuoi saperne di più visita: inserisci qui la descrizione del link

Per utilizzare nel codice è necessario importare la libreria:

using MySql.Data.MySqlClient;

Un esempio con connessione al database Mysql (NO SSL MODE) tramite evento 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

Guardando il codice qui sotto, l'ho provato e ho trovato: Invece di scrivere DBCon = DBConnection.Instance();dovresti mettere DBConnection DBCon - new DBConnection();( Ha funzionato per me)

e invece di MySqlComman cmd = new MySqlComman(query, DBCon.GetConnection());te dovresti mettere MySqlCommand cmd = new MySqlCommand(query, DBCon.GetConnection());(manca la d)



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

15
Hai copiato questo da codeproject.com/Articles/43438/Connect-C-to-MySQL Questa è già la risposta di "bout Hamed Shams"
Elmue

Sono d'accordo, @Elmue -
Momoro
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.