2011-07-12 29 views

Odpowiedz

25

System.Data.SqlClient ma co trzeba bez formalnego zapytania na sys.Tables (choć to jest to, czego używa w tle). Użyj metody GetSchema() na obiekcie SqlConnection i oznacz, że chcesz "Tabele" i wyśle ​​ci obiekt DataTable z powrotem z wierszem dla każdej tabeli. Wysyła nazwę bazy danych, nazwę schematu tabeli, nazwę tabeli i typ tabeli w każdym wierszu (w tej kolumnie). Kod będzie wyglądać następująco:

public static List<string> GetTables(string connectionString) 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     connection.Open(); 
     DataTable schema = connection.GetSchema("Tables"); 
     List<string> TableNames = new List<string>(); 
     foreach (DataRow row in schema.Rows) 
     { 
      TableNames.Add(row[2].ToString()); 
     } 
     return TableNames; 
    } 
} 
+9

Połączenie jest zawijane w bloku używanym, więc połączenie jest zamykane, gdy kod wychodzi z bloku. – Tim

1

myślę, że to SQL powinien zwrócić tabelę zawierającą tableNames w swojej DB:

SELECT * FROM information_schema.tables 
4

Dla SQL Server 2005 i wyższa:

using (SqlConnection connection = new SqlConnection(@"Data Source=(local);Integrated Security=True;Initial Catalog=DB_Name;")) { 
    connection.Open(); 

    using (SqlCommand command = connection.CreateCommand()) { 
     command.CommandText = 
      @"SELECT s.name, o.name 
      FROM sys.objects o WITH(NOLOCK) 
      JOIN sys.schemas s WITH(NOLOCK) 
      ON o.schema_id = s.schema_id 
      WHERE o.is_ms_shipped = 0 AND RTRIM(o.type) = 'U' 
      ORDER BY s.name ASC, o.name ASC"; 

     using (SqlDataReader reader = command.ExecuteReader()) { 
      while (reader.Read()) { 
       string schemaName = reader.GetString(0); 
       string tableName = reader.GetString(1); 

       // your code goes here... 
      } 
     } 
    } 
} 
+0

Skoro masz już SqlConnection, dlaczego nie korzystać .GetSchema ("Stoły ")? –

2

Aby pobrać wszystkie zdefiniowane przez użytkownika tabelach z bazy danych (sqlserver), mamy do kwerendy katalogów systemowych.

SELECT Name from Sysobjects where xtype = 'u' 

ta kwerenda zwróci wszystkie zdefiniowane przez użytkownika tabele w DataBase

0

to moje rozwiązanie:

public void opencon() 
    { 
     if (conn == null) 
     { 
      conn = new SqlConnection(@"Your connection"); 
     } 
     if (conn.State == ConnectionState.Closed) 
     { 
      conn.Open(); 
     } 
    } 
    public void Closecon() 
    { 
     if ((conn != null) && (conn.State == ConnectionState.Open)) 
     { 
      conn.Close(); 
     } 
    } 
    public void GetTables(ComboBox cb) 
    { 
      chuoiketnoi(); 
      DataTable schema = conn.GetSchema("Tables"); 
      foreach (DataRow row in schema.Rows) 
      { 
       cb.Items.Add(row[2].ToString()); 
      } 
      dongketnoi(); 
    } 
Powiązane problemy