ADO取数据库中的表名、字段名、字段类型

ADO编程——获的所有字段(C++) 我们有时候需要通过程序获的所有字段,那么用ADO提供的接口获还是很方便的。 vs2005创建控制台程序,语言为C++。 核心代码如下: struct TableField { TableField() : strFieldName(_T("")) , nFieldType(0) , nFieldLength(0) 阅读详情

OpenSchema 方法
     

从提供者获取数据库模式信息。

语法

Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)

返回值

返回包含模式信息的 Recordset 对象。Recordset 将以只读、静态游标打开。

参数

QueryType   所要运行的模式查询类型,可以为下列任意常量。

Criteria   可选。每个 QueryType 选项的查询限制条件数组,如下所列:

QueryType 值 Criteria 值
AdSchemaAsserts CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
AdSchemaCatalogs CATALOG_NAME
AdSchemaCharacterSets CHARACTER_SET_CATALOG
CHARACTER_SET_SCHEMA
CHARACTER_SET_NAME
AdSchemaCheckConstraints CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
AdSchemaCollations COLLATION_CATALOG
COLLATION_SCHEMA
COLLATION_NAME
AdSchemaColumnDomainUsage DOMAIN_CATALOG
DOMAIN_SCHEMA
DOMAIN_NAME
COLUMN_NAME
AdSchemaColumnPrivileges TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
GRANTOR
GRANTEE
adSchemaColumns TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaConstraintColumnUsage TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaConstraintTableUsage TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
adSchemaForeignKeys PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
FK_TABLE_CATALOG
FK_TABLE_SCHEMA
FK_TABLE_NAME
adSchemaIndexes TABLE_CATALOG
TABLE_SCHEMA
INDEX_NAME
TYPE
TABLE_NAME
adSchemaKeyColumnUsage CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaPrimaryKeys PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
adSchemaProcedureColumns PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
COLUMN_NAME
adSchemaProcedureParameters PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PARAMTER_NAME
adSchemaProcedures PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PROCEDURE_TYPE
adSchemaProviderSpecific 参见说明
adSchemaProviderTypes DATA_TYPE
BEST_MATCH
adSchemaReferentialConstraints CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
adSchemaSchemata CATALOG_NAME
SCHEMA_NAME
SCHEMA_OWNER
adSchemaSQLLanguages <无>
adSchemaStatistics TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
adSchemaTableConstraints CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
CONSTRAINT_TYPE
adSchemaTablePrivileges TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
GRANTOR
GRANTEE
adSchemaTables TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE
adSchemaTranslations TRANSLATION_CATALOG
TRANSLATION_SCHEMA
TRANSLATION_NAME
adSchemaUsagePrivileges OBJECT_CATALOG
OBJECT_SCHEMA
OBJECT_NAME
OBJECT_TYPE
GRANTOR
GRANTEE
adSchemaViewColumnUsage VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
adSchemaViewTableUsage VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
adSchemaViews TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME


SchemaID   OLE DB 规范没有定义用于提供者模式查询的 GUID。如果 QueryType 设置为 adSchemaProviderSpecific,则需要该参数,否则不使用它。

说明

OpenSchema 方法返回与数据源有关的信息,例如关于服务器上的表以及表中的列等信息。

Criteria 参数是可用于限制模式查询结果的值数组。每个模式查询有它支持的不同参数集。实际模式由 IDBSchemaRowset 接口下的 OLE DB 规范定义。ADO 中所支持的参数集已在上面列出。

如果提供者定义未在上面列出的非标准模式查询,则常量 adSchemaProviderSpecific 将用于 QueryType 参数。在使用该常量时需要 SchemaID 参数传递模式查询的 GUID 以用于执行。如果 QueryType 设置为 adSchemaProviderSpecific 但是没有提供 SchemaID,将导致错误。

提供者不需要支持所有的 OLE DB 标准模式查询,只有 adSchemaTables、adSchemaColumns 和 adSchemaProviderTypes 是 OLE DB 规范需要的。但是对于这些模式查询,提供者不需要支持上面列出的 Criteria 条件约束。

远程数据服务用法   OpenSchema 方法在客户端 Connection 对象上无效。

注意   在 Visual Basic 中,在由 Connection 对象的 OpenSchema 方法所返回的 Recordset 中有 4 字节无符号整型 (DBTYPE UI4) 的列无法与其他变量比较。有关 OLE DB 数据类型的详细信息,请参阅“Microsoft OLE DB 程序员参考”的第十章和附录 A。

OpenSchema 方法范例
该范例使用 OpenSchema 方法显示 Pubs 数据库内每个表的名称和类型。

Public Sub OpenSchemaX()

   Dim cnn1 As ADODB.Connection
   Dim rstSchema As ADODB.Recordset
   Dim strCnn As String
     
   Set cnn1 = New ADODB.Connection
      strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
   cnn1.Open strCnn
     
   Set rstSchema = cnn1.OpenSchema(adSchemaTables)
  
   Do Until rstSchema.EOF
      Debug.Print "Table name: " & _
         rstSchema!TABLE_NAME & vbCr & _
         "Table type: " & rstSchema!TABLE_TYPE & vbCr
      rstSchema.MoveNext
   Loop
   rstSchema.Close
  
   cnn1.Close
  
