none
textboxdan acces veri tabanına veri ekleme sorunu

    Soru

  • öncelikle merhabalar 

    benm acces veri tabanı kullanıyorum bir projem var ve onu geliştirmem lazım biraz daha ve şimdeden söyleyeym veri tabanım projelerin olduğu kısımda duruyor :)

      öncelikle kodlarımı paylaşaym

     public void kaydetme()
           {// databaseden veri cekmek ve guncellemek için kullandığım fonksiyon
                 try
               {
                    baglantı.Open();
                    OleDbCommand kaydet = new OleDbCommand("INSERT INTO MAİN (Osb Adı, İl, İlçe, Firma Sayısı, Osbcalisan, Kuruluş Tarihi,BirinciSektor, İkinci Ağırlıklı Sektör,Üçüncü Ağırlıklı Sektör,Dördüncü Ağırlıklı Sektör ) VALUES ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "','" + textBox9.Text + "','" + textBox10.Text + "','" + textBox11.Text + "')", baglantı);
                    kaydet.ExecuteNonQuery();//kaydetme komutumuzu calıstırır
                    baglantı.Close();//database baglantısını kapatır
                }
                catch
                {
                    MessageBox.Show("Kayit yapılamadı. Lutfen tekrar deneyiniz.");
                }
            }

           private void button1_Click(object sender, EventArgs e)
           {
               kaydetme();
           }
        butona basılınca kaydetmesi lazım ama olmuyor direk "Kayit yapılamadı. Lutfen tekrar deneyiniz." kısmı geliyor ekrana kayıt işlemi yapmıyor. 

    main tablosuna ekliyorum ve 11 tane textbox var yazdığım kodlar yukarda nerde sıkıntı var yardımcı olabilr misiniz acaba?

    şimdiden teşekkürler..

    18 Haziran 2012 Pazartesi 10:30

Yanıtlar

  • OleDbCommand kaydet = new OleDbCommand("INSERT INTO MAİN (Osb Adı, İl, İlçe, Firma Sayısı, Osbcalisan, Kuruluş Tarihi,BirinciSektor, İkinci Ağırlıklı Sektör,Üçüncü Ağırlıklı Sektör,Dördüncü Ağırlıklı Sektör ) VALUES (@textBox1,@textBox2,@textBox3,@textBox4,@textBox5,@textBox6,@textBox7,@textBox8,@textBox9,@textBox10,@textBox11)", baglantı);
    
    kaydet.Parameters.AddWithValue("@textBox1",textBox1.Text);
    kaydet.Parameters.AddWithValue("@textBox2",textBox2.Text);
    kaydet.Parameters.AddWithValue("@textBox3",textBox3.Text);
    kaydet.Parameters.AddWithValue("@textBox4",textBox4.Text);
    kaydet.Parameters.AddWithValue("@textBox5",textBox5.Text);
    kaydet.Parameters.AddWithValue("@textBox6",textBox6.Text);
    kaydet.Parameters.AddWithValue("@textBox7",textBox7.Text);
    kaydet.Parameters.AddWithValue("@textBox8",textBox8.Text);
    kaydet.Parameters.AddWithValue("@textBox9",textBox9.Text);
    kaydet.Parameters.AddWithValue("@textBox10",textBox10.Text);
    kaydet.Parameters.AddWithValue("@textBox11",textBox11.Text);
    

    Bu şekilde düzelttikten sonra access veritabanındaki kolon isimlerini de düzelt.

    Firma Sayısı değil de FirmaSayisi şeklinde kolon isimlerinde boşluk ve türkçe karakter kullanma.

    • Yanıt Olarak İşaretleyen ReallyIso 20 Haziran 2012 Çarşamba 06:29
    18 Haziran 2012 Pazartesi 10:47
  • Oncelikle kodu revize edilmis hali:

    public void kaydetme()
    {// databaseden veri cekmek ve guncellemek için kullandığım fonksiyon
      try
      {
        baglantı.Open();
        OleDbCommand kaydet = new OleDbCommand(
        "INSERT INTO MAİN (" +
        "[Osb Adı], [İl], [İlçe], [Firma Sayısı], [Osbcalisan], [Kuruluş Tarihi],[BirinciSektor],"+
        "[İkinci Ağırlıklı Sektör],[Üçüncü Ağırlıklı Sektör],[Dördüncü Ağırlıklı Sektör] )"+
        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", baglantı);
        
        kaydet.Parameters.AddWithValue( "p1", textBox1.Text );
        kaydet.Parameters.AddWithValue( "p2", textBox2.Text );
        kaydet.Parameters.AddWithValue( "p3", textBox3.Text );
        kaydet.Parameters.AddWithValue( "p4", textBox4.Text );
        kaydet.Parameters.AddWithValue( "p5", textBox5.Text );
        kaydet.Parameters.AddWithValue( "p6", textBox6.Text );
        kaydet.Parameters.AddWithValue( "p7", textBox7.Text );
        kaydet.Parameters.AddWithValue( "p8", textBox8.Text );
        kaydet.Parameters.AddWithValue( "p9", textBox9.Text );
        kaydet.Parameters.AddWithValue( "p10", textBox10.Text );
        kaydet.Parameters.AddWithValue( "p11", textBox11.Text );
        
        kaydet.ExecuteNonQuery();//kaydetme komutumuzu calıstırır
        baglantı.Close();//database baglantısını kapatır
      }
        catch (Exception e)
        {
          MessageBox.Show("Kayit yapılamadı. Lutfen tekrar deneyiniz.\n" + e.Message);
        }
    }

    Simdi de tavsiyeler, uyarsin uymazsin o senin bilecegin sey:

    1) Asla oyle dogrudan  value ('" + textBox1.Text  ... tarzinda yazma. Parametre kullan.
    2) Catch blogunda exception mesajini kontrol et. Genelde neden kaydedilmedigiyle ilgili (bazen ise yarayan) bilgi verir.
    3) Access kullanma.
    4) Veri tabanlarinin temellerini incelemeden veri tabani gerektiren program yazma (en azindan kolon/tablo adlarinin o sekilde secilince bas agrisi oldugunu ogren. Access zaten yeteri kadar basagrisi, daha da zorlastirma). 


    • Düzenleyen CetinBasozEditor 18 Haziran 2012 Pazartesi 10:52
    • Yanıt Olarak İşaretleyen ReallyIso 20 Haziran 2012 Çarşamba 06:30
    18 Haziran 2012 Pazartesi 10:52
  • Application.Exit();

    fazla olmus.

    • Yanıt Olarak İşaretleyen ReallyIso 20 Haziran 2012 Çarşamba 06:37
    19 Haziran 2012 Salı 15:23
  • baglanti.Open(), baglanti.Close() kodu ikisinde de var. O zaman kodu soyle degistir:

     baglantı.Open();//database baglantısını acar

    yerine:

    var baglantiAcik = ( baglanti.State == ConnectionState.Open );
    
    if ( !baglantiAcik ) {
       baglantı.Open();//database baglantısını acar
    }

    baglantı.Close();//database baglantısını kapatır

    yerine de:

    if (!baglantiAcik) {
       baglantı.Close();//database baglantısını kapatır
    }


    • Yanıt Olarak İşaretleyen ReallyIso 20 Haziran 2012 Çarşamba 13:18
    20 Haziran 2012 Çarşamba 13:17

