[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();
顯示結果:
2. 查詢SQL Server某個資料表中的Table資訊:
conn.Open();
DataTable dt = conn.GetSchema("Tables");
conn.Close();
GridView1.DataSource = dt;
GridView1.DataBind();
顯示結果:
但是如果你要只要某個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();
顯示結果:
這裡你們一定會有疑問,參數要怎給?可以參考下表: (用「給參數」的方式是避免SQL Injection)
這個參數對照表要怎來?可以查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();
顯示結果:
取得特定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();
顯示結果:
接下來,我們來測試一下SQL Server 2K8新的DataType能不能抓到?
1. 先建立一個測試資料表:
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. 顯示結果:
當然Oracle也有提供這個方法 http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleconnection.getschema.aspx
請參考:
1. Schema Restrictions (ADO.NET)
3. Retrieving Database Schema Information (ADO.NET)
延伸閱讀:
SqlDataReader..::.GetSchemaTable Method
如果您有微軟技術開發的問題,可以到MSDN Forum發問。
如果您有微軟IT管理的問題,可以到TechNet Forum發問喔。