一般连接SQL数据库的连接字串:
OLE的连接字串只要在其头部增加“Provider=sqloledb;”,即:
需要在代码文件中加一句引用:
建立连接对象
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