MyMeta 元件是代碼自動生成工具 MyGeneration 的核心子產品之一,主要負責定義和擷取關系資料庫結構。在 MyMeta 中定義了一套比較完整的關系資料庫對象結構,并提供擷取(反向工程)這些對象的方法。使用 MyMeta 能輕松地擷取到資料庫中大部分類型的對象的元資訊,這些對象包括架構(Schema)、表、視圖、存儲過程、索引、列、主鍵、外鍵、存儲過程參數等,雖然 關系資料庫中的對象類型不止這些,但對我們一般的軟體開發來說,這些資訊足夠了。另外 MyMeta 還支援了足夠多的關系資料庫類型,可以說市面上能見到的資料庫系統都支援了,包括MS Access、MS SQL Server、Oracle、MySQL、DB2、Firebird、PostgreSQL、Pervasive、SQLite、VistaDB 等,并且可靈活擴充。當然,MyGeneration 全部開源,這也是我最終決定在項目中使用 MyMeta 的重要原因。
這裡提下,引用了MyMeta.dll還是不夠的,它會要求添加其餘的幾個引用:FirebirdSql.Data.FirebirdClient.dll,MySql.Data.dll,Npgsql.dll,System.Data.SQLite.DLL等。添加完這些後,就可以正常運作他的代碼了。
貼上我的測試代碼

using System;
using System.Collections.Generic;
using System.Text;
using MyMeta;
namespace MyMetaTest
{
class Program
{
static void Main(string[] args)
{
string connString = @"Provider=SQLOLEDB;server=;database=;uid=;pwd=;";
MyMeta.dbRoot root = new MyMeta.dbRoot();
root.Connect(MyMeta.dbDriver.SQL, connString);
foreach (MyMeta.Database db in root.Databases)
{
Console.WriteLine("資料庫 {0} 有 {1} 個表,{2} 個視圖。", db.Name, db.Tables.Count, db.Views.Count);
if (db.Name == "DB")
{
int i = 0;
foreach(MyMeta .Table t in db.Tables )
{
Console.WriteLine(string.Format("Table {0}--------------------------------------------------------",t.Name));
foreach (MyMeta.Column c in t.Columns)
{
Console.WriteLine(string.Format("name {0} IsComputed {1} IsAutoKey {2} DataTypeName {3}", c.Name, c.IsComputed, c.IsAutoKey, c.DataTypeName));
}
i++;
if (i > 10) break;
}
}
}
Console.ReadLine();
}
}
}
呵呵,是在他的代碼的基礎上修改的。
擷取資料庫資訊是建立代碼生成器的第一步,哎,慢慢來,慢慢來。
本文轉自today4king部落格園部落格,原文連結:http://www.cnblogs.com/jinzhao/archive/2009/07/29/1534362.html,如需轉載請自行聯系原作者