admin 管理员组

文章数量: 887031


2023年12月22日发(作者:js特效网点使用方法)

.

获取数据库表名、库名、字段名的方法及Fields集合及OpenSchema方法

使用技巧

dadaV20160220

获取字段名

field对象又称字段对象,是recordset的子对象。通过field对象可以动态获得字段的相关信息。

fields集合中的每一个元素都是一个field对象,一个field对象,对应的事recordset数据集合中的一个,也就是一个字段。

通过ASP来看一个数据表的结果,要实现这样的功能,就要用到recordset对象的field集合。

fields属性如下:

Name:字段名

value:字段值

type:字段类型

precision:字段允许最大字数

变量=//获得集合中包含的field对象数目

h//重新获得fields数据集合中包含的field对象

set field=(index);注:index:0~count-1//得到一个field集合

等效于:setfield=(index)

例:

表示你建立的RecordSet对象字段数;

(i).name是指你建立的Rs记录表中第i个字段的名称(从0开始,i为1时指第2个字段名);

应用:(假设rs已经建立):

"user",conn,1,1

fori=-1

"第"&(i+1)&"个字段名是:"(i).name&"

"

next

获取表名

OpenSchema 方法可返回有关数据源的模式信息(比如:表的名称,表中的列名,每列的数据类型);OpenSchema 方法Recordset 将以只读、静态游标模式打开。

.

例:

<%

Set rs=hema(20)

Do Until

If rs(3)="TABLE" Then

"表名:"&rs(2)&"
"

End If

xt

Loop

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=Object("")

属性

属性

ActualSize

Attributes

DefinedSize

Name

NumericScale

描述

返回一个字段值的实际长度。

设置或返回 Field 对象的属性。

返回Field 对象被定义的大小

设置或返回 Field 对象的名称。例:fields(i).name是指你建立的Rs记录表中第i个字段的名称(从0开始,i为1时指第2个字段名)

设置或返回 Field 对象中的值所允许的小数位数。

.

OriginalValue

Precision

Status

Type

UnderlyingValue

Value

返回某个字段的原始值。

设置或返回当表示 Field 对象中的数值时所允许的数字的最大数。

返回 Field 对象的状态。

设置或返回 Field 对象的类型。

返回一个字段的当前值。

设置或返回 Field 对象的值。

集合

集合

Fields

描述

指示在此 Recordset 对象中 Field 对象的数目。

Fields 集合的属性

属性

Count

描述

返回 fields 集合中项目的数目。以 0 起始。

例子:

countfields =

Item(named_item/number)

返回 fields 集合中的某个指定的项目。

例子:

itemfields = (1)

或者itemfields = ("Name")

ADO Connection 对象

Connection 对象

ADO Connection 对象用于创建一个到达某个数据源的开放连接。通过此连接,您可以对一个数据库进行访问和操作。

如果需要多次访问某个数据库,您应当使用 Connection 对象来建立一个连接。您也可以经由一个 Command 或

Recordset 对象传递一个连接字符串来创建某个连接。不过,此类连接仅仅适合一次具体的简单的查询。

ProgID

set objConnection=Object("tion")

方法

方法

OpenSchema

描述

从 provider 返回有关数据源的 schema 信息。

.

OpenSchema 方法

定义和用法

OpenSchema 方法可返回 Recordset 对象,该对象包含有关数据源的模式信息。举例,schema 信息可包括表的名称,表中的列名,每列的数据类型。Recordset 将以只读、静态游标模式打开。

语法

Set rs=hema(querytype,criteria,schemaid)

参数 描述

querytype 必需。任意 SchemaEnum 值,表示要运行的模式查询的类型。

注释:OLEDB 规范只要求三个 SchemaEnum 值得到支持:adSchemaTables,

adSchemaColumns 以及 adSchemaProviderTypes。

criteria 可选。每个 QueryType 选项的查询约束的数组,如 SchemaEnum 中列出的内容。

schemaid OLE DB 规范未定义的提供者模式查询的 GUID。如果 QueryType 被设置为

adSchemaProviderSpecific,则需要此参数。否则,将不使用它。

SchemaEnum值

SchemaEnum 值

常量

adSchemaTables

值 描述

20 返回目录中定义的可存取的表(包括视图)。

adSchemaForeignKeys 27 返回给定用户在目录中定义的外键列。

约束列

TABLE_CATALOG TABLE_SCHEMA

TABLE_NAME TABLE_TYPE

PK_TABLE_CATALOG PK_TABLE_SCHEMA

PK_TABLE_NAME FK_TABLE_CATALOG

FK_TABLE_SCHEMA FK_TABLE_NAME

adSchemaPrimaryKeys 28 返回给定用户在目PK_TABLE_CATALOG PK_TABLE_SCHEMA

录中定义的主键列。 PK_TABLE_NAME

与Setrs=Nothing区别

dadaV20160220

'关闭Recordset(数据集);

set rs=nothing'显式声明该变量为"无",期望占用的内存能回收(实际情况是常常无法回收);

Set Rs=Nothing释放空间,清除该对象,对应的是setrs=CLOSE是关闭数据集。

.

