Rehber C#'a MySQL bağlantısı yapmak ve veri çekmek

Silicone Android Uygulaması

MisakiTaro

Kurucu
Kurucu
Katılım
28 Mar 2021
Mesajlar
3.316
Çözümler
29
İfade skoru
29.636
Evet, MSSQL daha iyi çalışıyor olabilir ama MSSQL bulması biraz daha zor. Ondan burada C# MySQL bağlantısı yapmayı göstereceğim.

İlk başta MySQL Connector .NET indirmeniz lazım. Buradan indirebilirsiniz.

Kurduktan sonra Proje -> Başvuru Ekle kısmından MySQL Connector'ı Import ediyoruz.

1623854545707.png


Akabinde ise en üst kısma
Kod:
using MySql.Data.MySqlClient;
kodunu ekleyerek kütüphaneyi import ediyoruz.

Şimdi ise kısaca nasıl bağlanacağınızı, veri yazdıracağınızı vs. göstereyim.

Bağlanmak için 3 değişkeni üst kısma ekleyeceğiz. 4. şart değil tabii.

C#:
public static MySqlConnection con;
public static MySqlCommand cmd;
public static MySqlDataReader dr;
public static bool isconnected = false;

Sonrasında ise bağlantımızı yapacağız. Bunun için fonksiyon yazabilirsiniz ya da basitçe program açılırken yapabilirsiniz. Ayrıca bağlantı ayarlarınızı App.Config dosyasından almanızı öneririm. Şart değil tabii.

C#:
            try
            {
                string connectiondetails = "Server=sunucunuz;Database=veritabanıismi;port=port genelde 3306;user=veritabanıkullanıcı;Pwd=şifre;SslMode=none;";
                MySqlConnection connection = new MySqlConnection(connectiondetails);
                connection.Open();
                con = connection;
                isconnected = true;
            }
            catch (MySqlException ex)
            {
                string exception = "Exception : " + ex.Message.ToString() + "\n\rApplication will close now. \n\r";
                Environment.Exit(1);
            }

Bağlantıyı da alttaki kodlarla kapatabilirsiniz.


Kod:
            isconnected = false;
            con.Close();
            con.Dispose();

Veri yazmak ve okumak için de alttaki komut dizisini kullanabilirsiniz.

C#:
        public static List<string> Helper(string sqlquery, int strintbool, int indexnum)
        {
            if (!isconnected)
            {
                Connect();
            }
            try
            {
                cmd = new MySqlCommand();
                cmd.CommandText = sqlquery;
                cmd.Connection = con;
                string gonderilecek = null;
                if (sqlquery.Contains("DELETE") || sqlquery.Contains("UPDATE") || sqlquery.Contains("INSERT"))
                {
                    cmd.ExecuteNonQuery();
                    var gonderilendeger = new List<string>();
                    gonderilendeger[0] = "True";
                    return gonderilendeger;
                }
                else if (sqlquery.Contains("SELECT"))
                {
                    dr = cmd.ExecuteReader();
                    var gonderilendeger = new List<string>();
                    if (strintbool == 1)
                    {
                        dr.Read();
                        gonderilendeger.Add(Convert.ToString(dr.GetInt32(indexnum)));
                    }
                    else if (strintbool == 2)
                    {
                        dr.Read();
                        gonderilendeger.Add(dr.GetString(indexnum));
                    }
                    else if (strintbool == 3)
                    {
                        gonderilendeger.Add(Convert.ToString(dr.Read()));
                    }
                    else if (strintbool == 4)
                    {
                        while (dr.Read())
                        {
                            for (int i = 0; i <= 5; i++)
                            {
                                gonderilecek += Convert.ToString(dr[i]) + "|";

                            }
                            gonderilendeger.Add(gonderilecek);
                            gonderilecek = null;
                        }
                    }
                    return gonderilendeger;
                }
                else
                {
                    var gonderilendeger = new List<string>();
                    gonderilendeger.Add(("ErrException: " + "\n Syntax Error"));
                    return gonderilendeger;
                }
            }
            catch (Exception e)
            {
                var gonderilendeger = new List<string>();
                gonderilendeger.Add(Convert.ToString("ErrException: " + e));
                return gonderilendeger;
            }
            finally
            {
                CloseConn();
            }
        }

