erlchina 发表于 2015-7-3 11:48:23

获取sql server Express数据库结构

  
  在.net1.0中可以通过oledb的方式连接数据库,获取数据库的各种属性,以前曾经使用过,没什么问题的了(http://dlwang2002.iyunv.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;/**////for colums{"Table_CATALOG","TABLE_SCHEMA","TABLE_NAME","COLUMN_NAME","ORDINAL_POSITION","COLUMN_DEFAULT"}
    for (int i = 0; i < 4; i++)
                col = null;
   ol = 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.ToString().IndexOf("PK_") > -1)
                        index = i;
                }
                return Global.Clean(keyFields.Rows.ToString());这一段是用来获取主键的。好像里面没有PrimaryKeys这一个关键字,只能这样凑合着用了。



                DataTable keyFields = connection.GetSchema("ForeignKeys",new string[] {null,null,tableName });
这一段是用来获取外键的,不过,这一段来凑合着用都不行
这是输出的结果


    D:\xx\BIN\DEBUG\ASPNETDB.MDF
    dbo
    FK__aspnet_Us__Appli__0425A276
    D:\xx\BIN\DEBUG\ASPNETDB.MDF
    dbo
    aspnet_Users
    FOREIGN KEY
    NO
    NO
本来指着从这里获取"FK_TABLE_NAME","FK_COLUMN_NAME","PK_TABLE_NAME","PK_COLUMN_NAME"的,但是,好像不好找这些参数了。应该如何获取呢?
页: [1]
查看完整版本: 获取sql server Express数据库结构