獲取數(shù)據(jù)庫(kù)表名、庫(kù)名、字段名的方法及Fields集合及OpenSchema方法使用技巧_第1頁(yè)
獲取數(shù)據(jù)庫(kù)表名、庫(kù)名、字段名的方法及Fields集合及OpenSchema方法使用技巧_第2頁(yè)
獲取數(shù)據(jù)庫(kù)表名、庫(kù)名、字段名的方法及Fields集合及OpenSchema方法使用技巧_第3頁(yè)
獲取數(shù)據(jù)庫(kù)表名、庫(kù)名、字段名的方法及Fields集合及OpenSchema方法使用技巧_第4頁(yè)
獲取數(shù)據(jù)庫(kù)表名、庫(kù)名、字段名的方法及Fields集合及OpenSchema方法使用技巧_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、獲取數(shù)據(jù)庫(kù)表名、庫(kù)名、字段名的方法及Fields集合及OpenSchema方法使用技巧dadaV20160220獲取字段名field對(duì)象又稱字段對(duì)象,是recordset的子對(duì)象。通過(guò)field對(duì)象可以動(dòng)態(tài)獲得字段的相關(guān)信息。fields集合中的每一個(gè)元素都是一個(gè)field對(duì)象,一個(gè)field對(duì)象,對(duì)應(yīng)的事recordset數(shù)據(jù)集合中的一個(gè),也就是一個(gè)字段。通過(guò)ASP來(lái)看一個(gè)數(shù)據(jù)表的結(jié)果,要實(shí)現(xiàn)這樣的功能,就要用到recordset對(duì)象的field集合。fields屬性如下:Name:字段名value:字段值type:字段類型precision:字段允許最大字?jǐn)?shù)變量=recordset.fie

2、lds.count/獲得集合中包含的field對(duì)象數(shù)目recordset.fields.refresh/重新獲得fields數(shù)據(jù)集合中包含的field對(duì)象set field=recordset.fields.item(index);注:index:0count-1/得到一個(gè)field集合等效于:setfield=recordset.fields(index)例:rs.fields.count表示你建立的RecordSet對(duì)象字段數(shù);rs.fields(i).name是指你建立的Rs記錄表中第i個(gè)字段的名稱(從0開(kāi)始,i為1時(shí)指第2個(gè)字段名);應(yīng)用:(假設(shè)rs已經(jīng)建立):rs.open"

3、;user",conn,1,1fori=0tors.fields.count-1response.write"第"&(i+1)&"個(gè)字段名是:"rs.fields(i).name&"<br>"next獲取表名OpenSchema 方法可返回有關(guān)數(shù)據(jù)源的模式信息(比如:表的名稱,表中的列名,每列的數(shù)據(jù)類型);OpenSchema 方法Recordset 將以只讀、靜態(tài)游標(biāo)模式打開(kāi)。例:<%Set rs=Conn.OpenSchema(20) Do Until rs.EOF If rs(

4、3)="TABLE" Thenresponse.write "表名:"&rs(2)&"<br />"End Ifrs.MoveNext Loop Rs.closeSet rs=Nothing'OpenSchema(20)方法將返回表的目錄(TABLE_CATALOG)、模式(TABLE_SCHEMA)、表名(TABLE_NAME)、數(shù)據(jù)類型(TABLE_TYPE)的對(duì)象,并且由這些名稱、表中的列名、每列的數(shù)據(jù)類型形成Recordset集合; 'rs(0)對(duì)應(yīng)表的目錄(TABLE_CATALO

5、G)值;rs(1)模式(TABLE_SCHEMA);rs(2)表名(TABLE_NAME);rs(3)數(shù)據(jù)類型(TABLE_TYPE);惡補(bǔ)rs(0)與rs("字段名")含義!rs(0)是按SQL語(yǔ)句讀出來(lái)的記錄集的先后順序命名的,rs(0)就是你select出來(lái)的第一個(gè)記錄集。等價(jià)如下:Select id,name,pwdfromtablers(0)=rs("id")rs(1)=rs("name")rs(2)=rs("pwd")Field 對(duì)象ADO Field 對(duì)象包含有關(guān) Recordset 對(duì)象中某一列的信