End Sub

该范例在 OpenSchema 方法的 Criteria 参数中指定 TABLE_TYPE 查询约束。因此,只返回在 Pubs 数据库中指定视图的模式信息。然后该范例显示每个表的名称和类型。

Public Sub OpenSchemaX2()

   Dim cnn2 As ADODB.Connection
   Dim rstSchema As ADODB.Recordset
   Dim strCnn As String
     
   Set cnn2 = New ADODB.Connection
      strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
   cnn2.Open strCnn
     
   Set rstSchema = cnn2.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "VIEW"))

      Do Until rstSchema.EOF
         Debug.Print "Table name: " & _
            rstSchema!TABLE_NAME & vbCr & _
            "Table type: " & rstSchema!TABLE_TYPE & vbCr
         rstSchema.MoveNext
      Loop
   rstSchema.Close
  
   cnn2.Close
  
End Sub

Private Sub Command1_Click()
Dim Cn As New ADODB.Connection
Dim Rs_Table As New ADODB.Recordset
Dim Rs_Colums As New ADODB.Recordset

    With Cn   '定义连接
        .CursorLocation = adUseClient
        .Provider = "sqloledb"
        .Properties("Data Source").Value = "LIHG"
        .Properties("Initial Catalog").Value = "NorthWind"
        .Properties("User ID") = "sa"
        .Properties("Password") = "sa"
        .Properties("prompt") = adPromptNever
        .ConnectionTimeout = 15
        .Open
       
        If .State = adStateOpen Then
            Rs_Table.CursorLocation = adUseClient   '得到所有表名
            Rs_Table.Open "SELECT name From sysobjects WHERE xtype = 'u'", Cn, adOpenDynamic, adLockReadOnly
            Rs_Table.MoveFirst
            Do While Not Rs_Table.EOF
                Debug.Print Rs_Table.Fields("name")
                Rs_Colums.CursorLocation = adUseClient
                Rs_Colums.Open "select * from [" & Rs_Table.Fields("name") & "]", Cn, adOpenStatic, adLockReadOnly
                For I = 0 To Rs_Colums.Fields.Count - 1   ' 循环所有列
                    Debug.Print Rs_Colums.Fields(I).Name   '字段名
                    Debug.Print FieldType(Rs_Colums.Fields(I).Type)  '字段类型
                    Debug.Print Rs_Colums.Fields(I).DefinedSize  '宽度
                Next
                Rs_Colums.Close
                Rs_Table.MoveNext
            Loop
            Rs_Table.Close
            Set Rs_Colums = Nothing
            Set Rs_Table = Nothing
       
        Else
            MsgBox "数据库连接失败,请找系统管理员进行检查 !", 16, cProgramName
            End
        End If
    End With
End Sub

'*********************************************************
'* 名称:FieldType
'* 功能:返回字段类型
'* 用法:FieldType(nType as integer)
'*********************************************************
 Function FieldType(nType As Integer) As String
    Select Case nType
        Case 128
            FieldType = "BINARY"
        Case 11
            FieldType = "BIT"
        Case 129
            FieldType = "CHAR"
        Case 135
            FieldType = "DATETIME"
        Case 131
            FieldType = "DECIMAL"
        Case 5
            FieldType = "FLOAT"
        Case 205
            FieldType = "IMAGE"
        Case 3
            FieldType = "INT"
        Case 6
            FieldType = "MONEY"
        Case 130
            FieldType = "NCHAR"
        Case 203
            FieldType = "NTEXT"
        Case 131
            FieldType = "NUMERIC"
        Case 202
            FieldType = "NVARCHAR"
        Case 4
            FieldType = "REAL"
        Case 135
            FieldType = "SMALLDATETIME"
        Case 2
            FieldType = "SMALLMONEY"
        Case 6
            FieldType = "TEXT"
        Case 201
            FieldType = "TIMESTAMP"
        Case 128
            FieldType = "TINYINT"
        Case 17
            FieldType = "UNIQUEIDENTIFIER"
        Case 72
            FieldType = "VARBINARY"
        Case 204
            FieldType = "VARCHAR"
        Case 200
            FieldType = ""
    End Select
End Function

ado和access的情况下,用INSERT INTO语句插入到数据库 一、条件情况:1、多文档工程,                   2、在App中的.h中定义 _ConnectionPtr   m_pConnection;                  3、在App中的.cpp中在初始化函数中进行了数据库的连接和创建一个和在标准添加数据 int CDrawYunApp::ADOInit(void) { //AfxOleInit();//初始 阅读详情

相关推荐

OpenSchema 方法详解

OpenSchema 方法从提供者获数据库模式信息。语法Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)返回值返回包含模式信息的 Recordset 对象。Recordset 将以只读、静态游标打开。参数QueryType   所要运行的模式查询类型,可以为下列任意常量。Criteria   可选。每个 Q

Aricc的专栏 3980

OpenSchema数据库实例

