none
C# da sql server tabloları cekme hatası RRS feed

  • Soru

  • Öncelikle merhabalar arkadaslar,

    C# da üzerinde calıstıgım proje herhangi bir database i attach ettirme ve o database e ait tabloları cekme.

    Aşagıda belirttiğim hata konusunda bana yardımcı olabilirmisiniz. 

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    public void tabloListele()
            {
                string SQL = "USE [ " + zDatabase+ " ] "
                            + "GO "
                            + "SELECT table_name FROM INFORMATION_SCHEMA.tables";
                cmd = new SqlCommand (SQL, cnn);
                cmd.CommandType = CommandType.Text;
                cmd.Connection = cnn;
                cmd.CommandText = SQL;
                adapt = new SqlDataAdapter(cmd);
                DataTable dt =new DataTable ();
                try
                {
                    adapt.Fill(dt);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Tablo listesi alınamadı. Hata:" + ex.Message);
                    return;
                }
            }

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    Hata : Could not locate entry in sysdatabases for database 'myDatabase'. No entry found with that name . Make sure that the name is entered correctly.



    24 Temmuz 2012 Salı 21:26

Yanıtlar

  • Ben de sana diyorum ki, onu kullanmadan once baglanti cumlenin dogrulugunu kontrol etmek icin once o kodu kullan. INFORMATION_SCHEMA viewlari ISO destegi icin. Dogru yere baglanamazsan gorebilecegin birsey yok. Eger ben baglandim sorun orada degil diyorsan cok basit. Diyelim ki baglandigin yerde "Northwind" adinda bir database var onun tablolarini istiyorsun:

    void Main()
    {
      DataTable tbl = new DataTable();
      
      string baglanti = @"server=.\SQLExpress;Trusted_Connection=yes";
      
      using (SqlConnection con = new SqlConnection(baglanti))
      {
        SqlCommand cmd = new SqlCommand("SELECT * FROM Northwind.INFORMATION_SCHEMA.tables",con);
        con.Open();
        
        tbl.Load( cmd.ExecuteReader() );
        
        con.Close();
      }
      // tablo ile ne yapacaksan
    }
    

    27 Temmuz 2012 Cuma 14:45
    Yanıtlayıcı

