none
Veri tabanındaki bütün tablolarda sorgu RRS feed

  • Soru

  • Merhaba arkadaşlar aşağıdaki kod ile bir tabloda aynı kayıt uyarısı almayı sağlıyorum. bu sefer yapmaya çalıştığım şey veri tabanında bulunan bütün tablolarda bu sorguyu gerçekleştirmesi. bunu nasıl yapabilirim.

    private void kontrol()
            {
                 using (SqlConnection Con = new SqlConnection("server=192.168.1.186;database=PersonelTakip;UID=erkan;pwd=845645;MultipleActiveResultSets=True"))
                {
                baglanti.Open();
                string XTabloAdi = comboBoxFİRMA.Text;
                    string varmi = "SELECT AdSoyad FROM " + XTabloAdi + " WHERE AdSoyad=@AdSoyad";
    
                SqlCommand komut = new SqlCommand(varmi, baglanti);
    
                komut.Parameters.AddWithValue("@AdSoyad", textBoxAD.Text);
    
                if (komut.ExecuteScalar() != null)
    
                    MessageBox.Show("Kayıt zaten var");
                else
                    MessageBox.Show("Kayıt Bulunamadı ");
              }
            }

    3 Şubat 2018 Cumartesi 09:47

Yanıtlar

  • QUOTENAME silinmemiş görünüyor. Bunu kullanın...

    private string hangiTabloda(string AdSoyad)
    {
        string sonuc = "";
        using (SqlConnection baglanti = new SqlConnection("server=192.168.1.186;database=PersonelTakip;UID=erkan;pwd=erkan123;MultipleActiveResultSets=True"))
        {
            baglanti.Open();
            DataTable Tablolar = baglanti.GetSchema("Tables");
            foreach (DataRow tablo in Tablolar.Rows)
            {
                using (SqlCommand komut = new SqlCommand(string.Format("SELECT [AdSoyad] FROM [{0}] WHERE [AdSoyad]=@AdSoyad", tablo["TABLE_NAME"].ToString()), baglanti))
                {
                        komut.Parameters.AddWithValue("@AdSoyad", AdSoyad);
                        if (komut.ExecuteScalar() != null)
                            sonuc = tablo["TABLE_NAME"].ToString();
                }
            }
        }
        return sonuc;
    }


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Erkan KESEMEN 7 Şubat 2018 Çarşamba 09:12
    7 Şubat 2018 Çarşamba 06:27

