如何在C#中加载DataBase及其表名

时间:2013-12-12 12:09:01

标签: c# sql visual-studio-2008

我正在尝试在Windows窗体中加载数据库名称及其表名。

我使用此代码获取系统中的服务器名称

private void ServerName()
       {
           try
           {

               DataTable dt = SmoApplication.EnumAvailableSqlServers(true);
               if (dt.Rows.Count > 0)
               {
                   foreach (DataRow dr in dt.Rows)
                   {
                       string serverName = dr[0].ToString();
                       if (!serverName.Contains("\\SQLEXPRESS"))
                       {
                           serverName = serverName + "\\SQLEXPRESS";
                       }
                       comboBox1.Items.Add(serverName);
                   }
                   comboBox1.Items.Add(@".\sqlexpress");
               }
           }
           catch (Exception)
           {
               MessageBox.Show("Problem In Fetching Server Information.");
           }

       }

我用来加载该特定服务器的数据库名称。

enter code here

private void DBnames()
        {
            server = comboBox1.SelectedItem.ToString();
            database = "master";
            con = new SqlConnection(@"Data Source=" + server + ";Initial Catalog=" + database + ";Integrated Security=True;");
            con.Open();
            da = new SqlDataAdapter("SELECT name FROM sys.databases", con);
            ds = new DataSet();
            da.Fill(ds);
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                comboBox2.Items.Add(ds.Tables[0].Rows[i][0]);
            }
            con.Close();
        }

现在我想加载此数据库的表名

我使用此代码

private void TBnames()
        {
            con.Open();
            da = new SqlDataAdapter("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'",con);
            ds = new DataSet();
            da.Fill(ds);
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                comboBox3.Items.Add(ds.Tables[0].Rows[i][0]);
            }



            con.Close();

        }

但它不起作用。请帮助我获取所选数据库的表格。

提前致谢..

现在我得到了答案..

只需更改TBnames中的代码:

private void TBnames()
            {
                con.Open();
                string s = comboBox2.Text;
               // MessageBox.Show(s);
                cmd = new SqlCommand("Use " + s, con);
                cmd.ExecuteNonQuery();
                da = new SqlDataAdapter("SELECT * FROM sys.tables", con);
                ds = new DataSet();
                da.Fill(ds);
                //dataGridView1.DataSource = ds.Tables[0];
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    comboBox3.Items.Add(ds.Tables[0].Rows[i][0]);
                }
                con.Close();
            }

它正在运作..

1 个答案:

答案 0 :(得分:0)

使用LINQ可能:)

using (var db = new DataClassesDataContext(getConnectionString))
{
    db.Mapping.GetTables();
}

http://msdn.microsoft.com/en-us/library/bb655883(v=vs.90).aspx