DataSource.asp

出自ProgWiki

跳轉到: 導航, 搜尋

用途

(尚未測試,待驗證)

程式碼

<!--#include file="adovbs.inc" -->
<%
'ADODB操作相關共用變數
Dim conn
Dim rs
Dim rs2
Dim sqlcmd1
Dim sqlcmd2
 
'開啟連線
Sub OpenDataSource
	If (Not IsEmpty(conn)) Then
		If (conn.State = 0) Then conn.Open Application("Conn")
	Else
		Set conn = Server.CreateObject("ADODB.Connection")
		conn.Open Application("Conn")
	End If
End Sub
 
'關閉相關物件
Sub CloseDataSource
	'Colse ADODB.Command
	If (Not IsEmpty(sqlcmd2)) Then
		If (sqlcmd2.State <> 0) Then sqlcmd2.Close
		Set sqlcmd2 = Nothing
	end if
	If (Not IsEmpty(sqlcmd1)) Then
		If (sqlcmd1.State <> 0) Then sqlcmd1.Close
		Set sqlcmd1 = Nothing
	End If
 
	'Colse ADODB.Recordset
	If (Not IsEmpty(rs2)) Then
		If (rs2.State <> 0) Then rs2.Close
		Set rs2 = Nothing
	end if
	If (Not IsEmpty(rs)) Then
		If (rs.State <> 0) Then rs.Close
		Set rs = Nothing
	End If
 
	'Colse ADODB.Connection
	If (Not IsEmpty(conn)) Then
		If (conn.State <> 0) Then conn.Close
		Set conn = Nothing
	End If
End Sub
 
'開啟查詢 (回傳資料筆數)
Function OpenQuery(id, strSql, IsOnlyRead)
	If (IsNumeric(id) = false) Then
		OpenQuery = 0
		Exit Function
	End If
 
	Call OpenDataSource
 
	If (id = 1) Then
		If (not IsEmpty(rs)) Then
			If (rs.State <> 0) Then rs.Close
		Else
			Set rs = Server.CreateObject("ADODB.Recordset")
		End If
		If (IsOnlyRead = true) Then
			rs.Open strSql, conn, adOpenKeyset, adLockReadOnly
		Else
			rs.Open strSql, conn, adOpenKeyset, adLockOptimistic
		End If
		If rs.EOF Then
		    OpenQuery = 0
		Else
		    OpenQuery = rs.RecordCount
		End If
	Elseif (id = 2) Then
		If (Not IsEmpty(rs2)) Then
			If (rs2.State <> 0) Then rs2.Close
		Else
			Set rs2 = Server.CreateObject("ADODB.Recordset")
		End If
		If (IsOnlyRead = true) Then
			rs2.Open strSql, conn, adOpenKeyset, adLockReadOnly
		Else
			rs2.Open strSql, conn, adOpenKeyset, adLockOptimistic
		End If
		If rs2.EOF Then
		    OpenQuery = 0
		Else
		    OpenQuery = rs2.RecordCount
		End If
	Else
		OpenQuery = 0
	End If
End Function
 
'執行SQL命令
Sub ExecSqlCmd(strSql)
	Call OpenDataSource
	conn.Execute(strSql)
End Sub
 
Function GetRealSqlType(strSqlType)
	Select Case strSqlType
		Case "Empty"
			GetRealSqlType = adEmpty
		Case "TinyInt","Int8"
			GetRealSqlType = adTinyInt
		Case "SmallInt","Int16"
			GetRealSqlType = adSmallInt
		Case "Integer","Int","Int32"
			GetRealSqlType = adInteger		
		Case "BigInt","Int64"
			GetRealSqlType = adBigInt	
		Case "UnsignedTinyInt","UInt8"
			GetRealSqlType = adUnsignedTinyInt
		Case "UnsignedSmallInt","UInt16"
			GetRealSqlType = adUnsignedSmallInt						
		Case "UnsignedInt","UInt","UInt32"
			GetRealSqlType = adUnsignedInt
		Case "UnsignedBigInt","UInt64"
			GetRealSqlType = adUnsignedBigInt
		Case "Single"
			GetRealSqlType = adSingle
		Case "Double"
			GetRealSqlType = adDouble
		Case "Currency"
			GetRealSqlType = adCurrency
		Case "Decimal"
			GetRealSqlType = adDecimal
		Case "Numeric"
			GetRealSqlType = adNumeric
		Case "Boolean","Bool"
			GetRealSqlType = adBoolean		
		Case "BSTR"
			GetRealSqlType = adBSTR
		Case "Char"
			GetRealSqlType = adChar
		Case "VarChar"
			GetRealSqlType = adVarChar
		Case "LongVarChar"
			GetRealSqlType = adLongVarChar
		Case "WChar","NChar"
			GetRealSqlType = adWChar
		Case "VarWChar","NVarChar"
			GetRealSqlType = adVarWChar
		Case "LongVarWChar"
			GetRealSqlType = adLongVarWChar
		Case "Date"
            GetRealSqlType = adDate
        Case "Variant"
            GetRealSqlType = adVariant
		Case Else	
			GetRealSqlType = adIUnknown 
	End Select
    'Const adError = 10
    'Const adUserDefined = 132
    'Const adIDispatch = 9
    'Const adGUID = 72
    'Const adDBDate = 133
    'Const adDBTime = 134
    'Const adDBTimeStamp = 135
    'Const adBinary = 128
    'Const adVarBinary = 204
    'Const adLongVarBinary = 205
    'Const adChapter = 136
    'Const adFileTime = 64
    'Const adPropVariant = 138
    'Const adVarNumeric = 139
    'Const adArray = &H2000