6、息。Recordset 中的每一列對(duì)應(yīng)一個(gè) Field 對(duì)象。ProgIDset objField=Server.CreateObject("ADODB.field")屬性屬性描述ActualSize返回一個(gè)字段值的實(shí)際長(zhǎng)度。Attributes設(shè)置或返回 Field 對(duì)象的屬性。DefinedSize返回Field 對(duì)象被定義的大小Name設(shè)置或返回 Field 對(duì)象的名稱。例:fields(i).name是指你建立的Rs記錄表中第i個(gè)字段的名稱(從0開(kāi)始,i為1時(shí)指第2個(gè)字段名)NumericScale設(shè)置或返回 Field 對(duì)象中的值所允許的小數(shù)位數(shù)。Original

7、Value返回某個(gè)字段的原始值。Precision設(shè)置或返回當(dāng)表示 Field 對(duì)象中的數(shù)值時(shí)所允許的數(shù)字的最大數(shù)。Status返回 Field 對(duì)象的狀態(tài)。Type設(shè)置或返回 Field 對(duì)象的類型。UnderlyingValue返回一個(gè)字段的當(dāng)前值。Value設(shè)置或返回 Field 對(duì)象的值。Rs.Fields集合集合描述Fields指示在此 Recordset 對(duì)象中 Field 對(duì)象的數(shù)目。Fields 集合的屬性屬性描述Count返回 fields 集合中項(xiàng)目的數(shù)目。以 0 起始。例子:countfields = rs.Fields.CountItem(named_item/numb

8、er)返回 fields 集合中的某個(gè)指定的項(xiàng)目。例子:itemfields = rs.Fields.Item(1)或者itemfields = rs.Fields.Item("Name")ADO Connection 對(duì)象Connection 對(duì)象ADO Connection 對(duì)象用于創(chuàng)建一個(gè)到達(dá)某個(gè)數(shù)據(jù)源的開(kāi)放連接。通過(guò)此連接,您可以對(duì)一個(gè)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)和操作。如果需要多次訪問(wèn)某個(gè)數(shù)據(jù)庫(kù),您應(yīng)當(dāng)使用 Connection 對(duì)象來(lái)建立一個(gè)連接。您也可以經(jīng)由一個(gè) Command 或 Recordset 對(duì)象傳遞一個(gè)連接字符串來(lái)創(chuàng)建某個(gè)連接。不過(guò),此類連接僅僅適合一次具體的簡(jiǎn)

9、單的查詢。ProgIDset objConnection=Server.CreateObject("ADODB.connection")方法方法描述OpenSchema從 provider 返回有關(guān)數(shù)據(jù)源的 schema 信息。OpenSchema 方法定義和用法OpenSchema 方法可返回 Recordset 對(duì)象,該對(duì)象包含有關(guān)數(shù)據(jù)源的模式信息。舉例,schema 信息可包括表的名稱,表中的列名,每列的數(shù)據(jù)類型。Recordset 將以只讀、靜態(tài)游標(biāo)模式打開(kāi)。語(yǔ)法Set rs=objconn.OpenSchema(querytype,criteria,schemai

10、d)參數(shù)描述querytype必需。任意 SchemaEnum 值,表示要運(yùn)行的模式查詢的類型。注釋:OLEDB 規(guī)范只要求三個(gè) SchemaEnum 值得到支持:adSchemaTables, adSchemaColumns 以及 adSchemaProviderTypes。criteria可選。每個(gè) QueryType 選項(xiàng)的查詢約束的數(shù)組,如 SchemaEnum 中列出的內(nèi)容。schemaidOLE DB 規(guī)范未定義的提供者模式查詢的 GUID。如果 QueryType 被設(shè)置為 adSchemaProviderSpecific,則需要此參數(shù)。否則,將不使用它。Sc

