2015-11-18 94 views
0

我想从我使用的本地数据库检索表的名称。检索表名

此代码我试过,但它从来没有通过foreach循环得好:

public void GetColumnNames() 
    { 
     SqlConnection con; 
     SqlDataAdapter adapter = new SqlDataAdapter(); 
     DataSet ds = new DataSet(); 

     con = new SqlConnection(Properties.Settings.Default.AlhusainSoundDBConnectionString); 

     List<string> colns = new List<string>(); 

      try 
     { 
      con.Open(); 
     } 
     catch (SqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

     foreach (DataTable dt in ds.Tables) 
      { 
       colns.Add(dt.TableName); 
       Console.WriteLine(dt.TableName); 
      } 
    } 

所以,任何人都可以请建议我该怎么做正确

问候

+6

你在哪里填写你的'DS “究竟?我没有看到任何代码可以做到这一点。 –

+0

这里没有实际选择数据库中的数据的代码。 'foreach'不会遍历空集合。 – David

回答

1

要获得表您需要使用的名称INFORMATION_SCHEMA

USE <your_database_name> 
GO 
SELECT * FROM INFORMATION_SCHEMA.TABLES 
1

您有除了打开与数据库的连接外,没有做任何事情。您的数据集尚未填入任何数据。我的方法是使用SqlCommand对象执行下面的SQL语句并填充一个SqlDataReader

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 

因此,C#代码可能是这个样子:

string sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"; 

using (SqlConnection con = new SqlConnection(Properties.Settings.Default.AlhusainSoundDBConnectionString)) 
using (SqlCommand cmd = new SqlCommand(sql, con)) 
{ 
    con.Open(); 
    using (SqlDataReader dr = cmd.ExecuteReader()) 
    { 
     while (dr.Read()) 
     { 
      // do something with each table 
      string tableName= dr["TABLE_NAME"].ToString(); 
      // OR 
      // string tableName = dr[0].ToString(); 
      // OR 
      // string tableName = dr.GetString(0); 
     } 
    } 
} 
+0

非常感谢,现在我该如何从阅读器获取表名? @snow_FFFFFF –

+0

@AliAlhamaly在'while'期间,你逐行获取数据,你只需要访问datareader,你可以在这里看到:http://stackoverflow.com/questions/4018114/read-data-from-sqldatareader – DatRid

+0

更新了答案,详细了解了读者的价值 –