获取数据库表名、库名、字段名的方法及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小时内删除。