2011-07-12 15 views

Respuesta

25

System.Data.SqlClient tiene lo que necesita sin una consulta formal sobre sys.Tables (aunque eso es lo que está usando en el fondo). Utilice el método GetSchema() en el objeto SqlConnection y designe que desea las "Tablas" y le enviará un objeto DataTable con una fila para cada tabla. Devuelve el nombre de la base de datos, el nombre del esquema de la tabla, el nombre de la tabla y el tipo de tabla en cada fila (en el orden de esa columna). El código se vería así:

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

La conexión está envuelta en un bloque de uso, por lo que la conexión se cierra una vez que el código sale del bloque. – Tim

1

creo que este SQL debe devolver una tabla que contiene los nombres de tablas en su base de datos:

SELECT * FROM information_schema.tables 
4

Para SQL Server 2005 y superior:

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

Dado que usted tiene la SqlConnection ya, por qué no usar .GetSchema ("Tablas ")? –

2

a buscar todas las tablas definidas por el usuario de la base de datos (SQLServer), tenemos que consultar los catálogos del sistema.

SELECT Name from Sysobjects where xtype = 'u' 

esta consulta devolverá tablas definidas todos los usuarios de la Base de Datos

0

esta mi solución:

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(); 
    } 
Cuestiones relacionadas