Tüm Yanıtlar

  • Bu istek çok genel ve yönetimi zor, eğer sütünlar hepsinde varsa (aradığınız sütunlar) çok urağştırmaz ama eğer sadece belirli tablolar bunu sağlıyorsa try catch ile döngüde kontrol edebilrsiniz.

    Peki neyi ne döngüsünde kontrol edeceksiniz?

    Önce tabloları alacağız (örneğin), bunu bir döngü içinde düşünebiliriz, döngü esnasında yukardaki sorgunun bir benzerini çalıştırıp kontrol edebilirsiniz. Kontrol ettiğiniz if sorgusu veya kod bloğunu try catch içine alıp ilgili sütunların olmadığı durumları göz ardı etmiş olursunuz.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    3 Şubat 2018 Cumartesi 17:44
  • Cevabınız için teşekkür ederim. serverda arama yapmak istediğim 2 tane veri tabanı ve bunların altlarında bulunan tablolar var bütün tabloların kalıp olarak içeriği aynı. personel takip sistemim var amacım bir firmaya personel girişi yaparken eğer o personel başka bir firmada çalışmışsa bana uyarı versin istiyorum "bu personel daha önce x firmasında çalışmıştır. " gibi... 
    3 Şubat 2018 Cumartesi 20:39
  • Günceldir
    4 Şubat 2018 Pazar 17:07
  • using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace ConsoleApp17
    {
        class Program
        {
            static void Main(string[] args)
            {
                kontrol();
            }
    
            public static IList<string> ListTables(SqlConnection con)
            {
                List<string> tables = new List<string>();
                DataTable dt = con.GetSchema("Tables");
                foreach (DataRow row in dt.Rows)
                {
                    string tablename = (string)row[2];
                    tables.Add(tablename);
                }
    
                return tables;
            }
    
            private static void kontrol()
            {
                using (SqlConnection baglanti = new SqlConnection("server=192.168.1.186;database=PersonelTakip;UID=erkan;pwd=845645;MultipleActiveResultSets=True"))
                {
                    baglanti.Open();
    
                    IList<string> tumTablolar = ListTables(baglanti);
    
                    foreach (string tabloAdi in tumTablolar)
                    {
                        //string XTabloAdi = comboBoxFİRMA.Text;
                        string XTabloAdi = "Firma Adı";
                        string varmi = "SELECT AdSoyad FROM " + XTabloAdi + " WHERE AdSoyad=@AdSoyad";
    
                        SqlCommand komut = new SqlCommand(varmi, baglanti);
    
                        komut.Parameters.AddWithValue("@AdSoyad", "textBoxAD.Text");
    
                        if (komut.ExecuteScalar() != null)
                        {
                            Console.WriteLine("Kayıt zaten var");
                        }
                        else
                        {
                            Console.WriteLine("Kayıt bulunamadı");
                        }
                    }
                }
            }
        }
    }
    

    Yukarda verilen cevaptaki linkte gösterilen yöntemi kullandım.  Kendi sistemimde derleyebilmek iiçin sizin textbox'ları basit text yaptım.  Hatasız derleniyor fakat çalışmasını test etmedim.

    Gösterilen yöntem bir veritabanı için.  Diğer veritabanı için bağlantı parametresini değiştirerek yeniden derleyin.  O kısım için döngü koymadım.

    4 Şubat 2018 Pazar 18:01
  • cevabınız için teşekkür ederim. Kodları denedim ama şöyle bir hata alıyorum. 

    Additional information: Invalid object name 'Firma'.   sorun sizce nerede olabilir. 

    hatayı aldığım kısım aşağıdaki koyu renkli yer.

    private static void kontrol()
            {
                using (SqlConnection baglanti = new SqlConnection("server=192.168.1.186;database=PersonelTakip;UID=erkan;pwd=845645;MultipleActiveResultSets=True"))
                {
                    baglanti.Open();
    
                    IList<string> tumTablolar = ListTables(baglanti);
    
                    foreach (string tabloAdi in tumTablolar)
                    {
                        //string XTabloAdi = comboBoxFİRMA.Text;
                        string XTabloAdi = "Firma Adı";
                        string varmi = "SELECT AdSoyad FROM " + XTabloAdi + " WHERE AdSoyad=@AdSoyad";
    
                        SqlCommand komut = new SqlCommand(varmi, baglanti);
    
                        komut.Parameters.AddWithValue("@AdSoyad", "textBoxAD.Text");
    
                        if (komut.ExecuteScalar() != null) //hatayı aldığım kısım
                        {
                            Console.WriteLine("Kayıt zaten var");
                        }
                        else
                        {
                            Console.WriteLine("Kayıt bulunamadı");
                        }
                    }
                }
            }
        }
    }

    5 Şubat 2018 Pazartesi 09:54
  • Şu kısmı değiştirdiniz mi?

    string XTabloAdi = "Firma Adı";

    Bunun yerinde:

    string XTabloAdi = comboBoxFİRMA.Text;

    olması gerek.

    5 Şubat 2018 Pazartesi 10:06
  • FİRMA'da İ harfi I harfi karışıklığı olabilir mi?
    5 Şubat 2018 Pazartesi 10:26
  • Şu kısmı değiştirdiniz mi?

    string XTabloAdi = "Firma Adı";

    Bunun yerinde:

    string XTabloAdi = comboBoxFİRMA.Text;

    olması gerek.

    bu dediğinizi yaptım ama hiç bir şey olmuyor bu seferde 
    5 Şubat 2018 Pazartesi 10:28
  • comboBoxFİRMA.Text;
    Buradaki değer nedir?
    5 Şubat 2018 Pazartesi 10:33
  • şöyle söyleyeyim ben comboBoxFİRMA ile veri tabanındaki tabloları listeliyorum. burada seçtiğim tabloya ait verileri gridviewe aktarıyorum. Şuanki amacım personel kayıt yaparken aynı personel diğer firmalarda çalışmışsa uyarı versin istiyorum. ben tablo ismi girmeden veri tabanında bulunan bütün tablolarda bu personeli arasın bulsun ve beni uyarsın istiyorum
    5 Şubat 2018 Pazartesi 11:03
  • Güncel
    6 Şubat 2018 Salı 09:58

  • Breakpoint kullanmayı biliyor musunuz?
    6 Şubat 2018 Salı 10:08
  • private string hangiTabloda(string AdSoyad)
    {
        string sonuc = "";
        using (SqlConnection baglanti = new SqlConnection("server=192.168.1.186;database=PersonelTakip;UID=erkan;pwd=845645;MultipleActiveResultSets=True"))
        {
            baglanti.Open();
            DataTable Tablolar = baglanti.GetSchema("Tables");
            using (SqlCommand komut = new SqlCommand("SELECT [AdSoyad] FROM [@tablo] WHERE [AdSoyad]=@AdSoyad", baglanti))
            {
                foreach (DataRow tablo in Tablolar.Rows)
                {
                    komut.Parameters.AddWithValue("@tablo", tablo["TABLE_NAME"].ToString());
                    komut.Parameters.AddWithValue("@AdSoyad", AdSoyad);
                    if (komut.ExecuteScalar() != null)
                        sonuc = tablo["TABLE_NAME"].ToString();
                 }
            }
        }
        return sonuc;
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        string tablo = hangiTabloda(textBoxAD.Text);
        if (tablo != "")
            MessageBox.Show(string.Format("{0} isimli kayıt {1} tablosunda bulundu...", textBoxAD.Text, tablo));
    }


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...



    6 Şubat 2018 Salı 10:37
  • Breakpoint kullanmayı maalesef bilmiyorum. Verdiğiniz kodu denedim ama aşağıdaki hatayı aldım.

    Additional information: Invalid object name 'QUOTENAME'.


    private string hangiTabloda(string AdSoyad)
             {
                 string sonuc = "";
                 using (SqlConnection baglanti = new SqlConnection("server=192.168.1.186;database=PersonelTakip;UID=erkan;pwd=erkan123;MultipleActiveResultSets=True"))
                 {
                     baglanti.Open();
                     DataTable Tablolar = baglanti.GetSchema("Tables");
                     using (SqlCommand komut = new SqlCommand("SELECT [AdSoyad] FROM QUOTENAME(@tablo) WHERE [AdSoyad]=@AdSoyad", baglanti))
                     {
                         foreach (DataRow tablo in Tablolar.Rows)
                         {
                             komut.Parameters.AddWithValue("@tablo", tablo["TABLE_NAME"].ToString());
                             komut.Parameters.AddWithValue("@AdSoyad", AdSoyad);
                             if (komut.ExecuteScalar() != null) //Additional information: Invalid object name 'QUOTENAME'.
                                 sonuc = tablo["TABLE_NAME"].ToString();
                         }
                     }
                 }
                 return sonuc;
             }

    6 Şubat 2018 Salı 11:30
  • QUOTENAME kullanımının desteklenmediği bir sürüm kullanıyor olabilirsiniz.

    Bu nedenle QUOTENAME(@tablo) yerine [@tablo] yazarak kullanabilirsiniz...


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    6 Şubat 2018 Salı 12:03
  • Belirttiğiniz gibi kodları değiştirdim bu seferde aşağıdaki sorun çıktı. acaba veri tabanımdaki tablolarda "tablo" adında bir column mu olması gerekir?


    Additional information: Invalid object name '@tablo'.

    private string hangiTabloda(string AdSoyad)
             {
                 string sonuc = "";
                 using (SqlConnection baglanti = new SqlConnection("server=192.168.1.186;database=PersonelTakip;UID=erkan;pwd=erkan123;MultipleActiveResultSets=True"))
                 {
                     baglanti.Open();
                     DataTable Tablolar = baglanti.GetSchema("Tables");
                     using (SqlCommand komut = new SqlCommand("SELECT [AdSoyad] FROM QUOTENAME(@tablo) WHERE [AdSoyad]=@AdSoyad", baglanti))
                     {
                         foreach (DataRow tablo in Tablolar.Rows)
                         {
                             komut.Parameters.AddWithValue("@tablo", tablo["TABLE_NAME"].ToString());
                             komut.Parameters.AddWithValue("@AdSoyad", AdSoyad);
                             if (komut.ExecuteScalar() != null) //Additional information: Invalid object name '@tablo'.
                                 sonuc = tablo["TABLE_NAME"].ToString();
                         }
                     }
                 }
                 return sonuc;
             }



     
    7 Şubat 2018 Çarşamba 06:02
  • QUOTENAME silinmemiş görünüyor. Bunu kullanın...

    private string hangiTabloda(string AdSoyad)
    {
        string sonuc = "";
        using (SqlConnection baglanti = new SqlConnection("server=192.168.1.186;database=PersonelTakip;UID=erkan;pwd=erkan123;MultipleActiveResultSets=True"))
        {
            baglanti.Open();
            DataTable Tablolar = baglanti.GetSchema("Tables");
            foreach (DataRow tablo in Tablolar.Rows)
            {
                using (SqlCommand komut = new SqlCommand(string.Format("SELECT [AdSoyad] FROM [{0}] WHERE [AdSoyad]=@AdSoyad", tablo["TABLE_NAME"].ToString()), baglanti))
                {
                        komut.Parameters.AddWithValue("@AdSoyad", AdSoyad);
                        if (komut.ExecuteScalar() != null)
                            sonuc = tablo["TABLE_NAME"].ToString();
                }
            }
        }
        return sonuc;
    }


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Erkan KESEMEN 7 Şubat 2018 Çarşamba 09:12
    7 Şubat 2018 Çarşamba 06:27
  • Teşekkür ederim iyi çalışmalar dilerim.
    7 Şubat 2018 Çarşamba 09:22