2015-11-18 2 views
0

Я пытаюсь получить имена таблицы из локальной базы данных, которую я использую.Получить имена таблиц

Это код, который я пробовал, но он никогда не проходит через петлю Еогеасп:

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

Где вы заполнить ваши 'дц 'точно? Я не вижу код _any_ для этого. –

+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

обновил ответ с некоторыми подробностями о получении значений от читателя –

Смежные вопросы