Ancak dönüş list şeklinde olduğu için tekli değer istiyorsanız çağırdıktan sonra [0] gibi bir değer eklemelisiniz. Eğer liste şeklinde değer çekecekseniz foreach döngüsünü kullanabilirsiniz.

Örnek list kullanımı:

C#:
                var getallmessages = new List<string>();
                getallmessages = SQL.SQL.Helper("SELECT * FROM `messages` WHERE senderid=" + userid, 4, 0);
                foreach (var item in getallmessages)
                {
                    string[] message = item.Split('|');
                    if (type == true) {
                        listBox1.Items.Add(message[0] + "    Gönderen: "+ getname(message[1]) + "  Alıcı: Sen " + message[3] + "                                       " + message[5]);
                    }
                    else
                    {
                        listBox1.Items.Add(message[0] + "    Gönderen: Sen      " + "Alıcı:  " + getname(message[2]) + message[3] + "                                       " + message[5]);
                    }
                }

Örnek tekli veri çekim:

C#:
                int latestid = Convert.ToInt32(SQL.SQL.Helper("SELECT id FROM `users` WHERE name = '" + user + "' OR email='" + user + "'", 1, 0)[0]);
                this.Hide();
                Form f2 = new User_Panel(latestid);
                f2.ShowDialog();

Başka sorularınız varsa sorabilirsiniz. Umarım faydalı olmuştur. Okuduğunuz için teşekkürler.
 

TheMarqE

Silver Sample
Katılım
2 Nis 2021
Mesajlar
771
Çözümler
6
İfade skoru
2.206
Konum
C#
Evet, MSSQL daha iyi çalışıyor olabilir ama MSSQL bulması biraz daha zor. Ondan burada C# MySQL bağlantısı yapmayı göstereceğim.

İlk başta MySQL Connector .NET indirmeniz lazım. Buradan indirebilirsiniz.

Kurduktan sonra Proje -> Başvuru Ekle kısmından MySQL Connector'ı Import ediyoruz.

29394 numaralı eki görüntüle

Akabinde ise en üst kısma
Kod:
using MySql.Data.MySqlClient;
kodunu ekleyerek kütüphaneyi import ediyoruz.

Şimdi ise kısaca nasıl bağlanacağınızı, veri yazdıracağınızı vs. göstereyim.

Bağlanmak için 3 değişkeni üst kısma ekleyeceğiz. 4. şart değil tabii.

C#:
public static MySqlConnection con;
public static MySqlCommand cmd;
public static MySqlDataReader dr;
public static bool isconnected = false;

Sonrasında ise bağlantımızı yapacağız. Bunun için fonksiyon yazabilirsiniz ya da basitçe program açılırken yapabilirsiniz. Ayrıca bağlantı ayarlarınızı App.Config dosyasından almanızı öneririm. Şart değil tabii.

C#:
            try
            {
                string connectiondetails = "Server=sunucunuz;Database=veritabanıismi;port=port genelde 3306;user=veritabanıkullanıcı;Pwd=şifre;SslMode=none;";
                MySqlConnection connection = new MySqlConnection(connectiondetails);
                connection.Open();
                con = connection;
                isconnected = true;
            }
            catch (MySqlException ex)
            {
                string exception = "Exception : " + ex.Message.ToString() + "\n\rApplication will close now. \n\r";
                Environment.Exit(1);
            }

Bağlantıyı da alttaki kodlarla kapatabilirsiniz.


Kod:
            isconnected = false;
            con.Close();
            con.Dispose();

Veri yazmak ve okumak için de alttaki komut dizisini kullanabilirsiniz.