'关闭数据库连接;

set conn=nothing'是释放对象, 释放占用内存。显式声明该变量为"无",期望占用的内存能回收(实际情况跟上面一样糟!);

之后还可以但SetRs=Nothing之后就不可以;

关闭recordset,但是对象仍然存在,与他对应的是;

如果只写Setrs=Nothing,不写;和先关闭再释放效果是一样的。只是尤如你有一个盒子,先盖上盖子再扔掉,与直接扔掉肯定是不一样的^-^.

案例1:

Asp获取数据库中表名、字段名、字段类型方法

公司网站准备改版,要整理一下数据库中表的信息,以便改版中创建新表使用。问题是数据库中表太多,总不能一个字段名一个字段名去写,再去写字段类型,这太麻烦了。于是就想使用asp程序把数据库中表名、字段名、字段类型一次读出来,然后自己把页面保存下来,然后再给每个字段加注释,这样就省下一堆时间。以下是我的asp代码,支持ACCESS和SQL Server两种数据库。

Asp获取数据库中表名、字段名、字段类型

<%

Function OpenConn() '连接数据库代码

'On Error Resume Next

sqlDatabaseIP = "." '服务器IP,本机直接使用点

sqlDatabaseName = "***" '数据库名

sqlUserName = "**" '数据库账号

sqlUserPass = "***" '密码

strConn="Provider=SQLOLEDB;uid="&sqlUserName&";pwd="&sqlUserPass&";Server="&sqlDatabaseIP&";DATABASE="&sqlDatabaseName&""

'db="" 'Access数据库名

' path=h(db)

' strConn = "provider=.4.0;Data Source=" & path

Set Conn = Object("tion")

If Err then

("网站访问繁忙,请稍候再访问")

()

End If

strConn

set OpenConn=Conn

End Function

.

Sub CloseConn(Conn) '关闭数据库代码

On Error Resume Next

If IsObject(Conn) then

()

Set Conn = Nothing

End If

If Err Then

End Sub

Function AccessTypeName(num) '获取Access数据库的字段类型

str=""

Select Case num

Case 3

str = "自动编号/数字"

Case 6

str = "货币"

Case 7

str = "日期/时间"

Case 11

str = "是/否"

Case 202

str = "文本"

Case 203

str = "备注/超链接"

Case 205

str = "OLE对象"

End Select

AccessTypeName=str

End Function

Function SqlTypeName(num) '这是获取sql数据库的字段类型

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

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"

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 Select

SqlTypeName=str

End Function

'功能:Asp获取数据库中表名、字段名、字段类型

'作者:dada

'来源:dadacom

'原创技术文章,转载请保留此信息,谢谢

set Conn=openconn()

set rs=Object("set")

Set rs=hema(20)

Do Until

If rs(3)="TABLE" Then

"表名:"&rs(2)&"
"

Set rs1=Object("set")

.

sql="select * from ["&rs(2)&"]"

Set rs1=e(sql)

"

"

For i=0 To -1

fieldname=(i).name

fieldtype=(i).type

"

"

'Access数据库

'

"

" 'sql数据库使用这句

Next

"

字段名字段类型备注
"&fieldname&""&AccessTypeName(fieldtype)&"  
"&fieldname&""&SqlTypeName(fieldtype)&"  

"

End If

xt

Loop

Set rs=Nothing

Set conn=nothing

%>

案例2

ASP获取数据库表名,字段名

以SQLServer为例:

< %

SET Conn=Object("tion")

"Server=IP地址;Provider=sqloledb;Database=库名称;UID=用户名;PWD=密码;"

%>

读SqlServer库中的表名:

< %

Set rs=hema(20)

While not

("所在数据库名:" & rs(0) & "

")

("所有者:" & rs(1) & "
")

("表 名:" & rs(2) & "
")

("表的类型:" & rs(3) & "
")

xt

Wend

%>

这样,我们知道表名了,现在我们再来看看怎么对表的字段进行操作。

假设:其中数据库中有表:[Things],表中字段为:id,thingsName,thingsType

.

获取该表的所有字段名:

< %

Dim i,j,Sql

Set rs=Object(“set”)

Sql="select * from [Things] where 1<>1"

sql,Conn,1,1

j=

For i=0 to (j-1)

("第" & i+1 & "个字段名:" & (i).Name & "

")

Next

%>

好了,现在我们明白了怎么获取字段名了。

如果大家想对获取的字段值进行一些操作,这也是可以的:

比如我们想要删除表[Things]中字段thingsType ,就可以这样写:

< %

Sql="ALTER TABLE [Things] DROP COLUMN thingsType"

e Sql

%>

又比如我们想要添加一个字段thingsCOLOR,它的类型为varchar型,长度为20,且默认值为Red,写法如下:

< %

Sql="ALTER TABLE [Things] ADD thingsCOLOR VARCHAR(20) DEFAULT 'Red'"

e Sql

%>

以上对字段的基本操作都是用SQL语言实现,在ASP中,通过SQL语言,我们只要有足够的权限就可以完成更多的数据库操作,比如用CREATE建表,用DROP删除表等等。


本文标签: 对象 数据库 返回