使用OLE方式获取数据库架构信息
一般連接SQL數據庫的連接字串:
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。
?
一、獲取數據表字段(列)結構信息
其中,限制列分別為 TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME,如果不限制則傳遞null。
此時,SchemaTable中包含一個字段結構表,此表的每個記錄(每行)為[TABLENAME]的每個字段的結構信息,而SchemaTable本身的結構可以通過列信息中獲取,SchemaTable的列信息是固定的,以下讀取列信息的代碼:
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?;
?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
轉載于:https://www.cnblogs.com/CodeBlove/archive/2008/03/24/1119726.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的使用OLE方式获取数据库架构信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSON提供了json.js包 作用?
- 下一篇: 我要带徒弟学写JAVA架构,引路架构师之