System.INI ile Projemizi Büyütüyoruz

Seksenler

Yeni Üye
Bu yazımızda sizlerle, sosyal medyada en sık rastladığımız konu başlığını paylaşacağız. Genelde yazılıma başlayan bir çok arkadaş C# ile SQL Veri tabanını birbirine bağladığında bunu kod içerisinden yapar ve bu kodu da kendi bilgisayarının isim ve yoluna göre yapar oysa ki bu yanlış bir harekettir. Çünkü biz yaptığımız projeyi başka bir bilgisayara kurduğumuzda bu program SQL Veri tabanına bağlanmayacak ve program çalışmayacaktır.

Ticari ve piyasada olan her program SQL bilgilerini program yüklerken alır ya da ayrı bir form ekranında şifresiz yönetici girişi yapılarak SQL Veri tabanına eklenir. Bu sayede program başlamadan önce veritabanı cümlesi programa yerleşmiş olur ve programın hata vermesinin önüne geçilir.

Bizde bugün sizlerle C# ile System.INI dosyası kullanarak programımıza ilk açılışta bir form penceresi açtırıp SQL bağlantı cümlesini yazacağız. Bağlantı var ise bir daha o pencereyi açtırmayıp direk kullanıcı giriş ekranını açtıracağız. Bu şekilde SQL Serverımızın çalıştığını da test edeceğiz.

İlk olarak C# Win Form Uygulaması açarak projemize başlayalım ve kullanacağımız nesneleri belirleyelim. Biz burada 2 form kullanacağız.



Çözüm gezgininden Program.cs içine girerek kodumuzda ufak bir değişiklik yapıyoruz ve ilk açılışta Form 2’nin açılmasını istiyoruz. Biz burada Form 1’i System.INI yapılandırma sayfamızı oluşmadıysa oluşturacağız.


C# ile System.INI dosyamızı oluşturmak için bazı sınıf ve kütüphaneler kullanmamız gerekiyor. O halde kodlarımıza geçebiliriz.

using System.Runtime.InteropServices;
using System.IO;
using System.Data.SqlClient;

kullanacağımız kütüphaneleri ekledikten sonra programımızda kernel32.dll kütüphanelerini de kullanacağız bunun için yazmamız gereken sınıf var.

Kernel32.dll Nedir?
Kernel32.dll, işletim sisteminin temel işlevlerini yerine getirmek; bellek yönetimini sağlamak, giriş ve çıkış donanımlarını kontrol etmek gibi görevleri yerine getiren Windows modülüdür.

Kullanacağımız sınıflarımız tanımlıyoruz.
Kod:
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]

static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);
[DllImport("kernel32.dll")]
static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);

Yukarıdaki kodlarımızda kernel kütüphanemizin karakter yapısını ayarladık. Daha sonra sınıfımızda dönecek olan veri tiplerini girdik.

bool WriteINI(string SectionName, string KeyName, string StringToWrite, string INIFileName)
{
bool Return;
Return = WritePrivateProfileString(SectionName, KeyName, StringToWrite, INIFileName);
return Return;
}
WriteINI ile oluşturduğumuz sınıflara değerleri yollayarak bilgisayarımızda bir yazma işlemi olacağını söylüyoruz ve izin istedik.

Form 1 sayfamıza ara verip Form 2 sayfamıza geçiyoruz. Şimdi yapmamız gereken Program dizinimizde System.INI Dosyasının var olup olmadığını kontrol etmek. Program kurulduğunda System.INI dosyası olmadığı için bizi direkt olarak Form 1 sayfasına yönlendirecek bunun için Form 2 ye bir if kod parçacığı yazarak .ini dosyamızın var olup olmadığını kontrol ediyoruz.
Kod:
      private void Form2_Load(object sender, EventArgs e)
         {
             string dosya_dizini = Application.StartupPath + @"\System.INI";
             if (File.Exists(dosya_dizini) == true) //Dizinde dosya var mı ?
             {               
                 label1.Text = "Sunucu Bağlantısı Var";
                 label1.ForeColor = Color.Green;
             }
             else
             {      Form1 f1 = new Form1();
            f1.ShowDialog();
            Form2 f2 = new Form2();
            f2.Close();

            this.Hide();
        }
    }
Daha sonra dizinde dosya varsa sunucu bağlantısı var yoksa Form 1 ekranımızın gelmesi sağladık böylece Veritabanı kaydımızı tamamlayarak programa başarılı bir şekilde giriş yapmayı sağlayacağız.
Kod:
SqlConnection con;
SqlDataAdapter da;
DataSet ds;
SqlCommand cmd;
         void griddoldur()
         {
             try
             {
                 con = new SqlConnection("server =" + textBox1.Text + "; Initial Catalog = " + textBox2.Text + "; Integrated Security = SSPI");
                 da = new SqlDataAdapter("Select * From ogrenci", con);
                 ds = new DataSet();
                 con.Open();           
 if (con.State == ConnectionState.Open)
            {
               MessageBox.Show("Sunucu Bağlantısı : Başarılı");
                Application.Exit();
            }
            else
            {
                MessageBox.Show("Sunucu Bağlantısı : Başarısız");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
Tekrar Form 1 ekranımıza geri döndük bağlantımız yoksa bağlantımızı gerçekleştiriyoruz.

Kod:
private void Form1_Load(object sender, System.EventArgs e)
{
StringBuilder sb = new StringBuilder(5000);
GetPrivateProfileString("DataBase", "ServerProgramPath", "", sb, sb.Capacity, @"C:\Users\OZGUN\source\repos\xmlKullanimi\xmlKullanimi\bin\Debug\System.INI");
textBox1.Text = sb.ToString();
GetPrivateProfileString("DataBase", "ServerName", "", sb, sb.Capacity, @"C:\Users\OZGUN\source\repos\xmlKullanimi\xmlKullanimi\bin\Debug\System.INI");
textBox2.Text = sb.ToString();
GetPrivateProfileString("DataBase", "SQLKullaniciAdi", "", sb, sb.Capacity, @"C:\Users\OZGUN\source\repos\xmlKullanimi\xmlKullanimi\bin\Debug\System.INI");
textBox3.Text = sb.ToString();
GetPrivateProfileString("DataBase", "SQLKullaniciSifre", "", sb, sb.Capacity, @"C:\Users\OZGUN\source\repos\xmlKullanimi\xmlKullanimi\bin\Debug\System.INI");
textBox4.Text = sb.ToString();
sb.Clear();
}


//Kaydetme Butonumuz Olacak. private void Button1_Click(object sender, EventArgs e) { WriteINI("DataBase", "ServerProgramPath", textBox1.Text, @"C:\Users\OZGUN\source\repos\xmlKullanimi\xmlKullanimi\bin\Debug\System.INI"); WriteINI("DataBase", "ServerName", textBox2.Text, @"C:\Users\OZGUN\source\repos\xmlKullanimi\xmlKullanimi\bin\Debug\System.INI"); WriteINI("DataBase", "SQLKullaniciAdi", textBox3.Text, @"C:\Users\OZGUN\source\repos\xmlKullanimi\xmlKullanimi\bin\Debug\System.INI"); WriteINI("DataBase", "SQLKullaniciSifre",textBox4.Text, @"C:\Users\OZGUN\source\repos\xmlKullanimi\xmlKullanimi\bin\Debug\System.INI"); griddoldur(); }