ASP教程:OpenSchema方法技术探讨

教程

语法
set connection=server.createobject(“adodb.connection“)
Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)

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

参数
QueryType 所要运行的模式查询类型,可以为下列任意常量。
Criteria 可选。每个 QueryType 选项的查询限制条件数组,

参数枚举(QueryType )
'---- SchemaEnum Values ----
Const adSchemaProviderSpecific = -1
Const adSchemaAsserts = 0
Const adSchemaCatalogs = 1
Const adSchemaCharacterSets = 2
Const adSchemaCollations = 3
Const adSchemaColumns = 4
Const adSchemaCheckConstraints = 5
Const adSchemaConstraintColumnUsage = 6
Const adSchemaConstraintTableUsage = 7
Const adSchemaKeyColumnUsage = 8
Const adSchemaReferentialContraints = 9
Const adSchemaTableConstraints = 10
Const adSchemaColumnsDomainUsage = 11
Const adSchemaIndexes = 12
Const adSchemaColumnPrivileges = 13
Const adSchemaTablePrivileges = 14
Const adSchemaUsagePrivileges = 15
Const adSchemaProcedures = 16
Const adSchemaSchemata = 17
Const adSchemaSQLLanguages = 18
Const adSchemaStatistics = 19
Const adSchemaTables = 20
Const adSchemaTranslations = 21
Const adSchemaProviderTypes = 22
Const adSchemaViews = 23
Const adSchemaViewColumnUsage = 24
Const adSchemaViewTableUsage = 25
Const adSchemaProcedureParameters = 26
Const adSchemaForeignKeys = 27
Const adSchemaPrimaryKeys = 28
Const adSchemaProcedureColumns = 29

利用openschema可以获得所有表的主键,当然这只是它的很多功能中的一个。
connstr = "Provider=MSDAORA.1;User ID=liujincai;password=ljc1001;Data Source=hp1"
set mm=server.CreateObject("adodb.connection")
mm.Open connstr
Const adSchemaPrimaryKeys = 28
set rs=mm.OpenSchema(adSchemaPrimaryKeys)
Response.Write "<table>"
Response.Write "<TR>"

for i=0 to rs.fields.count-1
Response.Write "<td>" & rs(i).name & "</td>"
next
Response.Write "</tr> "
do while not rs.eof
Response.Write "<tr>"
for i=0 to rs.fields.count-1
Response.Write "<td>" & rs(i) & "</td>"
next
Response.Write "</tr> "
rs.movenext
loop
Response.write “</table>“

'下面的语句获得表'TB_HOUSE_MAIN'的主键所在的字段
rs.Filter="TABLE_NAME='TB_HOUSE_MAIN'"
if not(rs.eof and rs.bof) then Response.Write rs("COLUMN_NAME")

获得任意一个存储过程的参数列表,这个对于想做完全松耦合系统的哥们一定有用的。这个程序获得名字为'PRO_HOUSE_ADD_INFO'的存储过程的参数列表
connstr = "Provider=MSDAORA.1;User ID=liujincai;password=ljc1001;Data Source=hp1"
set mm=server.CreateObject("adodb.connection")
mm.Open connstr
Const adSchemaProcedureParameters = 26
set rs=mm.OpenSchema(adSchemaProcedureParameters) rs.Filter="PROCEDURE_NAME='PRO_HOUSE_ADD_INFO'" Response.Write "<TABLE cellSpacing=0 border=1>"
Response.Write "<TBODY><TR bgColor=#dddddd>"
for i=2 to rs.fields.count-1
Response.Write "<TD>" & rs(i).name & "</TD>"
next
Response.Write "</TR>"
do while not rs.eof
Response.Write "<TR bgColor=#e0d0c0>"
for i=2 to rs.fields.count-1
Response.Write "<TD>" & rs(i) & "</TD>"
next
Response.Write "</tr>"
rs.movenext
loop
Response.Write "</table>"

