MySQL Veritabanına nasıl bağlanılır?


88

C # programlamada çok yeniyim ama MySQL Veritabanlarına erişebilmek istiyorum (MS SQL için param yok)

Ancak bir sorum var; C # uygulamasını geliştirmek için "MySQL bağlayıcısı / NET" ve "MySQL for Visual Studio" sahibi olmanız gerektiğini biliyorum, ancak uygulamayı yükleyen kişi de bunlara ihtiyaç duyuyor mu? (Bağlayıcı DLL'yi programla birlikte yayınlayabilir miyim?)

Teşekkürler

DÜZENLEME: Her ikisi de son kullanıcı için mi yoksa sadece bağlayıcı için mi gerekli? İhtiyaç duyacakları başka bir şey var mı?


4
Evet, tek yapmanız gereken DLL'yi programınızla birlikte paketlemek, programınızı çalıştırdığınızda zaten çıktı hata ayıklama / sürüm klasörünüzde olmalıdır.
ohmusama

Not: Visual Studio için MySQL, VS2010E'de çalışmıyor
Enrique San Martín

@ EnriqueSanMartín Sürüm 2.0 ve Sürüm 1.2 Microsoft Visual Studio 2010 Desteği ile ilgili yukarıdaki nota gelince .
Curiousity

Doğrudan 3306 bağlantı noktası yerine SSH üzerinden MySQL'e bağlanmanız gerekip gerekmediğini burada görün stackoverflow.com/questions/10806799/…
Matthew Lock

Yanıtlar:


99

Oracle'ın MySql.DataNuGet paketini yükleyin .

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

Misal:

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
İnternet bağlantısı sorunlarıyla karşılaşabilirseniz ve bağlanana kadar denemek isterseniz, bu işe yaramaz. if (_instance == null)Satırı sil . Ayrıca bool result = falsevarsayılan olarak yapın, çünkü internet bağlantısı sorunları ve diğer pek çok şey için bağlı olmayabilir, sadece veritabanı adı ayarlanmayacağı için değil. Bu durumda, if (String.IsNullOrEmpty(databaseName)) return false;çünkü aksi takdirde sadece bir istisna atar ve hatta doğru olmayacak şekilde true dönebilir. Ancak, temiz kod için teşekkürler.
Parantez

2
Neden özel bir kurucu ile "döngüsel" referansınız var? ( new DBConnection();ve private DBConnection())
Soleil - Mathieu Prévot

Yapacak olurdu connection = nullüzerinde DBConnection.Close()o tekil olduğundan ve yeniden kullanmak isteyebilir
Roman

1
Başlamak harika! Zaten biraz genişledim public bool IsConnect(). Bağlantıyı yeniden kullanmak için ififadeden sonra : else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); }Uygulamanızda dbCon.IsConnect(), önceki bir sorgudan sonra kapattıktan sonra tekrar yapabilirsiniz . Yani yapmayın connection = null;içinde DBConnection.Close()aksi olmaz çalışmalarını yeniden Roman önerildiği gibi.
Larphoid

Harika yanıt, ancak belirli bir bağlantı noktasına nasıl bağlanırım. Ağım, hem geliştirme, test hem de canlı verilerin aynı sunucuda, ancak farklı bağlantı noktalarında olmasıdır. Sadece 1 porta nasıl bağlanabilirim.
Linux4Life531

54

paket olarak eklemek için Paket Yöneticisini kullanabilirsiniz ve bunu yapmanın en kolay yoludur. Mysql veritabanı ile çalışmak için başka bir şeye ihtiyacınız yok.

Veya Paket Yöneticisi Konsolunda aşağıdaki komutu çalıştırabilirsiniz

PM> Install-Package MySql.Data

NUGET Mysql.Data


"NuGet Paketlerini Yönet" penceresinde arama yaparsanız, paket adının büyük / küçük harfe duyarlı olduğunu unutmayın . Küçük harfli adlara sahip paket yöneticilerinden gelen biri için bu kadar bariz bir şey olmayabilir.
Dimitry K

15

MySQLConnection NET'i buradan indirmelisiniz .

O zaman MySql.Data.DLLMSVisualStudio'ya şu şekilde eklemeniz gerekir :

  1. Açık menü projesi
  2. Ekle
  3. Referans
  4. Göz at C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.12\Assemblies\v4.5.2
  5. MySql.Data.dll ekle

Daha fazla bilgi edinmek istiyorsanız, ziyaret edin: bağlantı açıklamasını buraya girin

Kodda kullanmak için kitaplığı içe aktarmanız gerekir:

using MySql.Data.MySqlClient;

Click olayı aracılığıyla Mysql veritabanına (SSL MODU YOK) bağlanan bir örnek :

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

Aşağıdaki koda baktım, denedim ve buldum: Yazmak yerine DBCon = DBConnection.Instance();yazmalısın DBConnection DBCon - new DBConnection();(Bu benim için çalıştı)

ve MySqlComman cmd = new MySqlComman(query, DBCon.GetConnection());senin yerine koymalısın MySqlCommand cmd = new MySqlCommand(query, DBCon.GetConnection());(d eksik)



-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
Bunu codeproject.com/Articles/43438/Connect-C-to-MySQL adresinden kopyaladınız Bu zaten "Hamed Shams bout" dan cevaptır
Elmue

Katılıyorum, @Elmue -
Momoro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.