11、hemaEnum值SchemaEnum 值常量值描述約束列adSchemaTables20返回目錄中定義的可存取的表(包括視圖)。TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPEadSchemaForeignKeys27返回給定用戶在目錄中定義的外鍵列。PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAME FK_TABLE_CATALOG FK_TABLE_SCHEMA FK_TABLE_NAMEadSchemaPrimaryKeys28返回給定用戶在目錄中定義的主鍵列。PK_TABLE_CATALOG P

12、K_TABLE_SCHEMA PK_TABLE_NAMErs.close與Setrs=Nothing區(qū)別dadaV20160220rs.close'關(guān)閉Recordset(數(shù)據(jù)集);set rs=nothing'顯式聲明該變量為"無(wú)",期望占用的內(nèi)存能回收(實(shí)際情況是常常無(wú)法回收);Set Rs=Nothing釋放空間,清除該對(duì)象,對(duì)應(yīng)的是setrs=CLOSE是關(guān)閉數(shù)據(jù)集。conn.close'關(guān)閉數(shù)據(jù)庫(kù)連接;set conn=nothing'是釋放對(duì)象, 釋放占用內(nèi)存。顯式聲明該變量為"無(wú)",期望占用的內(nèi)存能回收(實(shí)際

13、情況跟上面一樣糟!);Rs.Close之后還可以Rs.open但SetRs=Nothing之后就不可以Rs.open;Rs.Close關(guān)閉recordset,但是對(duì)象仍然存在,與他對(duì)應(yīng)的是rs.open;如果只寫(xiě)Setrs=Nothing,不寫(xiě)rs.close;和先關(guān)閉再釋放效果是一樣的。只是尤如你有一個(gè)盒子,先蓋上蓋子再扔掉,與直接扔掉肯定是不一樣的-.案例1:Asp獲取數(shù)據(jù)庫(kù)中表名、字段名、字段類型方法公司網(wǎng)站準(zhǔn)備改版,要整理一下數(shù)據(jù)庫(kù)中表的信息,以便改版中創(chuàng)建新表使用。問(wèn)題是數(shù)據(jù)庫(kù)中表太多,總不能一個(gè)字段名一個(gè)字段名去寫(xiě),再去寫(xiě)字段類型,這太麻煩了。于是就想使用asp程序把數(shù)據(jù)庫(kù)中表名、

14、字段名、字段類型一次讀出來(lái),然后自己把頁(yè)面保存下來(lái),然后再給每個(gè)字段加注釋,這樣就省下一堆時(shí)間。以下是我的asp代碼,支持ACCESS和SQL Server兩種數(shù)據(jù)庫(kù)。<title>Asp獲取數(shù)據(jù)庫(kù)中表名、字段名、字段類型</title><style type="text/css">td font-size:12px; text-align:center; </style><%Function OpenConn() '連接數(shù)據(jù)庫(kù)代碼'On Error Resume NextsqlDatabaseIP =

15、"." '服務(wù)器IP,本機(jī)直接使用點(diǎn)sqlDatabaseName = "*" '數(shù)據(jù)庫(kù)名sqlUserName = "*" '數(shù)據(jù)庫(kù)賬號(hào)sqlUserPass = "*" '密碼strConn="Provider=SQLOLEDB;uid="&sqlUserName&"pwd="&sqlUserPass&"Server="&sqlDatabaseIP&"DATABA

16、SE="&sqlDatabaseName&""'db="db1.mdb" 'Access數(shù)據(jù)庫(kù)名'path=server.MapPath(db) ' strConn = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path Set Conn = server.CreateObject("ADODB.Connection")If Err then Err.clear Response.Write(