经过几个小时的实践探索,终于结束了对Adodb.connection的openschema方法的研究。现在总结一下:
1,Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)
里边一共有三个参数,但是一般就用第一个,后两个得确切功能,我也没有搞懂,这里也不做说明,有兴趣的自己查资料。

2,这个的实现就是通过连接对象的openschema方法返回一个记录集。这样就可以遍历记录集来显示或者搜集感性趣的信息。

3,利用它你还可以获得关于表,视图,列,索引,外键等信息。

4,现在不能肯定的是,是否有些方式的模式查询受用户权限的限制。也就是如果没有足够的权限,是不能做某些类别的模式查询的(有待验证)

5,这里有一些关于OpenSchema的资料连接,供查阅:
http://www.lyu.edu.cn/home/yss/ado/mdmthopenschema.htm
http://code365.com/html/asp/20040227/index/2004227113621.html

在ASP中列出数据库中的表名和字段名的程序
Set rstSchema = oConn.OpenSchema(adSchemaColumns)
这是关键之处
<%
dsn = "DSN=DSNName"
Const adSchemaTables = 20
adSchemaColumns = 4
Set oConn = Server.CreateObject("ADODB.Connection")

oConn.open dsn
Set rstSchema = oConn.OpenSchema(adSchemaColumns)
response.write "<table>"
response.write "<tr><td>Table name</td><td>field name</td><td>field type</td><td>is nullable</td><td>field size</td></tr>"
tablename=""
Do Until rstSchema.EOF
response.write "<tr><td>"
if rstSchema("Table_name") <> tablename then
response.write rstSchema("Table_name")
tablename = rstSchema("Table_name")
else
response.write " "
end if
response.write "</td><td>"& rstschema("column_Name") & "</td><td>"
select case rstschema("data_type")
case "130"
if rstschema("CHARACTER_MAXIMUM_LENGTH") = 1073741823 then
response.write "Memo"
else
response.write "Text"
end if
case 135
response.write "Date/Time"
case 3
response.write "Long Integer"
case 11
response.write "Yes/No"
case 131
response.write "Currency"
case else
response.write rstschema("data_type")
end select
response.write "</td><td>" & rstschema("is_nullable") & "</td><td>"
if rstschema("CHARACTER_MAXIMUM_LENGTH") <> 1073741823 then
response.write rstschema("CHARACTER_MAXIMUM_LENGTH")
else
response.write " "
end if
response.write "</td></tr>"
rstSchema.MoveNext
Loop
response.write "</table>"
%>

时间: 2024-10-30 20:07:56

ASP教程:OpenSchema方法技术探讨的相关文章

《圣殿祭司的ASP.NET4.0专家技术手册》----2-12 扩展方法

2-12 扩展方法 圣殿祭司的ASP.NET4.0专家技术手册 扩展方法(Extension Methods)允许针对现有类型加入自定义方法,而不必用传统方式,先继承然后再实现方法,最后还要再进行编译,完全省略了这些不必要的步骤. 然而,什么时候需使用到扩展方法?通常有两个时机: (1)需扩展类型额外的方法,就可通过扩展方法加入额外的方法: (2)希望直接使用系统已建立好的扩展方法,这种情况在LINQ中尤其明显. 范例2-12 使用扩展方法扩展string类型方法 假设要将阿拉伯数字"2266&

菜鸟十天学会ASP教程之第九天:Session组件

session|教程|十天学会 上一节:修改记录 学习目的:基本的SESSION组件,总结response,request组件. 首先,有会员系统的任何程序都会用到检测是不是用户已经登陆这个步骤.这就用到了SESSION组件,下面我们 看一个代码来说明. <%session("login")="yes"%> 这句话的意思就是在session里面定义一个login字符串变量,值为"yes",直接可以赋值,不需要声明.是不是很简单? 如果

ASP教程:UrlRewrite 使用参考文档

