论坛数据统计           欢迎到【弱电论坛】来学习和讨论问题!

★电工电气产品供求、电气展会、人才、电气技术文章、图库、电气技术论坛等相关内容,请跳转至【电气之家网】--- 可直接使用本站会员名和密码登陆!(首次使用需要激活账户)
标王 热搜: 网络监控  弱电  楼宇对讲  机房及机柜内部的理线方法  CAD  门禁  综合布线  ar800-hn  工资  面板 
 
 
当前位置: 首页 » 技术 » 电脑技术 » 数 据 库 » 正文

通过ADODB.Connection.OpenSchema方法来管理数据库

放大字体  缩小字体 发布日期:2008-10-06  来源:互联网  作者:manage  浏览次数:1213
核心提示:今天有同事问我如何将access中的数据库结构导到文本中,方便查阅。说实话,这个问题我以前也遇见过,但总是太懒,没有想过写一段代码来实现这个功能。同事无意间的询问却让我想起“海洋木马2006”中有类似的功能,于是停止了病毒防火墙,打开这个木马,研究其代码,不想
 
 
今天有同事问我如何将access中的数据库结构导到文本中,方便查阅。说实话,这个问题我以前也遇见过,但总是太懒,没有想过写一段代码来实现这个功能。同事无意间的询问却让我想起“海洋木马2006”中有类似的功能,于是停止了病毒防火墙,打开这个木马,研究其代码,不想就走进了一个新的技术空间:ADODB.Connection.OpenSchema 
以前紧紧知道Connection对象有execute和open两种方法,今天发现居然还有OpenSchema的方法,呵呵,使用WEB来管理数据库就靠它了。晚上花了一个半小时,终于成功得写出了代码。

顺便复制一篇文章供参考。

准备知识: 





ADODB.Connection.OpenSchema方法:

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

    说明: OpenSchema 方法返回有关数据源的自述信息,如数据源中包含的表、表中的列和支持的数据类型。
QueryType 参数是一个指示返回的列(模式)的 GUID。OLE DB 规范有一个完整的模式列表。
Criteria 参数限制模式查询的结果。Criteria 指定值的数组,这些值必须出现在结果 Recordset 中的列(称为“约束列”)的对应子集中。
如果提供者在上述列表中的范围以外定义自己的非标准模式查询,那么 QueryType 参数将使用 adSchemaProviderSpecific 常量。如果使用此常量,则要求用 SchemaID 参数来传递要执行的模式查询的 GUID。如果把 QueryType 设置为 adSchemaProviderSpecific 但未提供 SchemaID,将产生错误。 




不要求提供者支持所有 OLE DB 标准模式查询。特别指出,OLE DB 规范只要求 adSchemaTables、adSchemaColumns 和 adSchemaProviderTypes。但并不要求提供者支持上面所列的模式查询的 Criteria 约束。 




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




注意   在 Visual Basic 中,包含从 Connection 对象 OpenSchema 方法返回的 Recordset 中的四字节无符号整数 (DBTYPE UI4) 的列不能与其他变量相比较。有关 OLE DB 数据类型的详细信息,请参阅 Microsoft OLE DB Programmer’s Reference 的 Chapter 13 和 Appendix A。 




相关的SQL语句:http://blog.donews.com/ArEs/archive/2005/10/17/591709.aspx 





Ø       实例: 





Dim cnxn 





Set cnxn=Server.CreateObject("ADODB.Connection") 





Cnxn.Open yourConnectionString 





’****************************
’显示所有的表 





’****************************
Sub ShowTables() 





       On Error Resume next 





       CONST QueryType = 20                    ’adSchemaTables 





       Set rstSchema = Cnxn.OpenSchema(QueryType) 





       Response.Write "<p><b>Table List</b></p>" 





       Response.Write "<ul>" 





       While Not rstSchema.EoF 





              If rstSchema("TABLE_TYPE") = "TABLE" Then        ’显示用户创建的表 





                     response.write "<li> " & rstSchema("TABLE_NAME") & "</li>" 





              End If 





              rstSchema.MoveNext 





       WEnd 





       Response.Write "</ul>" 





       rstSchema.Close 





