天天看點

使用 MyMeta 元件擷取資料庫結構

  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等。添加完這些後,就可以正常運作他的代碼了。

貼上我的測試代碼

使用 MyMeta 元件擷取資料庫結構

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,如需轉載請自行聯系原作者