zoukankan      html  css  js  c++  java
  • 使用OLE方式获取数据库架构信息

    一般连接SQL数据库的连接字串:

    data source=[SERVERNAME];user id=[USERNAME];password=[PASSWORD];database=[DATABASENAME]

    OLE的连接字串只要在其头部增加“Provider=sqloledb;”,即:

    Provider=sqloledb;data source=[SERVERNAME];user id=[USERNAME];password=[PASSWORD];database=[DATABASENAME]

    需要在代码文件中加一句引用:

    using System.Data.OleDb;

    建立连接对象

    string sql;
    DataTable SchemaTable;
    sql
    ="Provider=sqloledb;data source=[SERVERNAME];user id=[USERNAME];password=[PASSWORD];database=[DATABASENAME]";
    oleDbConnection conn 
    = new OleDbConnection(sql);
    conn.open();

    打开连接后一般需要做个判断,防止连接失败

    读取架构表信息的方法是GetOleDbSchemaTabl( Guid,Object[] ),其中Guid为OleDbSchemaGuid的成员,决定了获取指定的架构信息,Object[]为限制列数组,随OleDbSchemaGuid不同而不同。常用的OleDbSchemaGuid为Tables、Columns、Indexes 、Primary_Keys。
     
    一、获取数据表字段(列)结构信息

    SchemaTable=Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] nullnull, [TABLENAME], null });

    其中,限制列分别为 TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME,如果不限制则传递null。
    此时,SchemaTable中包含一个字段结构表,此表的每个记录(每行)为[TABLENAME]的每个字段的结构信息,而SchemaTable本身的结构可以通过列信息中获取,SchemaTable的列信息是固定的,以下读取列信息的代码:

    string fieldname;
    string datatype;
    string Outstr;
     
    foreach (DataColumn col in SchemaTable.Columns)
    {
        fieldname
    =col.Name;
        datatype
    = col.DataType.Name;
        Outstr
    +=fieldname+"="+datatype+"\r\n";//生成字段信息的输出字串
    }

    SchemaTable中的每个列名和类型如下:
    TABLE_CATALOG               String
    TABLE_SCHEMA                String
    TABLE_NAME                   String
    COLUMN_NAME                 String
    COLUMN_GUID                 Guid  
    COLUMN_PROPID               Int64 
    ORDINAL_POSITION            Int64 
    COLUMN_HASDEFAULT           Boolean
    COLUMN_DEFAULT              String
    COLUMN_FLAGS                Int64 
    IS_NULLABLE                 Boolean
    DATA_TYPE                   Int32 
    TYPE_GUID                   Guid  
    CHARACTER_MAXIMUM_LENGTH    Int64 
    CHARACTER_OCTET_LENGTH      Int64 
    NUMERIC_PRECISION           Int32 
    NUMERIC_SCALE               Int16 
    DATETIME_PRECISION          Int64 
    CHARACTER_SET_CATALOG       String
    CHARACTER_SET_SCHEMA        String
    CHARACTER_SET_NAME          String
    COLLATION_CATALOG           String
    COLLATION_SCHEMA            String
    COLLATION_NAME              String
    DOMAIN_CATALOG              String
    DOMAIN_SCHEMA               String
    DOMAIN_NAME                 String
    DESCRIPTION                 String
    COLUMN_LCID                 Int32 
    COLUMN_COMPFLAGS            Int32 
    COLUMN_SORTID               Int32 
    COLUMN_TDSCOLLATION         Byte[]
    IS_COMPUTED                 Boolean

    有了SchemaTable的每个列的结构后,就可以选择性地从中取得[TABLENAME]的字段信息了

    string fieldname;
    string ;
     
    foreach (DataRow   dr in SchemaTable.Rows)
    {
        fieldname
    =dr[COLUMN_NAME].ToString();此处的fieldname是[TABLENAME]的每个字段名,下同
        ..
    =dr[DATA_TYPE].ToString();
        ..;    
    }


    二、获取主键信息

    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_NAME
    COLUMN_NAME
    COLUMN_GUID
    COLUMN_PROPID
    ORDINAL
    PK_NAME

  • 相关阅读:
    2017.4.6下午
    2017.4.6上午
    2017.3.31下午
    2017.4.5下午
    2017.4.5上午
    2017.4.1上午
    2017.3.31上午
    2017.3.28下午
    2017.3.28上午
    3.28上午
  • 原文地址:https://www.cnblogs.com/CodeBlove/p/1119726.html
Copyright © 2011-2022 走看看