朝花夕拾:代码生成器的基础——获取数据源的架构信息
最近在做一個代碼生成工具,在制作的過程中,掌握了獲取數據源的架構信息,獲取數據源的架構信息是代碼生成工具的基礎。
獲取數據源的架構信息,網上有不同的方法,但我覺得都太復雜了,其實在.Net上,要獲取數據源的架構信息是件非常容易的事情,只要使用Connection對象的GetSchema方法就可以了。下面以SqlConnection為例,使用的是Northwind數據庫。
DataTable table = connection.GetSchema();
以無參的形式調用GetSchema方法,此時將返回一個 DataTable,包含支持的架構集合列表和其它信息。
使用這些信息,可以通過GetSchema方法獲取特定的集合。如Users獲取數據庫的所有用戶,Procedures獲取數據庫的所有存儲過程等等。
以Tables為例,當傳入參數"Tables"(忽略大小寫的)調用GetSchema方法時
DataTable table = connection.GetSchema("Tables");
得到的數據列信息為
可以看到,TABLE_TYPE有兩種類型,BASE TABLE和VIEW,它把視圖也當成是表(不過再想想,視圖也確實屬于表的一種)。
那么如何讓它只返回表而包括視圖呢?這時就要使用到GetSchema的第三個參數了。
第三個參數的用法有點特別,現在我需要返回的是TABLE_TYPE的值為BASE TABLE的集合。因為TABLE_TYPE是第4列(從1開始),那么就需要創建一個大小至少為4的string數組,然后把第4位的值賦值為"BASE TABLE"。
Codestring[] res = new string[4];
res[3] = "base table";
DataTable table = connection.GetSchema("Tables", res);
從得到的結果中可以看到,這次把視圖過濾掉了。
下面是這個程序的完整代碼:
Programclass Program
{
static void Main(string[] args)
{
SqlConnection connection = new SqlConnection();
connection.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\SQL Server 2000 Sample Databases\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True";
connection.Open();
string[] res = new string[4];
res[3] = "base table";
DataTable table = connection.GetSchema("Tables", res);
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
Console.Write(col.ColumnName + ":" + row[col] + "-");
}
Console.WriteLine();
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
foreach (DataColumn col in table.Columns)
{
foreach (DataRow row in table.Rows)
{
Console.WriteLine(col.ColumnName + ":" + row[col]);
}
Console.WriteLine();
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine();
foreach (DataColumn col in table.Columns)
{
Console.WriteLine(col.ColumnName);
}
connection.Close();
}
}
轉載于:https://www.cnblogs.com/reallypride/archive/2008/10/13/1310416.html
總結
以上是生活随笔為你收集整理的朝花夕拾:代码生成器的基础——获取数据源的架构信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel中PMT计算月供函数的java
- 下一篇: 自动化集成:Pipeline整合Dock