2011-07-12 33 views

回答

25

System.Data.SqlClient有你需要什麼沒有一個正式的查詢上sys.Tables(儘管這是它在後臺使用的)。在SqlConnection對象上使用GetSchema()方法,並指定您需要「表格」,它將向您發送一個DataTable對象,併爲每個表格返回一行。它在每一行(以該列順序)發回數據庫名稱,表格模式名稱,表格名稱和表格類型。該代碼是這樣的:

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

連接被封裝在使用塊中,所以一旦代碼退出塊,連接就會關閉。 – Tim

1

我認爲這個SQL應該返回包含在你的數據庫表名的表:

SELECT * FROM information_schema.tables 
4

對於SQL Server 2005及更高版本:

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

既然你已經關閉SqlConnection已經,爲什麼不使用.GetSchema(「表「)? –

2

要提取數據庫(SQLSERVER)中的所有用戶定義的表,我們必須查詢系統目錄。

SELECT Name from Sysobjects where xtype = 'u' 

此查詢將返回所有用戶定義的表中的數據庫

0

這是我的解決方案:

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(); 
    } 
相關問題