ASP教程:OpenSchema方法技術探討

來源:互聯網
上載者:User
教程 文法
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>"
%>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.