[KB]如何取得特定資料表的Schema?

[KB]如何取得特定資料表的Schema?

過去如果我們要取得資料表的Schema,我們可以透過下列方式處理:

1. 透過SQL Server內建的Store Procedure - 使用GridView顯示Sql資料庫的Table Layout(Schema) –小喵大

2. 或是透過傳遞SQL Select語法到SQL Server作查詢 - [SQL] 常用查DB Schema 的語法 – siro228.

 

其實,.Net Framework中有提供一個另一種方法(For SQL & Oracle) – Connection.GetSchema

 

這個方法要怎使用呢?

1. 查詢SQL Server有哪些資料庫:

        conn.Open();
        DataTable dt = conn.GetSchema("DataBases");
        conn.Close();
        GridView1.DataSource = dt;
        GridView1.DataBind();

 

顯示結果:

image

 

2. 查詢SQL Server某個資料表中的Table資訊:

        conn.Open();
        DataTable dt = conn.GetSchema("Tables");
        conn.Close();
        GridView1.DataSource = dt;
        GridView1.DataBind();

 

顯示結果:

image

 

但是如果你要只要某個Table,可以這麼寫:

        restrictions[0] = "Northwind";
        restrictions[2] = "Employees";


        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connStr);
        conn.Open();
        DataTable dt = conn.GetSchema("Tables", restrictions);
        conn.Close();
        GridView1.DataSource = dt;
        GridView1.DataBind();

 

顯示結果:

image

 

這裡你們一定會有疑問,參數要怎給?可以參考下表: (用「給參數」的方式是避免SQL Injection)

image

 

這個參數對照表要怎來?可以查MSDN 或是透過下列程式碼:

        conn.Open();
        DataTable dt = conn.GetSchema("Restrictions");
        conn.Close();
        GridView1.DataSource = dt;
        GridView1.DataBind();

 

 

 

那要取得Table欄位呢?

        conn.Open();
        DataTable dt = conn.GetSchema("Columns");
        conn.Close();
        GridView1.DataSource = dt;
        GridView1.DataBind();

 

顯示結果:

image

 

取得特定Table的欄位:

        restrictions[0] = "Northwind";
        restrictions[2] = "Employees";


        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connStr);
        conn.Open();
        DataTable dt = conn.GetSchema("Columns", restrictions);
        conn.Close();
        GridView1.DataSource = dt;
        GridView1.DataBind();

 

 

顯示結果:

image

 

 

接下來,我們來測試一下SQL Server 2K8新的DataType能不能抓到?

1. 先建立一個測試資料表:

image

 

2. 透過下列程式碼處理:

        restrictions[0] = "Test";
        restrictions[2] = "Test2K8";


        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connStr);
        conn.Open();
        DataTable dt = conn.GetSchema("Columns", restrictions);
        conn.Close();
        GridView1.DataSource = dt;
        GridView1.DataBind();

 

3. 顯示結果:

image

 

當然Oracle也有提供這個方法 http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleconnection.getschema.aspx

 

 

 

 

 

請參考:

1. Schema Restrictions (ADO.NET)

2. 使用 GetSchema 方法

3. Retrieving Database Schema Information (ADO.NET) 

 

 

延伸閱讀:

SqlDataReader..::.GetSchemaTable Method

 

 

如果您有微軟技術開發的問題,可以到MSDN Forum發問。

如果您有微軟IT管理的問題,可以到TechNet Forum發問喔。