17、"網(wǎng)站訪問(wèn)繁忙,請(qǐng)稍候再訪問(wèn)") Response.End()End IfConn.Open strConnset OpenConn=ConnEnd FunctionSub CloseConn(Conn) '關(guān)閉數(shù)據(jù)庫(kù)代碼 On Error Resume Next If IsObject(Conn) then Conn.Close() Set Conn = Nothing End If If Err Then Err.ClearEnd SubFunction AccessTypeName(num) '獲取Access數(shù)據(jù)庫(kù)的字段類型 str="&q

18、uot; Select Case num Case 3 str = "自動(dòng)編號(hào)/數(shù)字" Case 6 str = "貨幣" Case 7 str = "日期/時(shí)間" Case 11 str = "是/否" Case 202 str = "文本" Case 203 str = "備注/超鏈接" Case 205 str = "OLE對(duì)象" End SelectAccessTypeName=strEnd FunctionFunction SqlTypeName

19、(num) '這是獲取sql數(shù)據(jù)庫(kù)的字段類型str="" Select Case num Case 2 str = "smallint" Case 3 str = "int" Case 4 str = "real" Case 5 str = "float" Case 6 str = "money/smallmoney" Case 11 str = "bit" Case 12 str = "sql_variant" Case 17

20、 str = "tinyint" Case 20 str = "bigint" Case 72 str = "uniqueidentifier" Case 128 str = "binary/timestamp" Case 129 str = "char" Case 130 str = "nchar" Case 131 str = "decimal/numeric" Case 135 str = "datetime/smalldatetime&q

21、uot; Case 200 str = "varchar" Case 201 str = "text" Case 202 str = "nvarchar" Case 203 str = "ntext" Case 204 str = "varbinary" Case 205 str = "image" End SelectSqlTypeName=strEnd Function'功能:Asp獲取數(shù)據(jù)庫(kù)中表名、字段名、字段類型'作者:dada'來(lái)源:dada

22、com'原創(chuàng)技術(shù)文章,轉(zhuǎn)載請(qǐng)保留此信息,謝謝set Conn=openconn()set rs=server.CreateObject("adodb.recordset")Set rs=Conn.OpenSchema(20) Do Until rs.EOF If rs(3)="TABLE" Thenresponse.write "表名:"&rs(2)&"<br />"Set rs1=server.CreateObject("adodb.recordset")s

23、ql="select * from "&rs(2)&""Set rs1=conn.execute(sql)response.write "<table cellpadding=0 cellspacing=0 border=1 width=""500"" ><tr><td>字段名</td><td>字段類型</td><td>備注</td></tr>"For i=0 To rs1

24、.fields.count-1fieldname=rs1.fields(i).namefieldtype=rs1.fields(i).typeresponse.write "<tr><td>"&fieldname&"</td><td>"&AccessTypeName(fieldtype)&"&nbsp;</td><td>&nbsp;</td></tr>" 'Access數(shù)據(jù)庫(kù)'

25、response.write "<tr><td>"&fieldname&"</td><td>"&SqlTypeName(fieldtype)&"&nbsp;</td><td>&nbsp;</td></tr>" 'sql數(shù)據(jù)庫(kù)使用這句Nextresponse.write "</table><br><br>"End Ifrs.Move

26、Next Loop Set rs=NothingSet conn=nothing%>案例2ASP獲取數(shù)據(jù)庫(kù)表名,字段名以SQLServer為例:< % SET Conn=Server.CreateObject("ADODB.Connection") Conn.Open "Server=IP地址;Provider=sqloledb;Database=庫(kù)名稱;UID=用戶名;PWD=密碼;" %>讀SqlServer庫(kù)中的表名:< % Set rs=Conn.OpenSchema(20) While not rs.EOF Response.Write("所在數(shù)據(jù)庫(kù)名:" & rs(0) & "<br>") Response.Write("所有者:" & rs(1) & "<br />") Response.Write("表 名:" & rs(2) & "<br />") Response.Write("表的類型:" &a

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論