Tüm Yanıtlar

  • Merhaba Remzi Komerik;

    Tam emin olamadım ama SqlConnection ında sıkıntı olabilir .. Senin Yazdığın gibi bir Select sorgusunda MASTER Database'ine bağlanman gerekir. Denemek İstersen Ben bu şekilde Kullanıyorum SqlConnectionunda Veritabanı Adını Verip Direk O DB'yi USE Etmiş oluyorum

                SqlConnection cnn = new SqlConnection("Server=.;Database=" + "Tablolarını Seçmek İstediğin Veritabanı Adı Buraya Gele" + ";Integrated Security=SSPI;");
                SqlCommand cmd = new SqlCommand("select t.name from sys.Tables as t where t.name <> 'sysdiagrams'", cnn);
                // Sysdiagram dışındaki Tablo İsimlerini aldık
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                adp.Fill(dt);
                adp.Dispose();


    Jesus Promised The End Of All Wicked People, ODIN Promised The End Of All Ice Giants. I Don't See Many Ice Giants Around... exe[nokta]cute[at]live[nokta]com


    • Düzenleyen Exe.Cute 24 Temmuz 2012 Salı 21:55
    24 Temmuz 2012 Salı 21:54
  • sql cümlenin içerisinde "GO" kullanma, zaten connectionstring'inde hangi veritabanında çalışacağını belli ediyorsun o kısmı kaldırıp dener misin

    Eğer doğru cevap vermiş isem lütfen yanıtlandı olarak işaretleyin, yardımcı olmuş isem lütfen yardımcı olarak oylayın.
    Please mark my reply as answered if it works or vote as helpful if it gives you some idea.

    24 Temmuz 2012 Salı 22:18
  • Anlasilan cnn.ConnectionString de "myDatabase" geciyor ve o database senin baglandigin serverda yok. Neler var ona bak. OleDbConnection kullanarak hem hangi databaseler (OleDbConnection'da catalog) hem de bu database'lerde hangi tablolar var inceleyebilirsin. Bunu ne yazik ki SqlConnection ile yapamazsin cunku OleDbConnection aksine SqlConnection Tables bilgisini vermek icin ilgili database'e baglanmis olmani isiyor.

    using System;
    using System.Data;
    using System.Data.OleDb;
    
    using System.Windows.Forms;
    using System.Drawing;
    
    class DatabaseDiscovery
    {
        static void Main()
        {
            string strCon = @"Provider=SQLNCLI;server=.\SQLExpress;Trusted_Connection=yes";
    
            OleDbConnection con = new OleDbConnection(strCon);
            con.Open();
    
            DataTable d = con.GetSchema("catalogs");
            foreach (DataRow db in d.Rows)
            {
    
                // Database adi
                string dbName = (string)db["CATALOG_NAME"];
                // Bu database'deki kullanici tablolari
                DataTable t = con.GetSchema("tables", new string[] { dbName, null, null, "TABLE" });
    
                // system veri tabanlarinda kullanici tablosu yok, ya da bos veri tabanlarini atla
                if (t.Rows.Count > 0)
                {
                    // Goster
                    Form f = new ShowDataForm(t, string.Format("Tables in {0}", dbName));
                    f.ShowDialog();
                }
                else
                {
                    Console.WriteLine("{0} veri tabaninda kullanici tablosu yok.", dbName);
                }
            }
    
            con.Close();
    
        }
    }
    
    public class ShowDataForm : Form
    {
      public ShowDataForm(DataTable tbl, string caption)
      {
         this.dgv = new System.Windows.Forms.DataGridView();
         this.dgv.Location = new System.Drawing.Point(0, 0);
         this.dgv.Dock = DockStyle.Fill;
         this.dgv.DataSource = tbl;
         this.Text = caption;
         this.Controls.Add(this.dgv);
         this.ClientSize = new System.Drawing.Size(1024, 768);
      }
      private System.Windows.Forms.DataGridView dgv;
    }

    25 Temmuz 2012 Çarşamba 10:24
    Yanıtlayıcı
  • SELECT table_name FROM INFORMATION_SCHEMA.tables

    Yukarıdaki sql cümlesini kullanarak tablolarıma erişmem lazım.. Bu konuda bana yardım edebilirmisiniz.. 

    @CetinBasoz yaptıgınız ornek gercekten cok iyi ama dediğim gibi yukarıda belirttiğim sql cümlesini kullanarak tablolarımı cekmem lazım..

    27 Temmuz 2012 Cuma 13:10
  • Ben de sana diyorum ki, onu kullanmadan once baglanti cumlenin dogrulugunu kontrol etmek icin once o kodu kullan. INFORMATION_SCHEMA viewlari ISO destegi icin. Dogru yere baglanamazsan gorebilecegin birsey yok. Eger ben baglandim sorun orada degil diyorsan cok basit. Diyelim ki baglandigin yerde "Northwind" adinda bir database var onun tablolarini istiyorsun:

    void Main()
    {
      DataTable tbl = new DataTable();
      
      string baglanti = @"server=.\SQLExpress;Trusted_Connection=yes";
      
      using (SqlConnection con = new SqlConnection(baglanti))
      {
        SqlCommand cmd = new SqlCommand("SELECT * FROM Northwind.INFORMATION_SCHEMA.tables",con);
        con.Open();
        
        tbl.Load( cmd.ExecuteReader() );
        
        con.Close();
      }
      // tablo ile ne yapacaksan
    }
    

    27 Temmuz 2012 Cuma 14:45
    Yanıtlayıcı