参考|教程 ASP教程:UrlRewrite 使用参考文档 什么是UrlRewrite?UrlRewrite 是 将静态页面转换为动态页面的一种技术. 例如.您网站页面是 http://www.yourdomain.com/news/docread.aspx?id=123 使用UrlRewrite转换后 可以 以 http://www.yourdomain.com/news/123.html 来访问. UrlRewrite的用处: 满足搜索引擎的要求,google可以抓取动态页面,但是googl

《圣殿祭司的ASP.NET4.0专家技术手册》---- 2-7 隐含类型局部变量及数组声明

2-7 隐含类型局部变量及数组声明 圣殿祭司的ASP.NET4.0专家技术手册以var声明的类型,叫做"隐含类型声明",像传统JavaScrip一样以var声明变量或对象. 2-7-1 初探var隐含类型声明 以下用var隐含类型声明数值及字符串的方式: var age=30 ; //声明年龄为30,为number数值型态 var name="Kevin"; //声明名字为Kevin,为string字符串型态 var隐含类型声明创造的最大目的是,为了配合LINQ查询

ASP包含文件方法详解

详解 ASP包含文件方法详解 SSI 指令为用户提供在 Web 服务器处理之前将一个文件的内容插入到另一个文件的方法.ASP 只使用这一机制的 #include 指令.要在 .asp 文件中插入一个文件,使用下面的语法: <!--#include virtual | file ="filename"--> virtual 和 file 关键字指示用来包含该文件的路径的类型,filename 是您想包含的文件的路径和名称. 被包含文件不要求专门的文件扩展名:但是,为被包含文件

菜鸟十天学会ASP教程之第二天:表单传送变量

变量|教程|十天学会 上一节:安装调试ASP环境 学习目的:学会用表单元素向服务器传送变量,然后显示变量在客户端的浏览器. 首先,让我们来看一下表单元素. 点击这里请查看具体的表单标签的使用 表单元素要放在一个表单域里面,建立一个表单域.然后修改动作里面的文件为要接受这个表单变量的ASP文件.方法有两种,一种是POST,这个方法传送的变量不会在浏览器的地址栏里面显示,可以大批量传送数据:GET则是会在浏览器地址栏里面显示的,等一会举例子. 下面我们看一个表单元素. 文本域,这个是最基本的,传送的

ASP教程:深入认识学习ASP内置对象Request

request|对象|教程|内置对象 系统学习ASP,就是先从ASP的几大内置对象开始的.一般称五大对象:Request.Response.Server.Session.Application.今天先来看看Request对象. 当然一直还没有提到的就是,ASP到底是什么样?我看代码怎么知道是ASP代码?很简单,当看到"<%"和"%>"就表明是ASP,并且两者之间的就是ASP源码. 那为什么要学对象,对象的作用又是如何的? 其实ASP所提供的这些可在脚本中

[收藏]数据库设计中的反规范技术探讨

规范|设计|数据|数据库|数据库设计   数据库设计中的反规范技术探讨   注:这是很久以前在一个论坛看到的文章,觉得写的不错:本着与众多业内人士交流.传播思想的目的展示在此,原论坛的名称已经不记得了,当时亦是转载.你可以任意转载此文,但由此引起的任何道德.法律纠纷与http:blog.csdn.net/aceplus无关,且http:blog.csdn.net/aceplus保证没有将此文用作任何商业和非法用途:如果您是本文的原作者,认为http:blog.csdn.net/aceplus转载

ASP.NET的缓存技术

asp.net|缓存 介绍大量的网站页面是采用动态的方式,根据用户提交的不同请求创建生成页面.正如我们所知的,动态页面有助于根据用户要求来提供定制的动态内容.动态页面也利于获取在数据库中每时每刻更新的资料.缺点是为每个用户请求生成同一页面增加了系统开销. 为克服此问题,一些网站用页面生成引擎对所有页面生成html静态页面.但这样生成的页面对所有用户的请求内容都是相同. ASP.NET 提供了缓存技术有助于我们最大程度地解决这个问题.它能缓存输出的页面,保存在存储器当中,缓存用户请求的内容.缓存的