示範三項核心功能:
protected void Button1_Click(object sender, EventArgs e)
{
// 1. 列舉內網 SQL Server 實例
System.Data.Sql.SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
DataTable dt1 = instance.GetDataSources();
Response.Write("目前內網可用的SqlServer<br/>");
foreach (DataRow dr in dt1.Rows)
{
Response.Write(dr[0].ToString() + "<br/>");
}
Response.Write("==========================<br/>");
// 2. 取得資料庫結構描述
string strConn = "Data Source=192.168.0.36;Initial Catalog=NorthWind;Persist Security Info=True;User ID=sa;PassWord=sa";
using (System.Data.SqlClient.SqlConnection conn = new SqlConnection(strConn))
{
conn.Open();
DataTable dt2 = conn.GetSchema();
Response.Write("資料庫的結構描述集合<br/><table border='1'>");
foreach (DataRow row in dt2.Rows)
{
Response.Write("<tr>");
foreach (DataColumn col in dt2.Columns)
{
Response.Write("<td>" + col.ColumnName + "</td><td>" + row[col] + "</td>");
}
Response.Write("</tr>");
}
Response.Write("</table><br/>");
// 3. 列出使用者資料表
string[] restrictions = new string[4];
restrictions[3] = "BASE TABLE"; // 只取資料表,不含檢視
DataTable dt3 = conn.GetSchema("Tables", restrictions);
Response.Write("==========================<br/>某資料庫下的使用者資料表名<br/>");
foreach (DataRow dr in dt3.Rows)
{
Response.Write(dr["TABLE_NAME"].ToString() + "<br/>");
}
}
}
SqlDataSourceEnumerator.Instance.GetDataSources():發現網路上可見的 SQL Server 實例。SqlConnection.GetSchema():取得資料庫中繼資料,不帶參數回傳結構描述集合清單;帶 "Tables" 與限制陣列可篩選資料表/檢視。