Tüm Yanıtlar

  • OleDbCommand kaydet = new OleDbCommand("INSERT INTO MAİN (Osb Adı, İl, İlçe, Firma Sayısı, Osbcalisan, Kuruluş Tarihi,BirinciSektor, İkinci Ağırlıklı Sektör,Üçüncü Ağırlıklı Sektör,Dördüncü Ağırlıklı Sektör ) VALUES (@textBox1,@textBox2,@textBox3,@textBox4,@textBox5,@textBox6,@textBox7,@textBox8,@textBox9,@textBox10,@textBox11)", baglantı);
    
    kaydet.Parameters.AddWithValue("@textBox1",textBox1.Text);
    kaydet.Parameters.AddWithValue("@textBox2",textBox2.Text);
    kaydet.Parameters.AddWithValue("@textBox3",textBox3.Text);
    kaydet.Parameters.AddWithValue("@textBox4",textBox4.Text);
    kaydet.Parameters.AddWithValue("@textBox5",textBox5.Text);
    kaydet.Parameters.AddWithValue("@textBox6",textBox6.Text);
    kaydet.Parameters.AddWithValue("@textBox7",textBox7.Text);
    kaydet.Parameters.AddWithValue("@textBox8",textBox8.Text);
    kaydet.Parameters.AddWithValue("@textBox9",textBox9.Text);
    kaydet.Parameters.AddWithValue("@textBox10",textBox10.Text);
    kaydet.Parameters.AddWithValue("@textBox11",textBox11.Text);
    

    Bu şekilde düzelttikten sonra access veritabanındaki kolon isimlerini de düzelt.

    Firma Sayısı değil de FirmaSayisi şeklinde kolon isimlerinde boşluk ve türkçe karakter kullanma.

    • Yanıt Olarak İşaretleyen ReallyIso 20 Haziran 2012 Çarşamba 06:29
    18 Haziran 2012 Pazartesi 10:47
  • Oncelikle kodu revize edilmis hali:

    public void kaydetme()
    {// databaseden veri cekmek ve guncellemek için kullandığım fonksiyon
      try
      {
        baglantı.Open();
        OleDbCommand kaydet = new OleDbCommand(
        "INSERT INTO MAİN (" +
        "[Osb Adı], [İl], [İlçe], [Firma Sayısı], [Osbcalisan], [Kuruluş Tarihi],[BirinciSektor],"+
        "[İkinci Ağırlıklı Sektör],[Üçüncü Ağırlıklı Sektör],[Dördüncü Ağırlıklı Sektör] )"+
        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", baglantı);
        
        kaydet.Parameters.AddWithValue( "p1", textBox1.Text );
        kaydet.Parameters.AddWithValue( "p2", textBox2.Text );
        kaydet.Parameters.AddWithValue( "p3", textBox3.Text );
        kaydet.Parameters.AddWithValue( "p4", textBox4.Text );
        kaydet.Parameters.AddWithValue( "p5", textBox5.Text );
        kaydet.Parameters.AddWithValue( "p6", textBox6.Text );
        kaydet.Parameters.AddWithValue( "p7", textBox7.Text );
        kaydet.Parameters.AddWithValue( "p8", textBox8.Text );
        kaydet.Parameters.AddWithValue( "p9", textBox9.Text );
        kaydet.Parameters.AddWithValue( "p10", textBox10.Text );
        kaydet.Parameters.AddWithValue( "p11", textBox11.Text );
        
        kaydet.ExecuteNonQuery();//kaydetme komutumuzu calıstırır
        baglantı.Close();//database baglantısını kapatır
      }
        catch (Exception e)
        {
          MessageBox.Show("Kayit yapılamadı. Lutfen tekrar deneyiniz.\n" + e.Message);
        }
    }

    Simdi de tavsiyeler, uyarsin uymazsin o senin bilecegin sey:

    1) Asla oyle dogrudan  value ('" + textBox1.Text  ... tarzinda yazma. Parametre kullan.
    2) Catch blogunda exception mesajini kontrol et. Genelde neden kaydedilmedigiyle ilgili (bazen ise yarayan) bilgi verir.
    3) Access kullanma.
    4) Veri tabanlarinin temellerini incelemeden veri tabani gerektiren program yazma (en azindan kolon/tablo adlarinin o sekilde secilince bas agrisi oldugunu ogren. Access zaten yeteri kadar basagrisi, daha da zorlastirma). 


    • Düzenleyen CetinBasozEditor 18 Haziran 2012 Pazartesi 10:52
    • Yanıt Olarak İşaretleyen ReallyIso 20 Haziran 2012 Çarşamba 06:30
    18 Haziran 2012 Pazartesi 10:52
  • sana vereceğim kaynakta access veri tabanında veri ekleme silme ve güncelleme konularında açıklayıcı örnekler var eğer incelersen anlarsın .

    http://uploaded.to/file/x8lmk4i3

    • Yanıt Olarak Öneren Aithusa 18 Haziran 2012 Pazartesi 13:15
    • Yanıt Önerisini Geri Alan CetinBasozEditor 19 Haziran 2012 Salı 10:28
    18 Haziran 2012 Pazartesi 10:59
  • çok teşekkür ederim ilginiz için uayrılarınızıda dikkate alacağm emin olun çok teşekkürler tekrardan :)

    Birşey daha sorabilirmiym? 4 form üzerinden çalışıyorum ana formda butona basılınca diğer formlar açılıyor prog. o şekilde

    Sıkıntı şu ben ikinci form üzerinden işlem yaptıktan sonra kapatınca ana formda gidiyor yani program kapanıyor :)

    Butona basılınca ;

     Form4 guncelle = new Form4();
                guncelle.ShowDialog();
                Application.Exit();   şeklinde diğer formlara geçiyorum.

    Bu sorunu nasıl halledebilirim c# da yeniyimde :( şimdiden teşekkürler...

    19 Haziran 2012 Salı 15:07
  • ilginiz için çok teşekkür ederm çok sağolun hallettim sonunda :)
    19 Haziran 2012 Salı 15:08
  • Application.Exit();

    fazla olmus.

    • Yanıt Olarak İşaretleyen ReallyIso 20 Haziran 2012 Çarşamba 06:37
    19 Haziran 2012 Salı 15:23
  • çok teşekkür ederim işe yaradı zaman ayırdığınız için sağolun :)

    Sorununuzu nasıl halletiğinizi yazarsanız, yada cevaplardan birisi ile çözdüyseniz, yanıt olarak işaretlermisiniz.

    19 Haziran 2012 Salı 16:26
  • ilk başlarda diğer formlar kapanmıyodu arka planda çalışmaya devam ediyordu ondan yazmıştım ama şimdi kaldırdım tekrar bi sıkıntı olmadı teşekkürler :)

    Birde ben textboxdan girilen verileri accese kaydetmek istiyorum ama şöyle birşey var aynı veriyi kaydetmesini istemiyorum. accesde olan verileri bir diziye atayıp girilen değer veri tabanında var mı yok mu diye kontrol ettirme gibi bişey yapabilirim ama o da çok uzun oluyor başka nasıl yapabilirim sizce?

    20 Haziran 2012 Çarşamba 06:41
  • bir tablo için şöyle bişey yaptım ama kaydetmiyo " nesne başvurusu bir nesnenin örneğine ayarlanmadı" diye hata mesajı veriyo yardım edebilir misinz nerde sıkıntı var. ilk başta yazdığm kodlarla main tablosuna kaddettirebiliyorm ama bu şekilde kontrol koyarak yapamıyorm. şimdiden teşekkürler

    kodlar

      private void kontrolSektoril()
            {
                string sorgu;
                sorgu = "SELECT * FROM  IL_CALISAN WHERE  ([Birincil_Sektor]='" + textBox8.Text + "') AND ([il]='" + textBox2.Text + "')";
                OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=OSBLER.accdb");
                conn.Open();
                OleDbCommand kaydet = new OleDbCommand(sorgu);
                kaydet.CommandType = CommandType.Text;
                kaydet.Connection = conn;
                OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand = kaydet;
                DataTable dt = new DataTable();
                da.Fill(dt);
                OleDbDataReader rd = kaydet.ExecuteReader();
                int kactane = 0;
                while (rd.Read())
                {
                    kactane++;
                }
                string[] osbAdı = new string[kactane];
                string[] osbAdı1 = new string[kactane];
                int i = 0;
                while (rd.Read())
                {
                    osbAdı[i] = rd["Birincil_Sektor"].ToString();
                    osbAdı1[i] = rd["il"].ToString();
                }
                int k = 0;
                for (int j = 0; j < kactane; j++)
                {


                    if (textBox8.Text.ToUpper() == osbAdı[j].ToUpper() || textBox2.Text.ToUpper() == osbAdı1[j].ToUpper())
                    {
                        k++;
                    }
                }
                if (k != 0)
                {
                    baglantı.Open();//database baglantısını acar
                    OleDbCommand sektoril = new OleDbCommand("INSERT INTO  SEKTOR_IL ([Birincil_Sektor],[il]) VALUES ('" + textBox8.Text + "','" + textBox2.Text + "')", baglantı);// SEKTÖR_ILE İL VE SEKTÖR KAYDEDER
                    sektoril.Parameters.AddWithValue("[Birincil_Sektor]", textBox8.Text);
                    sektoril.Parameters.AddWithValue("[il]", textBox2.Text);
                    sektoril.ExecuteNonQuery();//kaydetme komutumuzu calıstırır
                    baglantı.Close();//database baglantısını kapatır
                }

            }

    • Düzenleyen ReallyIso 20 Haziran 2012 Çarşamba 09:01
    20 Haziran 2012 Çarşamba 09:00
  • private void kontrolSektoril()
    {
     string sorgu = "SELECT * FROM  IL_CALISAN WHERE  ([Birincil_Sektor]=? AND [il]=?)";
     using(OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=OSBLER.accdb"))
     {
      conn.Open();
      OleDbCommand kaydet = new OleDbCommand();
      kaydet.Connection = conn;
      
      // parametre adlarinin onemi yok, compilerin isine degil senin isine yariyor
      // onemli olan yukaridaki komut cumlesindeki "yer tutucu" ? isaretleriyle ayni
      // sirada eklenmeleri. 
      // Yani ilk eklenen [Birincil_Sektor]=? 
      // ikinci eklenen [il]=? deki ? isaretlerine karsilik.
      
      // Bundan sonrasinda mantiksal hatalar var gibi geldi.
      // -DataTable hic kullanilmiyor
      // -Sektor adi ve il adi hep ayni olacak, kac tane oldugunu sayip olusturdugun
      //  arraydeki degerler hep ayni degil mi? Son bolum oncesi Upper() karsilastirmasi da ayni olacak.
      //  Ozetle, son bolume kadar efektif olarak yapilan sadece kayit varmi yok mu diye bakmak.
      // Var ise aynisini baska bir tabloya ekliyorsun.
      // Veri tabani programlamasi acisindan biraz tehlikeli bir islem ama yapmak istedigin belki de budur.
      // Ben yine de son bolumu "eger Sektor_Il'de yok ise" diye degistiriyorum.
      // Bu arada IL_CALISAN'in bu sekilde bir select ile bir fonksiyonu yok. 
      // Tek amaci "kayit var mi" diye sormak. Baska bir deyisle "bu sartlara uyan kayit sayisi > 0 mi?" 
      // O nedenle asagida "sorgu" da degisti
      
      // yukaridakini ornek olsun diye biraktim.
      kaydet.CommandText = "SELECT count(*) FROM  IL_CALISAN WHERE  ([Birincil_Sektor]=? AND [il]=?)";
    
      kaydet.Parameters.AddWithValue("birincilSektor", textBox8.Text);
      kaydet.Parameters.AddWithValue("il", textBox2.Text);
      
      // bu sorgu tek bir skalar deger donduruyor. Oyleyse ExecuteScalar kullan.
      int kactane = Convert.ToInt32( kaydet.ExecuteScalar );
      conn.Close();
      
      if (kactane != 0)
      {
        baglantı.Open();//database baglantısını acar
        OleDbCommand sektorilVarmi = new OleDbCommand("select count(*) from  SEKTOR_IL where [Birincil_Sektor] = ? and [il] = ?", baglantı);
        sektorilVarmi.Parameters.AddWithValue("[Birincil_Sektor]", textBox8.Text);
        sektorilVarmi.Parameters.AddWithValue("[il]", textBox2.Text);
        
        if ( Convert.ToInt32( sektorilVarmi.ExecuteScalar() ) = 0 ) // 0'dan buyukse kayit zaten var
        {
          OleDbCommand sektoril = new OleDbCommand("INSERT INTO  SEKTOR_IL ([Birincil_Sektor],[il]) VALUES (?, ?)", baglantı);// SEKTÖR_ILE İL VE SEKTÖR KAYDEDER
          sektoril.Parameters.AddWithValue("[Birincil_Sektor]", textBox8.Text);
          sektoril.Parameters.AddWithValue("[il]", textBox2.Text);
          sektoril.ExecuteNonQuery();//kaydetme komutumuzu calıstırır
        }  
        baglantı.Close();//database baglantısını kapatır
      }  
     }
    } 

    Aslinda tum bu islem tek bir SQL ile yapiliyor. Ancak o SQL cumlesini Access destekliyor mu bilemiyorum (tekrar ediyorum, gencligine yazik, Access kullanma. Git Microsoft'un destegini 2015'de kesecegini acikladigi VFP'yi kullan o bile daha iyi ama Access kullanma). Desteklese de o biraz SQL bilgisi gerektiriyor, kafani karistirmayayim.

    Ben yuz kere soylesem de sen Access kullanacaksin (bir musibet bin nasihatten iyidir, musibeti bekleme donemindesin:). Bari hic olmazsa Linq ogren onu kullan. Burada IQToolkit ve Access ararsan daha once ornek de gondermistim.


    20 Haziran 2012 Çarşamba 09:45
  • gerçekten teşekkür ederim. Ben nedenini açıklayayım o zaman staja başlayalı 1 buçuk hafta oldu ve bana bir proje verildi eksik bilgilerim olduğu için nasıl başlasam derken accesde buldum kendimi:) ilk projemi bitirdim ve şimdi güncellemeler falan istendi benden bende netten araştırdıklarım kadarıyla yapmaya çalışıyrum. Bu bitince başka bir projem daha olacak ona nasıl başlamamı tavsiye edersiniz peki? bir kaç bişey kaldı onlarıda yapınca bitiyr o yüzden buna bu şekilde devam etmek zorundaym:) ama diğer projemde o bu kdar kötüyse sıkıntılıysa acces kullanmamaya çalışacm. 

     yazdığınız kodun 

     baglantı.Open();//database baglantısını acar
        OleDbCommand sektorilVarmi = new OleDbCommand("select count(*) from  SEKTOR_IL where [Birincil_Sektor] = ? and [il] = ?", baglantı);
        sektorilVarmi.Parameters.AddWithValue("[Birincil_Sektor]", textBox8.Text);
        sektorilVarmi.Parameters.AddWithValue("[il]", textBox2.Text);

    kısmını anlamadım?? Eğer sadece sizin yazdığınız kodu yazarsam istediğimi yapıyor ama benm önceden çalışan maine kaydetme ile birlikte yazdığımda bağlantı açık mesajı veriyor. 

                 

             try
               {
                   kontrolSektoril();
                   baglantı.Open();//database baglantısını acar
                   OleDbCommand kaydet = new OleDbCommand("INSERT INTO MAİN ([Osb Adı], [İl], [İlçe], [Adres],[Firma Sayısı], [Osbcalisan], [Kuruluş Tarihi],[BirinciSektor], [İkinci Ağırlıklı Sektör],[Üçüncü Ağırlıklı Sektör],[Dördüncü Ağırlıklı Sektör] ,[Beşinci Ağırlıklı Sektör]) VALUES ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "','" + textBox9.Text + "','" + textBox10.Text + "','" + textBox11.Text + "','" + textBox12.Text + "')", baglantı);
                   kaydet.Parameters.AddWithValue("[Osb Adı]", textBox1.Text);
                   kaydet.Parameters.AddWithValue("[İl]", textBox2.Text);
                   kaydet.Parameters.AddWithValue("[İlçe]", textBox3.Text);
                   kaydet.Parameters.AddWithValue("[Adres]", textBox4.Text);
                   kaydet.Parameters.AddWithValue("[Firma Sayısı]", textBox5.Text);
                   kaydet.Parameters.AddWithValue("[Osbcalisan]", textBox6.Text);
                   kaydet.Parameters.AddWithValue("[Kuruluş Tarihi]", textBox7.Text);
                   kaydet.Parameters.AddWithValue("[BirinciSektor]", textBox8.Text);
                   kaydet.Parameters.AddWithValue("[İkinci Ağırlıklı Sektör]", textBox9.Text);
                   kaydet.Parameters.AddWithValue("[Üçüncü Ağırlıklı Sektör]", textBox10.Text);
                   kaydet.Parameters.AddWithValue("[Dördüncü Ağırlıklı Sektör]", textBox11.Text);
                   kaydet.Parameters.AddWithValue("[Beşinci Ağırlıklı Sektör]", textBox12.Text);
                   kaydet.ExecuteNonQuery();//kaydetme komutumuzu calıstırır
                   kontrolSektoril();
                   baglantı.Close();

               }
               catch (Exception e)
               {
                   MessageBox.Show("Kayit yapılamadı. Lutfen tekrar deneyiniz.\n" + e.Message);
               }

    ile birlikte yazınca bağlantı açık kaldı diyor main tablosuna kaydediyor ama bu seferde SEKTOR_IL tablosuna ekleme yapmıyor bağlantlara baktım açtıklarımın hepsi kapalı


    20 Haziran 2012 Çarşamba 12:02
  • yani anlayacağınız ikisini ayrı ayrı deneyince oluyor ikisini bir çalıştırınca bağlantı açık hatası veriyor anlamadım nasıl oluyo:)

    20 Haziran 2012 Çarşamba 12:05
  • baglanti.Open(), baglanti.Close() kodu ikisinde de var. O zaman kodu soyle degistir:

     baglantı.Open();//database baglantısını acar

    yerine:

    var baglantiAcik = ( baglanti.State == ConnectionState.Open );
    
    if ( !baglantiAcik ) {
       baglantı.Open();//database baglantısını acar
    }

    baglantı.Close();//database baglantısını kapatır

    yerine de:

    if (!baglantiAcik) {
       baglantı.Close();//database baglantısını kapatır
    }


    • Yanıt Olarak İşaretleyen ReallyIso 20 Haziran 2012 Çarşamba 13:18
    20 Haziran 2012 Çarşamba 13:17
  • şimdi bende çözdüm diye cevap atacaktım :)) fonksiyon olarak yazdım ve çağırdım bi sıkıntı çıkmadı ve şimdi tam istesiğim gibi güncelleme yapıyor çoookk teşekkür ederim yarımlarınız için :)
    20 Haziran 2012 Çarşamba 13:19
  • Yeni projene nasil baslamalisin. Tavsiye etmek kolay ama uygulayacak olan sensin:) Proje benim olsaydi buyuk ihtimalle MongoDb ile baslardim. MongoDb acik kaynak kodlu, son derece basit ve hizli bir veri tabani. Daha bir suru secenek var ama bu "ben olsaydim" kismi. Bir cogunu zaten arastirdim, bunu sectim yani.

    MongoDb NoSQL grubu veri tabani. Yani simdilik cogunluk icin yabanci olanlardan. SQL serisi veri tabanlari daha yaygin kullanimda. Onlar icinde de benim onerim SQL server. Express versiyonu 10 Gb'a kadar ucretsiz. MS'un amiral gemisi oldugu icin de her turlu destegi once o aliyor (SqlCommand var mesela tamamen ona ozel). SQL server kullanirsan da tavsiyem Linq kullan. O zaman SQL ile ugrasmak zorunda kalmazsin. Sadece C# yeter. Ornegin SQL server ve Linq olsaydi senin yukaridaki kodun soyle birsey olacakti:

    if ( 
          db.Il_Calisan.Any( c => c.Birincil_Sektor = textBox8.Text && c.Il = textBox2.Text) 
          &&
          !db.Sektor_Il.Any( c => c.Birincil_Sektor = textBox8.Text && c.Il = textBox2.Text)
    {
      var yeni = new Sektor_Il {Birincil_Sektor = textBox8.Text,
                                Il = textBox2.Text };
      db.Sektor_Il.Add( yeni );
      db.SaveChanges();
    }
    

    20 Haziran 2012 Çarşamba 13:31
  • iki haftalık bi stajım daha var sql serverden biraz bilgilerim var ama şöyle bişey var benm çekecem veriler bana 10'larca tablo halinde binlerce veri olarak excelde veriliyor bu sıkıntıyı nasıl halletcem peki?
    20 Haziran 2012 Çarşamba 14:01
  • Laf lafi aciyor:)

    O sorun degil. Excel'de gene OleDb araciligiyla verisi okunabilen birsey (icinde tablo yapisinda birseyler varsa okunur). Okuduktan sonra veri tabanina kayit kismi farkililiklar gosterebilir. SQL server'a ise, SqlBulkCopy class bu isin bicilmis kaftan.

    Ornek:

    void Main()
    {
      string sqlConnectionString = @"server=.\SQLExpress;Trusted_Connection=yes;Database=Test";
    
      string path = @"c:\Temp\Customers.xlsx"; // Northwind.mdb'den export
      string sheetName = "Customers$";
      DataTable tbl = new DataTable(); // sadece sonuclari gostermek icin
    
      
      using (OleDbConnection cn = new OleDbConnection(
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+path+
        ";Extended Properties=\"Excel 8.0;HDR=Yes\""))
      using (SqlConnection scn = new SqlConnection( sqlConnectionString ))
      {
        SqlCommand createTemp = new SqlCommand();
        createTemp.CommandText = @"create table ##SqlBulkOrnek 
        (
          [MusteriId] char(6), 
          [Sirket] varchar(50), 
          [IlgiliKisi] varchar(50), 
          [Ulke] varchar(20) 
        )"; 
        createTemp.Connection = scn;
      
        scn.Open();
        createTemp.ExecuteNonQuery();
      
        OleDbCommand cmd = new OleDbCommand(String.Format("select * from [{0}]",sheetName), cn);
        SqlBulkCopy sbc = new SqlBulkCopy(scn, SqlBulkCopyOptions.TableLock,null);
        
        sbc.ColumnMappings.Add(0,"[MusteriId]");
        sbc.ColumnMappings.Add(1,"[Sirket]");
        sbc.ColumnMappings.Add(2,"[IlgiliKisi]");
        sbc.ColumnMappings.Add(8,"[Ulke]");
      
        cn.Open();
        OleDbDataReader rdr = cmd.ExecuteReader();
        
        sbc.NotifyAfter = 100000;
        sbc.BatchSize = 1000;
        sbc.BulkCopyTimeout = 10000;
        sbc.DestinationTableName = "##SqlBulkOrnek";
        
        sbc.SqlRowsCopied += (sender,e) =>
          {
          Console.WriteLine("-- Copied {0} rows to {1}.", 
            e.RowsCopied, 
            ((SqlBulkCopy)sender).DestinationTableName);
          };
        
        sbc.WriteToServer(rdr);
      
        if (!rdr.IsClosed) { rdr.Close(); }
        
        cn.Close();
        // Oku
        SqlCommand cmdRead = new SqlCommand("select * from ##SqlBulkOrnek", scn);
        tbl.Load(cmdRead.ExecuteReader());
        scn.Close();
      }
    
      Form f = new Form();
      DataGridView dgv = new DataGridView();
      dgv.Location = new Point(0, 0);
      dgv.Dock = DockStyle.Fill;
      dgv.DataSource = tbl;
      f.Controls.Add(dgv);
      f.ClientSize = new Size(1024, 768);
      f.ShowDialog();
    
    }
    

    Buradaki ornekte Northwind.mdb'den export edilerek yaratilmis bir excel dosyasindan nasil global gecici bir SQL server dosyasi olusturulacagi gosteriliyor (global gecici dosyalar otomatikman son kullanici baglantisi kapaninca gider. Tablo adinin onundeki ## global temp anlaminda).


    20 Haziran 2012 Çarşamba 16:13
  • teşekkürler gerçekten biraz araştırmalar yapıp bi yerden başlasam ii olacak :)) çok teşekkür ederim tekrardan yardımlarınız için
    21 Haziran 2012 Perşembe 06:15