<
%
'
==========================================================================
'
文件名称:clsDbCtrl.asp
'
功 能:数据库操作类
'
作 者:coldstone (coldstone[在]qq.com)
'
程序版本:v1.0.5
'
完成时间:2005.09.23
'
修改时间:2007.10.30
'
版权声明:可以在任意作品中使用本程序代码,但请保留此版权信息。
'
如果你修改了程序中的代码并得到更好的应用,请发送一份给我,谢谢。
'
轉自:http://www.ezsaler.com/Blog/post/158.html
'
==========================================================================
Dim
a : a
=
CreatConn(
0
,
"
master
"
,
"
localhost
"
,
"
sa
"
,
""
)
'
MSSQL数据库
'
Dim a : a = CreatConn(1, "Data/%TestDB%.mdb", "", "", "") 'Access数据库
'
Dim a : a = CreatConn(1, "E:\MyWeb\Data\%TestDB%.mdb", "", "", "mdbpassword")
Dim
Conn
'
OpenConn() '在加载时就建立的默认连接对象Conn,默认使用数据库a
Sub
OpenConn :
Set
Conn
=
Oc(a) :
End Sub
Sub
CloseConn : Co(Conn) :
End Sub
Function
Oc(ByVal Connstr)
On
Error
Resume
Next
Dim
objConn
Set
objConn
=
Server.CreateObject(
"
ADODB.Connection
"
)
objConn.Open Connstr
If
Err.number
<>
0
Then
Response.Write(
"
<div id=""DBError"">数据库服务器端连接错误,请与网站管理员联系。</div>
"
)
'
Response.Write("错误信息:" & Err.Description)
objConn.Close
Set
objConn
=
Nothing
Response.End
End
If
Set
Oc
=
objConn
End Function
Sub
Co(obj)
On
Error
Resume
Next
Set
obj
=
Nothing
End Sub
Function
CreatConn(ByVal dbType, ByVal strDB, ByVal strServer, ByVal strUid, ByVal strPwd)
Dim
TempStr
Select
Case
dbType
Case
"
0
"
,
"
MSSQL
"
TempStr
=
"
driver={sql server};server=
"
&
strServer
&
"
;uid=
"
&
strUid
&
"
;pwd=
"
&
strPwd
&
"
;database=
"
&
strDB
Case
"
1
"
,
"
ACCESS
"
Dim
tDb :
If
Instr
(strDB,
"
:
"
)
>
0
Then
: tDb
=
strDB :
Else
: tDb
=
Server.MapPath(strDB) :
End
If
TempStr
=
"
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
"
&
tDb
&
"
;Jet OLEDB:Database Password=
"
&
strPwd
&
"
;
"
Case
"
3
"
,
"
MYSQL
"
TempStr
=
"
Driver={mySQL};Server=
"
&
strServer
&
"
;Port=3306;Option=131072;Stmt=; Database=
"
&
strDB
&
"
;Uid=
"
&
strUid
&
"
;Pwd=
"
&
strPwd
&
"
;
"
Case
"
4
"
,
"
ORACLE
"
TempStr
=
"
Driver={Microsoft ODBC for Oracle};Server=
"
&
strServer
&
"
;Uid=
"
&
strUid
&
"
;Pwd=
"
&
strPwd
&
"
;
"
End
Select
CreatConn
=
TempStr
End Function
Class dbCtrl
Private
debug
Private
idbConn
Private
idbErr
Private
Sub
Class_Initialize()
debug
=
true
'
调试模式是否开启
idbErr
=
"
出现错误:
"
If
IsObject
(Conn)
Then
Set
idbConn
=
Conn
End
If
End Sub
Private
Sub
Class_Terminate()
Set
idbConn
=
Nothing
If
debug
And
idbErr
<>
"
出现错误:
"
Then
Response.Write(idbErr)
End Sub
Public
Property
Let
dbConn(pdbConn)
If
IsObject
(pdbConn)
Then
Set
idbConn
=
pdbConn
Else
Set
idbConn
=
Conn
End
If
End Property
Public
Property
Get
dbErr()
dbErr
=
idbErr
End Property
Public
Property
Get
Version
Version
=
"
ASP Database Ctrl V1.0 By ColdStone
"
End Property
Public
Function
AutoID(ByVal TableName)
On
Error
Resume
Next
Dim
m_No,Sql, m_FirTempNo
Set
m_No
=
Server.CreateObject(
"
adodb.recordset
"
)
Sql
=
"
SELECT * FROM [
"
&
TableName
&
"
]
"
m_No.Open Sql,idbConn,
3
,
3
If
m_No.EOF
Then
AutoID
=
1
Else
Do
While
Not
m_No.EOF
m_FirTempNo
=
m_No.Fields(
0
).Value
m_No.MoveNext
If
m_No.EOF
Then
AutoID
=
m_FirTempNo
+
1
End
If
Loop
End
If
If
Err.number
<>
0
Then
idbErr
=
idbErr
&
"
无效的查询条件!<br />
"
If
debug
Then
idbErr
=
idbErr
&
"
错误信息:
"
&
Err.Description
Response.End()
Exit
Function
End
If
m_No.close
Set
m_No
=
Nothing
End Function
Public
Function
GetRecord(ByVal TableName,ByVal FieldsList,ByVal Condition,ByVal OrderField,ByVal ShowN)
On
Error
Resume
Next
Dim
rstRecordList
Set
rstRecordList
=
Server.CreateObject(
"
adodb.recordset
"
)
With
rstRecordList
.ActiveConnection
=
idbConn
.CursorType
=
3
.LockType
=
3
.Source
=
wGetRecord(TableName,FieldsList,Condition,OrderField,ShowN)
.Open
If
Err.number
<>
0
Then
idbErr
=
idbErr
&
"
无效的查询条件!<br />
"
If
debug
Then
idbErr
=
idbErr
&
"
错误信息:
"
&
Err.Description
.Close
Set
rstRecordList
=
Nothing
Response.End()
Exit
Function
End
If
End
With
Set
GetRecord
=
rstRecordList
End Function
Public
Function
wGetRecord(ByVal TableName,ByVal FieldsList,ByVal Condition,ByVal OrderField,ByVal ShowN)
Dim
strSelect
strSelect
=
"
select
"
If
ShowN
>
0
Then
strSelect
=
strSelect
&
"
top
"
&
ShowN
&
"
"
End
If
If
FieldsList
<>
""
Then
strSelect
=
strSelect
&
FieldsList
Else
strSelect
=
strSelect
&
"
*
"
End
If
strSelect
=
strSelect
&
"
from [
"
&
TableName
&
"
]
"
If
Condition
<>
""
Then
strSelect
=
strSelect
&
"
where
"
&
ValueToSql(TableName,Condition,
1
)
End
If
If
OrderField
<>
""
Then
strSelect
=
strSelect
&
"
order by
"
&
OrderField
End
If
wGetRecord
=
strSelect
End Function
Public
Function
GetRecordBySQL(ByVal strSelect)
On
Error
Resume
Next
Dim
rstRecordList
Set
rstRecordList
=
Server.CreateObject(
"
adodb.recordset
"
)
With
rstRecordList
.ActiveConnection
=
idbConn
.CursorType
=
3
.LockType
=
3
.Source
=
strSelect
.Open
If
Err.number
<>
0
Then
idbErr
=
idbErr
&
"
无效的查询条件!<br />
"
If
debug
Then
idbErr
=
idbErr
&
"
错误信息:
"
&
Err.Description
.Close
Set
rstRecordList
=
Nothing
Response.End()
Exit
Function
End
If
End
With
Set
GetRecordBySQL
=
rstRecordList
End Function
Public
Function
GetRecordDetail(ByVal TableName,ByVal Condition)
On
Error
Resume
Next
Dim
rstRecordDetail, strSelect
Set
rstRecordDetail
=
Server.CreateObject(
"
adodb.recordset
"
)
With
rstRecordDetail
.ActiveConnection
=
idbConn
strSelect
=
"
select * from [
"
&
TableName
&
"
] where
"
&
ValueToSql(TableName,Condition,
1
)
.CursorType
=
3
.LockType
=
3
.Source
=
strSelect
.Open
If
Err.number
<>
0
Then
idbErr
=
idbErr
&
"
无效的查询条件!<br />
"
If
debug
Then
idbErr
=
idbErr
&
"
错误信息:
"
&
Err.Description
.Close
Set
rstRecordDetail
=
Nothing
Response.End()
Exit
Function
End
If
End
With
Set
GetRecordDetail
=
rstRecordDetail
End Function
Public
Function
AddRecord(ByVal TableName, ByVal ValueList)
On
Error
Resume
Next
DoExecute(wAddRecord(TableName,ValueList))
If
Err.number
<>
0
Then
idbErr
=
idbErr
&
"
写入数据库出错!<br />
"
If
debug
Then
idbErr
=
idbErr
&
"
错误信息:
"
&
Err.Description
'
DoExecute "ROLLBACK TRAN Tran_Insert" '如果存在添加事务(事务滚回)
AddRecord
=
0
Exit
Function
End
If
AddRecord
=
AutoID(TableName)
-
1
End Function
Public
Function
wAddRecord(ByVal TableName, ByVal ValueList)
Dim
TempSQL, TempFiled, TempValue
TempFiled
=
ValueToSql(TableName,ValueList,
2
)
TempValue
=
ValueToSql(TableName,ValueList,
3
)
TempSQL
=
"
Insert Into [
"
&
TableName
&
"
] (
"
&
TempFiled
&
"
) Values (
"
&
TempValue
&
"
)
"
wAddRecord
=
TempSQL
End Function
Public
Function
UpdateRecord(ByVal TableName,ByVal Condition,ByVal ValueList)
On
Error
Resume
Next
DoExecute(wUpdateRecord(TableName,Condition,ValueList))
If
Err.number
<>
0
Then
idbErr
=
idbErr
&
"
更新数据库出错!<br />
"
If
debug
Then
idbErr
=
idbErr
&
"
错误信息:
"
&
Err.Description
'
DoExecute "ROLLBACK TRAN Tran_Update" '如果存在添加事务(事务滚回)
UpdateRecord
=
0
Exit
Function
End
If
UpdateRecord
=
1
End Function
Public
Function
wUpdateRecord(ByVal TableName,ByVal Condition,ByVal ValueList)
Dim
TmpSQL
TmpSQL
=
"
Update [
"
&
TableName
&
"
] Set
"
TmpSQL
=
TmpSQL
&
ValueToSql(TableName,ValueList,
0
)
TmpSQL
=
TmpSQL
&
"
Where
"
&
ValueToSql(TableName,Condition,
1
)
wUpdateRecord
=
TmpSQL
End Function
Public
Function
DeleteRecord(ByVal TableName,ByVal IDFieldName,ByVal IDValues)
On
Error
Resume
Next
Dim
Sql
Sql
=
"
Delete From [
"
&
TableName
&
"
] Where [
"
&
IDFieldName
&
"
] In (
"
If
IsArray
(IDValues)
Then
Sql
=
Sql
&
"
Select [
"
&
IDFieldName
&
"
] From [
"
&
TableName
&
"
] Where
"
&
ValueToSql(TableName,IDValues,
1
)
Else
Sql
=
Sql
&
IDValues
End
If
Sql
=
Sql
&
"
)
"
DoExecute(Sql)
If
Err.number
<>
0
Then
idbErr
=
idbErr
&
"
删除数据出错!<br />
"
If
debug
Then
idbErr
=
idbErr
&
"
错误信息:
"
&
Err.Description
'
DoExecute "ROLLBACK TRAN Tran_Delete" '如果存在添加事务(事务滚回)
DeleteRecord
=
0
Exit
Function
End
If
DeleteRecord
=
1
End Function
Public
Function
wDeleteRecord(ByVal TableName,ByVal IDFieldName,ByVal IDValues)
On
Error
Resume
Next
Dim
Sql
Sql
=
"
Delete From [
"
&
TableName
&
"
] Where [
"
&
IDFieldName
&
"
] In (
"
If
IsArray
(IDValues)
Then
Sql
=
Sql
&
"
Select [
"
&
IDFieldName
&
"
] From [
"
&
TableName
&
"
] Where
"
&
ValueToSql(TableName,IDValues,
1
)
Else
Sql
=
Sql
&
IDValues
End
If
Sql
=
Sql
&
"
)
"
wDeleteRecord
=
Sql
End Function
Public
Function
ReadTable(ByVal TableName,ByVal Condition,ByVal GetFieldNames)
On
Error
Resume
Next
Dim
rstGetValue,Sql,BaseCondition,arrTemp,arrStr,TempStr,i
TempStr
=
""
: arrStr
=
""
'
给出SQL条件语句
BaseCondition
=
ValueToSql(TableName,Condition,
1
)
'
读取数据
Set
rstGetValue
=
Server.CreateObject(
"
ADODB.Recordset
"
)
Sql
=
"
Select
"
&
GetFieldNames
&
"
From [
"
&
TableName
&
"
] Where
"
&
BaseCondition
rstGetValue.Open Sql,idbConn,
3
,
3
If
rstGetValue.RecordCount
>
0
Then
If
Instr
(GetFieldNames,
"
,
"
)
>
0
Then
arrTemp
=
Split
(GetFieldNames,
"
,
"
)
For
i
=
0
To
Ubound
(arrTemp)
If
i
<>
0
Then
arrStr
=
arrStr
&
Chr
(
112
)
&
Chr
(
112
)
&
Chr
(
113
)
arrStr
=
arrStr
&
rstGetValue.Fields(i).Value
Next
TempStr
=
Split
(arrStr,
Chr
(
112
)
&
Chr
(
112
)
&
Chr
(
113
))
Else
TempStr
=
rstGetValue.Fields(
0
).Value
End
If
End
If
If
Err.number
<>
0
Then
idbErr
=
idbErr
&
"
获取数据出错!<br />
"
If
debug
Then
idbErr
=
idbErr
&
"
错误信息:
"
&
Err.Description
rstGetValue.close()
Set
rstGetValue
=
Nothing
Exit
Function
End
If
rstGetValue.close()
Set
rstGetValue
=
Nothing
ReadTable
=
TempStr
End Function
Public
Function
C(ByVal ObjRs)
ObjRs.close()
Set
ObjRs
=
Nothing
End Function
Private
Function
ValueToSql(ByVal TableName, ByVal ValueList, ByVal sType)
Dim
StrTemp
StrTemp
=
ValueList
If
IsArray
(ValueList)
Then
StrTemp
=
""
Dim
rsTemp, CurrentField, CurrentValue, i
Set
rsTemp
=
Server.CreateObject(
"
adodb.recordset
"
)
With
rsTemp
.ActiveConnection
=
idbConn
.CursorType
=
3
.LockType
=
3
.Source
=
"
select * from [
"
&
TableName
&
"
] where 1 = -1
"
.Open
For
i
=
0
to
Ubound
(ValueList)
CurrentField
=
Left
(ValueList(i),
Instr
(ValueList(i),
"
:
"
)
-
1
)
CurrentValue
=
Mid
(ValueList(i),
Instr
(ValueList(i),
"
:
"
)
+
1
)
If
i
<>
0
Then
Select
Case
sType
Case
1
StrTemp
=
StrTemp
&
"
And
"
Case
Else
StrTemp
=
StrTemp
&
"
,
"
End
Select
End
If
If
sType
=
2
Then
StrTemp
=
StrTemp
&
"
[
"
&
CurrentField
&
"
]
"
Else
Select
Case
.Fields(CurrentField).Type
Case
7
,
133
,
134
,
135
,
8
,
129
,
200
,
201
,
202
,
203
If
sType
=
3
Then
StrTemp
=
StrTemp
&
"
'
"
&
CurrentValue
&
"
'
"
Else
StrTemp
=
StrTemp
&
"
[
"
&
CurrentField
&
"
] = '
"
&
CurrentValue
&
"
'
"
End
If
Case
11
If
UCase
(
cstr
(
Trim
(CurrentValue)))
=
"
TRUE
"
Then
If
sType
=
3
Then
StrTemp
=
StrTemp
&
"
1
"
Else
StrTemp
=
StrTemp
&
"
[
"
&
CurrentField
&
"
] = 1
"
End
If
Else
If
sType
=
3
Then
StrTemp
=
StrTemp
&
"
0
"
Else
StrTemp
=
StrTemp
&
"
[
"
&
CurrentField
&
"
] = 0
"
End
If
End
If
Case
Else
If
sType
=
3
Then
StrTemp
=
StrTemp
&
CurrentValue
Else
StrTemp
=
StrTemp
&
"
[
"
&
CurrentField
&
"
] =
"
&
CurrentValue
End
If
End
Select
End
If
Next
End
With
If
Err.number
<>
0
Then
idbErr
=
idbErr
&
"
生成SQL语句出错!<br />
"
If
debug
Then
idbErr
=
idbErr
&
"
错误信息:
"
&
Err.Description
rsTemp.close()
Set
rsTemp
=
Nothing
Exit
Function
End
If
rsTemp.Close()
Set
rsTemp
=
Nothing
End
If
ValueToSql
=
StrTemp
End Function
Private
Function
DoExecute(ByVal sql)
Dim
ExecuteCmd
Set
ExecuteCmd
=
Server.CreateObject(
"
ADODB.Command
"
)
With
ExecuteCmd
.ActiveConnection
=
idbConn
.CommandText
=
sql
.Execute
End
With
Set
ExecuteCmd
=
Nothing
End Function
End
Class
%
>