擷取sql server Express資料庫結構

來源:互聯網
上載者:User

在.net1.0中可以通過oledb的方式串連資料庫,擷取資料庫的各種屬性,以前曾經使用過,沒什麼問題的了(http://dlwang2002.cnblogs.com/archive/2005/04/11/207996.html)
但是這種方式並不能處理對sql server express的操作,而只能使用SqlConnection。
http://www.microsoft.com/china/MSDN/library/data/dataAccess/DAadonet2schemas.mspx。

按照上邊的介紹,寫了幾個測試如下

            SqlConnection connection = null;
            connection = new SqlConnection(connectString);
            connection.Open();
            DataTable tables=connection.GetSchema("Tables");

這段代碼可以擷取資料庫的所有資料表。

string[] col = new string[4];/**////for colums{"Table_CATALOG","TABLE_SCHEMA","TABLE_NAME","COLUMN_NAME","ORDINAL_POSITION","COLUMN_DEFAULT"}
    for (int i = 0; i < 4; i++)
                col[i] = null;
     ol[2] = tableName;
    DataView columns = connection.GetSchema("Columns",col).DefaultView;

上邊的代碼可以擷取指定表的所有列。注意GetSchema第二個參數,是一個限制條件,第三列指定的是資料表的名稱。

//connection.GetSchema(DbMetaDataCollectionNames.MetaDataCollections).WriteXml("Meta.xml");
                DataTable keyFields = connection.GetSchema("IndexColumns", new string[] { null, null, tableName });
                int index=0;
                for (int i = 0; i < keyFields.Rows.Count; i++)
                {
                    if (keyFields.Rows[i][2].ToString().IndexOf("PK_") > -1)
                        index = i;
                }
                return Global.Clean(keyFields.Rows[index][6].ToString());

這一段是用來擷取主鍵的。好像裡面沒有PrimaryKeys這一個關鍵字,只能這樣湊合著用了。


                DataTable keyFields = connection.GetSchema("ForeignKeys",new string[] {null,null,tableName });

這一段是用來擷取外鍵的,不過,這一段來湊合著用都不行
這是輸出的結果  <ForeignKeys>
    <CONSTRAINT_CATALOG>D:\xx\BIN\DEBUG\ASPNETDB.MDF</CONSTRAINT_CATALOG>
    <CONSTRAINT_SCHEMA>dbo</CONSTRAINT_SCHEMA>
    <CONSTRAINT_NAME>FK__aspnet_Us__Appli__0425A276</CONSTRAINT_NAME>
    <TABLE_CATALOG>D:\xx\BIN\DEBUG\ASPNETDB.MDF</TABLE_CATALOG>
    <TABLE_SCHEMA>dbo</TABLE_SCHEMA>
    <TABLE_NAME>aspnet_Users</TABLE_NAME>
    <CONSTRAINT_TYPE>FOREIGN KEY</CONSTRAINT_TYPE>
    <IS_DEFERRABLE>NO</IS_DEFERRABLE>
    <INITIALLY_DEFERRED>NO</INITIALLY_DEFERRED>
  </ForeignKeys>

本來指著從這裡擷取"FK_TABLE_NAME","FK_COLUMN_NAME","PK_TABLE_NAME","PK_COLUMN_NAME"的,但是,好像不好找這些參數了。應該如何擷取呢?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.