<%strConn="DBQ="+server.mappath("kendylan.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver(*.mdb)};"set objConn=server.createobject("Adodb.connection")objConn.open strConnset rsSchema=objConn.op...

weixin_30336061的博客 1022

asp中使用OpenSchema时出现“对象或提供程序不能执行所需操作”错误的原因

<br />第一次在asp中使用OpenSchema数据库称时.常会出<br /> <br /> <br />ADODB.Connection错误 '800a0cb3'<br />对象或提供程序不能执行所需的操作。<br /><br />这样的错误。<br /> <br />这主要是因为在使用<br />set tt=Conn.OpenSchema(adSchemaTables)<br />前没有对adSchemaTabl这个常量进行定义。<br /> <br />解决方案<br /> <br /

WTU1977的专栏 1251

如何通过ADO,获一个数据库文件里面所有的?

使用ADO来获一个文件的思路是,通过Connection 对象的OpenSchema的方法,获的一个REORDSET对象.     这个RECORDSET对象里包含有数据库文件里面所有称和类型.     欲想了解这个RECORDESET对象里面的字段属性,可以使用VB的监视器在相应代码处中断,查看信息.下面给出例子和注释Public Sub OpenSchemaX() Dim

polarmirror的专栏 1679

如何通过ADO获得数据库字段名字段类型

--------------------------------------------------------------- recordset.fields(index).name 字段名 --------------------------------------------------------------- : recordset.fields(index).nam...

weixin_30565327的博客 629

得到access的数据库的字段的称、类型、长度等信息

 laiyiling(最熟悉的陌生人)(知道的太少啦,好多的问题不会!) 在社区发的贴子刚找出来的 这是一个根据得到字段信息,你参考一下:#include #define PAUSE printf("/npress any key to exit"); getch();#define _WIN32_DCOM#pragma warning(push)#pragma warning(disable

灰虫轨迹 3581

Python 获 Access 字段名

时效说明:walker 的旧文迁移,某些地方可能过时,最后更新时间为 2015-09-25 以下所有代码 Python2.7、Python3.4 均可用。 【win32.com】 Python资源共享群:484031800 # encoding: utf-8 # author: walker # date: 2015-09-25 # summary: 打印指定access文件、指定的所...

Pythoncxy的博客 1442

BCB6.0中通过ADOQuery读Access中的字段名

LPTSTR FiledTypeNames[] = { TEXT("ftUnknown"), TEXT("ftString"), TEXT("ftSmallint"), TEXT("ftInteger"), TEXT("ftWord"), TEXT("ftBoolean"), TEXT("ftFloat"), TEXT("ftCurrency"), TEXT("ftBCD"), TEXT("ftD...

lzksword的专栏 692

如何通过ADO获得Access数据库中的所有用户信息

本文介绍一种通过ADO列举Access文件中所用用户信息的方法,仅供参考,源代码在VC6.0 +XP环境通过测试。 首先,需要引入msado15.dll文件,在stdafx.h中添加:#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF")

stavck的专栏 4968

VB 列出SQL数据库中所有及字段信息

 程序思想:用Select name From sysobjects Where xtype = 'u'得到所有,然后循环打开,根据 Rs_Colums.Fields(I).Name 得到字段名, FieldType(Rs_Colums.Fields(I).Type) 得到字段类型, Rs_Colums.Fields(I).DefinedSize 宽度  由于Rs_Colums.Fields(...

資料為我做事 935

[转]遍历(ACCESS/SQL SERVER)数据库数据库的方法

[转]遍历(ACCESS/SQL SERVER)数据库数据库的方法 http://www.myzqu.com/zhaoqing/doc-view-330.html 怎么用c#到access库中所有并遍历(不用GreatView) http://wenwen.soso.com/z/q146481938.htm Asp.Net(C#) 遍历数据库,列 http://hi.bai

keenweiwei的专栏 4307

python读mdb所有_Python 获 Access 字段名

时效说明:walker 的旧文迁移,某些地方可能过时,最后更新时间为 2015-09-25以下所有代码 Python2.7、Python3.4 均可用。win32.com# encoding: utf-8# author: walker# date: 2015-09-25# summary: 打印指定access文件、指定的所有字段import win32com.clientdef PrintC...

weixin_34205814的博客 879

oracle 查询数据库内字段信息

查询的结果依次为字段名字段类型,字段长度,默认值   select col.TABLE_NAME,col.COLUMN_NAME,col.DATA_TYPE,col.DATA_LENGTH,col.DATA_DEFAULT, com.comments from user_tab_columns col inner join user_col_comments comon col...

zeromike 861

python读access_Python 获 Access 字段名

时效说明:walker 的旧文迁移,某些地方可能过时,最后更新时间为 2015-09-25以下所有代码 Python2.7、Python3.4 均可用。Python资源共享群:484031800# encoding: utf-8# author: walker# date: 2015-09-25# summary: 打印指定access文件、指定的所有字段import win32com.clie...

weixin_39531635的博客 238
上一篇: 如何获取web.config中定义的字符串
AFXAPI
博客等级 码龄22年 0粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值