ASP中OpenSchema方法技术探讨
语法
setconnection=server.createobject(“adodb.connection“)
Setrecordset=connection.OpenSchema(QueryType,Criteria,SchemaID)
返回值
返回包含模式信息的Recordset对象。Recordset将以只读、静态游标打开。
参数
QueryType所要运行的模式查询类型,可以为下列任意常量。
Criteria可选。每个QueryType选项的查询限制条件数组,
参数枚举(QueryType)
'----SchemaEnumValues----
ConstadSchemaProviderSpecific=-1
ConstadSchemaAsserts=0
ConstadSchemaCatalogs=1
ConstadSchemaCharacterSets=2
ConstadSchemaCollations=3
ConstadSchemaColumns=4
ConstadSchemaCheckConstraints=5
ConstadSchemaConstraintColumnUsage=6
ConstadSchemaConstraintTableUsage=7
ConstadSchemaKeyColumnUsage=8
ConstadSchemaReferentialContraints=9
ConstadSchemaTableConstraints=10
ConstadSchemaColumnsDomainUsage=11
ConstadSchemaIndexes=12
ConstadSchemaColumnPrivileges=13
ConstadSchemaTablePrivileges=14
ConstadSchemaUsagePrivileges=15
ConstadSchemaProcedures=16
ConstadSchemaSchemata=17
ConstadSchemaSQLLanguages=18
ConstadSchemaStatistics=19
ConstadSchemaTables=20
ConstadSchemaTranslations=21
ConstadSchemaProviderTypes=22
ConstadSchemaViews=23
ConstadSchemaViewColumnUsage=24
ConstadSchemaViewTableUsage=25
ConstadSchemaProcedureParameters=26
ConstadSchemaForeignKeys=27
ConstadSchemaPrimaryKeys=28
ConstadSchemaProcedureColumns=29
利用openschema可以获得所有表的主键,当然这只是它的很多功能中的一个。
connstr="Provider=MSDAORA.1;UserID=liujincai;password=ljc1001;DataSource=hp1"
setmm=server.CreateObject("adodb.connection")
mm.Openconnstr
ConstadSchemaPrimaryKeys=28
setrs=mm.OpenSchema(adSchemaPrimaryKeys)
Response.Write"<table>"
Response.Write"<TR>"
fori=0tors.fields.count-1
Response.Write"<td>"&rs(i).name&"</td>"
next
Response.Write"</tr>"
dowhilenotrs.eof
Response.Write"<tr>"
fori=0tors.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'"
ifnot(rs.eofandrs.bof)thenResponse.Writers("COLUMN_NAME")
获得任意一个存储过程的参数列表,这个对于想做完全松耦合系统的哥们一定有用的。这个程序获得名字为'PRO_HOUSE_ADD_INFO'的存储过程的参数列表
connstr="Provider=MSDAORA.1;UserID=liujincai;password=ljc1001;DataSource=hp1"
setmm=server.CreateObject("adodb.connection")
mm.Openconnstr
ConstadSchemaProcedureParameters=26
setrs=mm.OpenSchema(adSchemaProcedureParameters)rs.Filter="PROCEDURE_NAME='PRO_HOUSE_ADD_INFO'"Response.Write"<TABLEcellSpacing=0border=1>"
Response.Write"<TBODY><TRbgColor=#dddddd>"
fori=2tors.fields.count-1
Response.Write"<TD>"&rs(i).name&"</TD>"
next
Response.Write"</TR>"
dowhilenotrs.eof
Response.Write"<TRbgColor=#e0d0c0>"
fori=2tors.fields.count-1
Response.Write"<TD>"&rs(i)&"</TD>"
next
Response.Write"</tr>"
rs.movenext
loop
Response.Write"</table>"
经过几个小时的实践探索,终于结束了对Adodb.connection的openschema方法的研究。现在总结一下:
1,Setrecordset=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中列出数据库中的表名和字段名的程序
SetrstSchema=oConn.OpenSchema(adSchemaColumns)
这是关键之处
<%
dsn="DSN=DSNName"
ConstadSchemaTables=20
adSchemaColumns=4
SetoConn=Server.CreateObject("ADODB.Connection")
oConn.opendsn
SetrstSchema=oConn.OpenSchema(adSchemaColumns)
response.write"<table>"
response.write"<tr><td>Tablename</td><td>fieldname</td><td>fieldtype</td><td>isnullable</td><td>fieldsize</td></tr>"
tablename=""
DoUntilrstSchema.EOF
response.write"<tr><td>"
ifrstSchema("Table_name")<>tablenamethen
response.writerstSchema("Table_name")
tablename=rstSchema("Table_name")
else
response.write""
endif
response.write"</td><td>"&rstschema("column_Name")&"</td><td>"
selectcaserstschema("data_type")
case"130"
ifrstschema("CHARACTER_MAXIMUM_LENGTH")=1073741823then
response.write"Memo"
else
response.write"Text"
endif
case135
response.write"Date/Time"
case3
response.write"LongInteger"
case11
response.write"Yes/No"
case131
response.write"Currency"
caseelse
response.writerstschema("data_type")
endselect
response.write"</td><td>"&rstschema("is_nullable")&"</td><td>"
ifrstschema("CHARACTER_MAXIMUM_LENGTH")<>1073741823then
response.writerstschema("CHARACTER_MAXIMUM_LENGTH")
else
response.write""
endif
response.write"</td></tr>"
rstSchema.MoveNext
Loop
response.write"</table>"
%>