Wie verbinde ich mich mit der MySQL-Datenbank?

84

Ich bin sehr neu in der C # -Programmierung, möchte aber auf MySQL-Datenbanken zugreifen können (habe nicht das Geld für MS SQL)

Ich habe jedoch eine Frage; Ich weiß, dass Sie "MySQL Connector / NET" und "MySQL for Visual Studio" für die Entwicklung der C # -Anwendung benötigen, aber benötigt die Person, die die Anwendung installiert, diese auch? (Kann ich die Connector-DLL einfach mit dem Programm freigeben?)

Vielen Dank

BEARBEITEN: Werden beide für den Endbenutzer oder nur für den Anschluss benötigt? Gibt es noch etwas, was sie brauchen würden?

user3282097
quelle
3
Ja, Sie müssen lediglich die DLL mit Ihrem Programm verpacken. Sie sollte sich bereits in Ihrem Ausgabe-Debug- / Release-Ordner befinden, wenn Sie Ihr Programm ausführen.
Ohmusama
Hinweis: MySQL für Visual Studio funktioniert nicht in VS2010E
Enrique San Martín
Wie für den obigen Hinweis von @ EnriqueSanMartín Version 2.0 und Version 1.2 wurde die Unterstützung für Microsoft Visual Studio 2010 entfernt .
Neugier

Antworten:

96

Installieren Sie das MySql.DataNuGet-Paket von 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();
        }        
    }
}

Beispiel:

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();
}
Ocph23
quelle
3
Wenn Sie möglicherweise Probleme mit der Internetverbindung haben und es versuchen möchten, bis Sie eine Verbindung hergestellt haben, funktioniert dies nicht. if (_instance == null)Zeile löschen . Machen Sie auch bool result = falsestandardmäßig, weil es möglicherweise nicht für Internetverbindungsprobleme und viele andere Probleme verbunden ist, nicht nur, weil der Datenbankname nicht festgelegt wurde. In diesem Fall, if (String.IsNullOrEmpty(databaseName)) return false;weil es sonst nur eine Ausnahme auslöst und möglicherweise sogar true zurückgibt, was nicht korrekt wäre. Allerdings positiv bewertet, danke für den sauberen Code.
Klammern
1
Warum haben Sie eine "Zirkelreferenz" mit einem privaten Konstruktor? ( new DBConnection();und private DBConnection())
Soleil - Mathieu Prévot
Sie würden zu tun haben , connection = nullauf , DBConnection.Close()da es Singleton ist , und Sie können es wollen wieder verwenden
Roman
1
Das ist großartig, um loszulegen! Ich habe schon ein wenig erweitert public bool IsConnect(). So verwenden Sie die Verbindung nach der ifAnweisung wieder: else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); }In Ihrer Anwendung können Sie sie einfach dbCon.IsConnect()erneut ausführen, nachdem Sie sie nach einer vorherigen Abfrage geschlossen haben. So tut nicht connection = null;in DBConnection.Close()dem Römer vorgeschlagen, sonst wird nicht funktionieren Wiederverwendung.
Larphoid
Tolle Antwort, aber wie verbinde ich mich mit einem bestimmten Port? Mein Netzwerk besteht darin, dass sich sowohl die Entwicklungs- als auch die Test- und Live-Daten auf demselben Server befinden, jedoch an verschiedenen Ports. Wie kann ich eine Verbindung zu nur einem Port herstellen?
Linux4Life531
54

Sie können den Paket-Manager verwenden, um ihn als Paket hinzuzufügen. Dies ist der einfachste Weg. Sie brauchen nichts anderes, um mit der MySQL-Datenbank zu arbeiten.

Oder Sie können den folgenden Befehl in der Package Manager-Konsole ausführen

PM> Install-Package MySql.Data

NUGET Mysql.Data

Damith
quelle
Wenn Sie das Fenster "NuGet-Pakete verwalten" durchsuchen, beachten Sie, dass beim Namen des Pakets zwischen Groß- und Kleinschreibung unterschieden wird . Vielleicht nicht so offensichtlich für jemanden, der von Paketmanagern mit Kleinbuchstaben kommt.
Dimitry K
13

Sie müssen MySQLConnection NET von hier herunterladen .

Dann müssen Sie MySql.Data.DLLMSVisualStudio wie folgt hinzufügen :

  1. Menüprojekt öffnen
  2. Hinzufügen
  3. Referenz
  4. Navigieren Sie zu C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.12\Assemblies\v4.5.2
  5. Fügen Sie MySql.Data.dll hinzu

Wenn Sie mehr wissen möchten, besuchen Sie: Geben Sie hier die Linkbeschreibung ein

Um den Code zu verwenden, müssen Sie die Bibliothek importieren:

using MySql.Data.MySqlClient;

Ein Beispiel mit Verbindung zur MySQL-Datenbank (NO SSL MODE) mittels Click-Ereignis :

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

}
Sergio Perez
quelle
3

Beim Betrachten des folgenden Codes habe ich es versucht und festgestellt: Anstatt zu schreiben DBCon = DBConnection.Instance();, sollten Sie setzen DBConnection DBCon - new DBConnection();(das hat bei mir funktioniert)

und statt MySqlComman cmd = new MySqlComman(query, DBCon.GetConnection());du solltest setzen MySqlCommand cmd = new MySqlCommand(query, DBCon.GetConnection());(es fehlt das d)

Hoffnung
quelle
0

Eine weitere zu berücksichtigende Bibliothek ist MySqlConnector, https://mysqlconnector.net/ . Mysql.Data steht unter einer GPL-Lizenz, während MySqlConnector MIT ist.

Andrew
quelle
-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);
    }
neelakanta
quelle
15
Sie haben dies von codeproject.com/Articles/43438/Connect-C-to-MySQL kopiert. Dies ist bereits die Antwort von "bout Hamed Shams"
Elmue
Ich stimme zu, @Elmue -
Momoro