C#:
        public static List<string> Helper(string sqlquery, int strintbool, int indexnum)
        {
            if (!isconnected)
            {
                Connect();
            }
            try
            {
                cmd = new MySqlCommand();
                cmd.CommandText = sqlquery;
                cmd.Connection = con;
                string gonderilecek = null;
                if (sqlquery.Contains("DELETE") || sqlquery.Contains("UPDATE") || sqlquery.Contains("INSERT"))
                {
                    cmd.ExecuteNonQuery();
                    var gonderilendeger = new List<string>();
                    gonderilendeger[0] = "True";
                    return gonderilendeger;
                }
                else if (sqlquery.Contains("SELECT"))
                {
                    dr = cmd.ExecuteReader();
                    var gonderilendeger = new List<string>();
                    if (strintbool == 1)
                    {
                        dr.Read();
                        gonderilendeger.Add(Convert.ToString(dr.GetInt32(indexnum)));
                    }
                    else if (strintbool == 2)
                    {
                        dr.Read();
                        gonderilendeger.Add(dr.GetString(indexnum));
                    }
                    else if (strintbool == 3)
                    {
                        gonderilendeger.Add(Convert.ToString(dr.Read()));
                    }
                    else if (strintbool == 4)
                    {
                        while (dr.Read())
                        {
                            for (int i = 0; i <= 5; i++)
                            {
                                gonderilecek += Convert.ToString(dr[i]) + "|";

                            }
                            gonderilendeger.Add(gonderilecek);
                            gonderilecek = null;
                        }
                    }
                    return gonderilendeger;
                }
                else
                {
                    var gonderilendeger = new List<string>();
                    gonderilendeger.Add(("ErrException: " + "\n Syntax Error"));
                    return gonderilendeger;
                }
            }
            catch (Exception e)
            {
                var gonderilendeger = new List<string>();
                gonderilendeger.Add(Convert.ToString("ErrException: " + e));
                return gonderilendeger;
            }
            finally
            {
                CloseConn();
            }
        }

Ancak dönüş list şeklinde olduğu için tekli değer istiyorsanız çağırdıktan sonra [0] gibi bir değer eklemelisiniz. Eğer liste şeklinde değer çekecekseniz foreach döngüsünü kullanabilirsiniz.

Örnek list kullanımı:

C#:
                var getallmessages = new List<string>();
                getallmessages = SQL.SQL.Helper("SELECT * FROM `messages` WHERE senderid=" + userid, 4, 0);
                foreach (var item in getallmessages)
                {
                    string[] message = item.Split('|');
                    if (type == true) {
                        listBox1.Items.Add(message[0] + "    Gönderen: "+ getname(message[1]) + "  Alıcı: Sen " + message[3] + "                                       " + message[5]);
                    }
                    else
                    {
                        listBox1.Items.Add(message[0] + "    Gönderen: Sen      " + "Alıcı:  " + getname(message[2]) + message[3] + "                                       " + message[5]);
                    }
                }

Örnek tekli veri çekim:

C#:
                int latestid = Convert.ToInt32(SQL.SQL.Helper("SELECT id FROM `users` WHERE name = '" + user + "' OR email='" + user + "'", 1, 0)[0]);
                   this.Hide();
                Form f2 = new User_Panel(latestid);
                f2.ShowDialog();

Başka sorularınız varsa sorabilirsiniz. Umarım faydalı olmuştur. Okuduğunuz için teşekkürler.
Aslında Silicone-Forumun MySql sunucusundan veri çeken bir desktop uygulaması yapılabilir. Giriş sistemli.
 
KS
M

MisakiTaro

Kurucu
Kurucu
Katılım
28 Mar 2021
Mesajlar
3.316
Çözümler
29
İfade skoru
29.636
Aslında Silicone-Forumun MySql sunucusundan veri çeken bir desktop uygulaması yapılabilir. Giriş sistemli.
Bence masaüstü uygulamasına gerek yok. Xamarin ile REST API kullanarak mobil Native uygulama yapılabilir ama çok uzun sürer.
 

Bu içeriği görüntüleyen kullanıcılar

Silicone Makale

Yeni konular

Silicone YouTube

Top