End Function
 
'開啟參數化查詢 (回傳資料筆數)
'Dim SqlParam(3,10)  
'SqlParam(1,1)= "ParameterName1"    '參數名稱  
'SqlParam(2,1) = "Value1"           '值  
'SqlParam(3,1) = "String"           '型態  
Function OpenParameterizedQuery(id, strSql, CmdType, IsOnlyRead, SqlParam)
	If (IsNumeric(id) = false) Then
		OpenParameterizedQuery = 0
		Exit Function
	End If
 
	Call OpenDataSource
 
	If (id = 1) Then
		If (not IsEmpty(rs)) Then
			If (rs.State <> 0) Then rs.Close
		Else
			Set rs = Server.CreateObject("ADODB.Recordset")
		End If
 
		If (not IsEmpty(sqlcmd1)) Then
			If (sqlcmd1.State <> 0) Then sqlcmd1.Close
		Else
			Set sqlcmd1 = Server.CreateObject("ADODB.Command")
		End If
 
		If IsArray(SqlParam) Then 
			PCnt=UBound(SqlParam,2)  
			For y = 1 To PCnt  
				strParamName = "@" & SqlParam(1,y)  
				tValue = SqlParam(2,y)  
				RealSqlType = GetRealSqlType(SqlParam(3,y))   '轉換到Sql的資料型態  
				Set objParam = sqlcmd1.CreateParameter(strParamName , RealSqlType, adParamInput, 0, 0)  
				sqlcmd1.Parameters.Append objParam  
				sqlcmd1.Parameters(strParamName) = tValue    
			Next 
		End If 
 
		If (IsOnlyRead = true) Then
			rs.CursorType = adOpenKeyset
			rs.LockType = adLockReadOnly
		Else
			rs.CursorType = adOpenKeyset
			rs.LockType = adLockOptimistic
		end if
		rs = sqlcmd1.Execute
 
		If rs.EOF Then
		    OpenParameterizedQuery = 0
		Else
		    OpenParameterizedQuery = rs.RecordCount
		End If
 
	Elseif (id = 2) Then
		If (not IsEmpty(rs2)) Then
			If (rs2.State <> 0) Then rs2.Close
		Else
			Set rs2 = Server.CreateObject("ADODB.Recordset")
		End If
 
		If (Not IsEmpty(sqlcmd2)) Then
			If (sqlcmd2.State <> 0) Then sqlcmd2.Close
		Else
			Set sqlcmd2 = Server.CreateObject("ADODB.Command")
		End If
		sqlcmd2.CommandText  = strSql
		sqlcmd2.CommandType = CmdType
		sqlcmd2.ActiveConnection = conn
 
		If IsArray(SqlParam) Then 
			PCnt=UBound(SqlParam,2)  
			For y = 1 To PCnt  
				strParamName = "@" & SqlParam(1,y)  
				tValue = SqlParam(2,y)  
				RealSqlType = GetRealSqlType(SqlParam(3,y))   '轉換到Sql的資料型態  
				Set objParam = sqlcmd2.CreateParameter(strParamName , RealSqlType, adParamInput, 0, 0)  
				sqlcmd2.Parameters.Append objParam  
				sqlcmd2.Parameters(strParamName) = tValue    
			Next 
		End If 
 
		If (IsOnlyRead = true) Then
			rs2.CursorType = adOpenKeyset
			rs2.LockType = adLockReadOnly
		Else
			rs2.CursorType = adOpenKeyset
			rs2.LockType = adLockOptimistic
		End If
		rs2 = sqlcmd2.Execute
 
		If rs.EOF Then
		    OpenParameterizedQuery = 0
		Else
		    OpenParameterizedQuery = rs2.RecordCount
		End If
	Else
		OpenParameterizedQuery = 0
	End If
End Function
%>
個人工具
名字空間
變換
動作
導航
分類
其他
技術類News或部落格
工具箱