Set rstSchema = Nothing 





If Err <> 0 Then 





       Response.write "ShowTables Error:" & Err.Source & "-->" & Err.Description 





       Err.Clear 





End If 





End Sub ’****ShowTables 





’****************************
’显示指定表的所有列的属性 





’**************************** 





Sub ShowColumns(tablename) 





       On Error Resume next 





       CONST QueryType = 4        ’adSchemaColumns 





       Dim Criteria 





       Criteria = Array(Empty,Empty,tablename,Empty) 





       Set rstSchema= Cnxn.OpenSchema(QueryType,Criteria) 





       Response.Write "<p><b>Property Of columns in " & tablename &"</b></p>" 





       Response.Write "<table>" &_ 





              "<tr>" 





       For i=0 To rstSchema.fields.count-1 





              Response.Write "<td>" & rstSchema.fields(i).name & "</td>" 





       Next 





       Response.Write "</tr>" 





       While Not rstSchema.Eof 





              Response.Write "</tr>" 





              For i=0 To rstSchema.fields.count-1 





                     Response.Write "<td>" & rstSchema.fields(i).value & "</td>" 





              Next 





              Response.Write "</tr>" 





              rstSchema.MoveNext 





       WEnd 





       Response.Write "</table>" 





       rstSchema.Close 





       Set rstSchema = Nothing 





       If Err <> 0 Then 





              Response.write "ShowColumns Error:" & Err.Source & "-->" & Err.Description 





              Err.Clear 





       End If 






 


 


End Sub ’****ShowColumns 





’****************************
’显示指定表的中的数据 





’****************************

Sub ShowData(tablename) 





       On Error Resume next 





    response.write "<p align=center><b>Data In "&tablename&"</b><br>" 





    response.write "<table border=1 align=center>" 





    Set rs = cnxn.Execute("SELECT * FROM " & tablename) 





    response.write "<tr>" 





    For i = 0 To rs.fields.count-1 





           response.write "<td>" & rs.fields(i).name & "</td>" 





    Next 





    response.write "</tr>" 





    While Not rs.Eof 





           response.write "<tr>" 





           For i=0 To rs.fields.count-1 





                  If VarType(rs(i)) = 8209 Then                    ’DataType=128 





                         response.write "<td>" & "长二进制数据" & "</td>" 





                  Else 





                         response.write "<td>" & rs.fields(i).value & "&nbsp;</td>" 





                  End If 





           Next 





           response.write "</tr>" 





           rs.MoveNext 





    Wend 





response.write "</table>" 





rs.Close 





       Set rs = Nothing 





       If Err <> 0 Then 





              Response.write "ShowData Error:" & Err.Source & "-->" & Err.Description 





              Err.Clear 





       End If 





End Sub ’****ShowData 





Tips:

结合SQL语句后就可以在WEB页面管理数据库了

修改ShowColumns中的QueryType值并将设置相应的Criteria值可实现其他功能: 





比如QueryType = 28 (adSchemaPrimaryKeys)为显示主键信息 





Criteria = Array(Empty,Empty,tablename) 





              QueryType = 12 (adSchemaIndexes)为索引信息 



Criteria = Array(Empty,Empty,Empty,Empty,tablename) 




请参考http://blog.donews.com/ArEs/archive/2005/10/17/591614.aspx中两者的对应

ShowColumns中有名为DATA_TYPE的一项取值请参考 


http://blog.donews.com/ArEs/archive/2005/10/17/591758.aspx
 
 
 
[ 技术搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 关闭窗口 ]

 
0条 [查看全部]  相关评论

 
点击排行
 
 
 
弱电基础 | 常用软件 | 信息发布规则 | 积分规则 | VIP会员注册 | 广告投放 | 弱电培训 | 联系我们 | 版权声明 | 帮助中心 | 网站地图 | 排名推广 | 京ICP备11008917号-3 | RSS订阅
★本站手机app客户端已上线! 点击下载