获取数据库表名、库名、字段名的方法及Fields集合及OpenSchema方法
使用技巧
dadaV20160220
获取字段名
field对象又称字段对象,是recordset的子对象。通过field对象可以动态获得字段的相关信息。
fields集合中的每一个元素都是一个field对象,一个field对象,对应的事recordset数据集合中的一个,也就是一个字段。
通过ASP来看一个数据表的结果,要实现这样的功能,就要用到recordset对象的field集合。
fields属性如下:
Name:字段名
value:字段值
type:字段类型
precision:字段允许最大字数
变量=unt//获得集合中包含的field对象数目
fresh//重新获得fields数据集合中包含的field对象
set field=recordset.fields.item(index);注:index:0~count-1//得到一个field集合
等效于:setfield=recordset.fields(index)
例:
unt表示你建立的RecordSet对象字段数;
rs.fields(i).name是指你建立的Rs记录表中第i个字段的名称(从0开始,i为1时指第2个字段名);
应用:(假设rs已经建立):
rs.open"user",conn,1,1
fori=unt-1
response.write"第"&(i+1)&"个字段名是:"rs.fields(i).name&"<br>"
next
获取表名
OpenSchema 方法可返回有关数据源的模式信息(比如:表的名称,表中的列名,每列的数据类型);OpenSchema 方法Recordset 将以只读、静态游标模式打开。
例:
<%
Set rs=Conn.OpenSchema(20)
Do Until rs.EOF
If rs(3)="TABLE" Then
response.write "表名:"&rs(2)&"<br />"
End If
rs.MoveNext
Loop
Rs.close
Set rs=Nothing
'OpenSchema(20)方法将返回表的目录(TABLE_CATALOG)、模式(TABLE_SCHEMA)、表名(TABLE_NAME)、数据类型(TABLE_TYPE)的对象,并且由这些名称、表中的列
名、每列的数据类型形成Recordset集合;
'rs(0)对应表的目录(TABLE_CATALOG)值;rs(1)→模式(TABLE_SCHEMA);rs(2)→表名(TABLE_NAME);rs(3)→数据类型(TABLE_TYPE);
恶补rs(0)与rs("字段名")含义!
rs(0)是按SQL语句读出来的记录集的先后顺序命名的,rs(0)就是你select出来的第一个记录集。等价如下:
Select id,name,pwdfromtable
rs(0)=rs("id")
rs(1)=rs("name")
rs(2)=rs("pwd")
Field 对象
ADO Field 对象包含有关 Recordset 对象中某一列的信息。Recordset 中的每一列对应一个 Field 对象。
ProgID
set objField=Server.CreateObject("ADODB.field")
属性
属性 | 描述 |
ActualSize | 返回一个字段值的实际长度。 |
Attributes | 设置或返回 Field 对象的属性。 |
DefinedSize | 返回Field 对象被定义的大小 |
Name | 设置或返回 Field 对象的名称。例:fields(i).name是指你建立的Rs记录表中第i个字段的名称(从0开始,i为1时指第2个字段名) |
NumericScale | 设置或返回 Field 对象中的值所允许的小数位数。 |
OriginalValue | 返回某个字段的原始值。 |
Precision | 设置或返回当表示 Field 对象中的数值时所允许的数字的最大数。 |
Status | 返回 Field 对象的状态。 |
Type | 设置或返回 Field 对象的类型。 |
UnderlyingValue | 返回一个字段的当前值。 |
Value | 设置或返回 Field 对象的值。 |
Rs.Fields集合
集合 | 描述 |
Fields | 指示在此 Recordset 对象中 Field 对象的数目。 |
Fields 集合的属性
属性 | 描述 |
Count | 返回 fields 集合中项目的数目。以 0 起始。 例子: countfields = rs.Fields.Count |
Item(named_item/number) | 返回 fields 集合中的某个指定的项目。 例子: itemfields = rs.Fields.Item(1) 或者itemfields = rs.Fields.Item("Name") |
ADO Connection 对象
Connection 对象
ADO Connection 对象用于创建一个到达某个数据源的开放连接。通过此连接,您可以对一个数据库进行访问和操作。
如果需要多次访问某个数据库,您应当使用 Connection 对象来建立一个连接。您也可以经由一个 Command 或 Recordset 对象传递一个连接字符串来创建某个连接。不过,此类连接仅仅适合一次具体的简单的查询。
ProgID
set objConnection=Server.CreateObject("tion")
方法
方法 | 描述 |
OpenSchema | 从 provider 返回有关数据源的 schema 信息。 |
OpenSchema 方法
定义和用法
OpenSchema 方法可返回 Recordset 对象,该对象包含有关数据源的模式信息。举例,schema 信息可包括表的名称,表中的列名,每列的数据类型。Recordset 将以只读、静态游标模式打开。
语法
Set rs=objconn.OpenSchema(querytype,criteria,schemaid)
参数 | 描述 |
querytype | 必需。任意 SchemaEnum 值,表示要运行的模式查询的类型。 注释:OLEDB 规范只要求三个 SchemaEnum 值得到支持:adSchemaTables, adSchemaColumns 以及 adSchemaProviderTypes。 |
criteria | 可选。每个 QueryType 选项的查询约束的数组,如 SchemaEnum 中列出的内容。 |
schemaid | OLE DB 规范未定义的提供者模式查询的 GUID。如果 QueryType 被设置为 adSchemaProviderSpecific,则需要此参数。否则,将不使用它。 |
SchemaEnum值
SchemaEnum 值
常量 | 值 | 描述 | 约束列 |
adSchemaTables | 20 | 返回目录中定义的可存取的表(包括视图)。 | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE |
adSchemaForeignKeys | 27 | 返回给定用户在目录中定义的外键列。 | PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAME FK_TABLE_CATALOG FK_TABLE_SCHEMA FK_TABLE_NAME |
adSchemaPrimaryKeys | 28 | 返回给定用户在目录中定义的主键列。 | enum怎么用 PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAME |
rs.close与Setrs=Nothing区别
dadaV20160220
rs.close'关闭Recordset(数据集);
set rs=nothing'显式声明该变量为"无",期望占用的内存能回收(实际情况是常常无法回收);
Set Rs=Nothing释放空间,清除该对象,对应的是setrs=CLOSE是关闭数据集。
conn.close'关闭数据库连接;
set conn=nothing'是释放对象, 释放占用内存。显式声明该变量为"无",期望占用的内存能回收(实际情况跟上面一样糟!);
Rs.Close之后还可以Rs.open但SetRs=Nothing之后就不可以Rs.open;
Rs.Close关闭recordset,但是对象仍然存在,与他对应的是rs.open;
如果只写Setrs=Nothing,不写rs.close;和先关闭再释放效果是一样的。只是尤如你有一个盒子,先盖上盖子再扔掉,与直接扔掉肯定是不一样的^-^.
案例1:
Asp获取数据库中表名、字段名、字段类型方法
准备改版,要整理一下数据库中表的信息,以便改版中创建新表使用。问题是数据库中表太多,总不能一个字段名一个字段名去写,再去写字段类型,这太麻烦了。于是就想使用asp程序把数据库中表名、字段名、字段类型一次读出来,然后自己把页面保存下来,然后再给每个字段加注释,这样就省下一堆时间。以下是我的asp代码,支持ACCESS和SQL Server两种数据库。
<title>Asp获取数据库中表名、字段名、字段类型</title>
<style type="text/css">
td{ font-size:12px; text-align:center; }
</style>
<%
Function OpenConn() '连接数据库代码
'On Error Resume Next
sqlDatabaseIP = "." '服务器IP,本机直接使用点
sqlDatabaseName = "***" '数据库名
sqlUserName = "**" '数据库账号
sqlUserPass = "***" '密码
strConn="Provider=SQLOLEDB;uid="&sqlUserName&";pwd="&sqlUserPass&";Server="&sqlDatabaseIP&";DATABASE="&sqlDatabaseName&""
'db="db1.mdb" 'Access数据库名
' 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("网站访问繁忙,请稍候再访问")
Response.End()
End If
Conn.Open strConn
set OpenConn=Conn
End Function
Sub CloseConn(Conn) '关闭数据库代码
On Error Resume Next
If IsObject(Conn) then
Conn.Close()
Set Conn = Nothing
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论