1、获取数据库表名、库名、字段名的方法及 Fields 集合及 OpenSchema 方法使用技巧dadaV20160220获取字段名field 对象又称字段对象,是 recordset 的子对象。通过 field 对象可以动态获得字段的相关信息。fields 集合中的每一个元素都是一个 field 对象,一个 field 对象,对应的事 recordset 数据集合中的一个,也就是一个字段。通过 ASP 来看一个数据表的结果,要实现这样的功能,就要用到 recordset 对象的 field集合。fields 属性如下:Name:字段名value:字段值type:字段类型precision:字段
2、允许最大字数变量=recordset.fields.count/获得集合中包含的 field 对象数目recordset.fields.refresh/重新获得 fields 数据集合中包含的 field 对象set field=recordset.fields.item(index);注:index:0count-1/得到一个 field 集合等效于:setfield=recordset.fields(index)例:rs.fields.count 表示你建立的 RecordSet 对象字段数;rs.fields(i).name 是指你建立的 Rs 记录表中第 i 个字段的名称(从 0 开始
3、,i 为 1 时指第 2 个字段名);应用:(假设 rs 已经建立) :rs.open“user“,conn,1,1fori=0tors.fields.count-1response.write“第“ 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,pwd
4、fromtablers(0)=rs(“id“)rs(1)=rs(“name“)rs(2)=rs(“pwd“)Field 对象ADO Field 对象包含有关 Recordset 对象中某一列的信息。Recordset 中的每一列对应一个 Field 对象。ProgIDset objField=Server.CreateObject(“ADODB.field“)属性属性 描述ActualSize 返回一个字段值的实际长度。Attributes 设置或返回 Field 对象的属性。DefinedSize 返回 Field 对象被定义的大小Name 设置或返回 Field 对象的名称。例: fiel
5、ds(i).name 是指你建立的 Rs 记录表中第 i 个字段的名称(从 0 开始,i 为 1 时指第 2 个字段名)NumericScale 设置或返回 Field 对象中的值所允许的小数位数。OriginalValue 返回某个字段的原始值。Precision 设置或返回当表示 Field 对象中的数值时所允许的数字的最大数。Status 返回 Field 对象的状态。Type 设置或返回 Field 对象的类型。UnderlyingValue 返回一个字段的当前值。Value 设置或返回 Field 对象的值。Rs.Fields 集合集合 描述Fields 指示在此 Recordset
6、 对象中 Field 对象的数目。Fields 集合的属性属性 描述Count 返回 fields 集合中项目的数目。以 0 起始。例子:countfields = rs.Fields.CountItem(named_item/number) 返回 fields 集合中的某个指定的项目。例子:itemfields = rs.Fields.Item(1)或者 itemfields = rs.Fields.Item(“Name“)ADO Connection 对象Connection 对象ADO Connection 对象用于创建一个到达某个数据源的开放连接。通过此连接,您可以对一个数据库进行访问
7、和操作。如果需要多次访问某个数据库,您应当使用 Connection 对象来建立一个连接。您也可以经由一个 Command 或 Recordset 对象传递一个连接字符串来创建某个连接。不过,此类连接仅仅适合一次具体的简单的查询。ProgIDset objConnection=Server.CreateObject(“ADODB.connection“)方法方法 描述OpenSchema 从 provider 返回有关数据源的 schema 信息。OpenSchema 方法定义和用法OpenSchema 方法可返回 Recordset 对象,该对象包含有关数据源的模式信息。举例,schema
8、信息可包括表的名称,表中的列名,每列的数据类型。Recordset 将以只读、静态游标模式打开。语法Set rs=objconn.OpenSchema(querytype,criteria,schemaid)参数 描述querytype 必需。任意 SchemaEnum 值,表示要运行的模式查询的类型。注释:OLEDB 规范只要求三个 SchemaEnum 值得到支持:adSchemaTables, adSchemaColumns 以及 adSchemaProviderTypes。criteria 可选。每个 QueryType 选项的查询约束的数组,如 SchemaEnum 中列出的内容。s
9、chemaid OLE DB 规范未定义的提供者模式查询的 GUID。如果 QueryType 被设置为 adSchemaProviderSpecific,则需要此参数。否则,将不使用它。SchemaEnum 值SchemaEnum 值常量 值 描述 约束列adSchemaTables 20 返回目录中定义的可存取的表(包括视图)。TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPEadSchemaForeignKeys 27 返回给定用户在目录中定义的外键列。PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAM
10、E FK_TABLE_CATALOG FK_TABLE_SCHEMA FK_TABLE_NAMEadSchemaPrimaryKeys 28 返回给定用户在目录中定义的主键列。PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAMErs.close 与 Setrs=Nothing 区别dadaV20160220rs.close关闭 Recordset(数据集);set rs=nothing显式声明该变量为“无“ ,期望占用的内存能回收(实际情况是常常无法回收);Set Rs=Nothing 释放空间,清除该对象,对应的是 setrs=CLOSE 是关闭数据集
11、。conn.close关闭数据库连接;set conn=nothing是释放对象, 释放占用内存。显式声明该变量为“ 无“,期望占用的内存能回收(实际情况跟上面一样糟!);Rs.Close 之后还可以 Rs.open 但 SetRs=Nothing 之后就不可以 Rs.open;Rs.Close 关闭 recordset,但是对象仍然存在,与他对应的是 rs.open;如果只写 Setrs=Nothing,不写 rs.close;和先关闭再释放效果是一样的。只是尤如你有一个盒子,先盖上盖子再扔掉,与直接扔掉肯定是不一样的-.案例 1:Asp 获取数据库中表名、字段名、字段类型方法公司网站准备改
12、版,要整理一下数据库中表的信息,以便改版中创建新表使用。问题是数据库中表太多,总不能一个字段名一个字段名去写,再去写字段类型,这太麻烦了。于是就想使用 asp 程序把数据库中表名、字段名、字段类型一次读出来,然后自己把页面保存下来,然后再给每个字段加注释,这样就省下一堆时间。以下是我的 asp 代码,支持 ACCESS 和 SQL Server 两种数据库。Asp 获取数据库中表名、字段名、字段类型td font-size:12px; text-align:center; “Set rs1=server.CreateObject(“adodb.recordset“)sql=“select *
13、from “ Access 数据库response.write “ sql 数据库使用这句Nextresponse.write “End Ifrs.MoveNext Loop Set rs=NothingSet conn=nothing%案例 2ASP 获取数据库表名,字段名以 SQLServer 为例:读 SqlServer 库中的表名:“) Response.Write(“所有者:“ & rs(1) & “) Response.Write(“表 名:“ & rs(2) & “) Response.Write(“表的类型:“ & rs(3) & “) rs.MoveNext Wend %这样
14、,我们知道表名了,现在我们再来看看怎么对表的字段进行操作。假设:其中数据库中有表:Things,表中字段为:id,thingsName,thingsType获取该表的所有字段名:1“ rs.open sql,Conn,1,1 j=rs.Fields.count For i=0 to (j-1) Response.Write(“第“ & i+1 & “个字段名:“ & rs.Fields(i).Name & “) Next %好了,现在我们明白了怎么获取字段名了。如果大家想对获取的字段值进行一些操作,这也是可以的:比如我们想要删除表Things中字段 thingsType ,就可以这样写:又比如我们想要添加一个字段 thingsCOLOR,它的类型为 varchar 型,长度为 20,且默认值为 Red,写法如下:以上对字段的基本操作都是用 SQL 语言实现,在 ASP 中,通过 SQL 语言,我们只要有足够的权限就可以完成更多的数据库操作,比如用 CREATE 建表,用 DROP 删除表等等。