這幾天開始接觸JSP里面一些BEAN的寫法,然后自己想了想,認為其實在ASP里面也可以采取這一思想來做。雖然不是很純,不徹底,但是能夠把一些邏輯處理分離出來,更適合程序的移植性,提高了開發周期。我自己寫了個類ConnEX包含了一些對數據庫的操作,覺得應該可以包括一大部分的邏輯處理,但是這樣也提高了錯誤幾率,如果你把SQL語句控制的比較好的話,應該是利大于弊的,這里都是一點點拙見,望大家指正。 程序的功能有了個大體的框架,其實可以自己添加一些功能,比如開始的數據庫連接 ,可以先設置變量然后通過INIT() 來選擇不同類型的數據庫 <% '******************************************************************************************* '* 程序:ConnEx.asp '* '* 描述:模仿JAVABEAN寫的一個類,專門操作數據庫,提供多種方法操作,但要避免SQL語法錯誤! '* '* 作者:田野 Email:Foxty@sina.com '* '* 日期:2005.06.0 '******************************************************************************************* 'On Error Resume Next Class ConnEx public ConnEx public DBpath '---------數據庫路徑 public DBtype '---------數據庫類型 1(Access) 2(SqlServer) 3(可擴充) public ConnMethod '--------連接方式 (DSN,非DSN) public User public Pass Sub Class_initialize End Sub Sub Init() ConnStr = "Driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("Date.mdb") Set ConnEx = Server.Createobject("ADODB.CONNECTION") ConnEx.Open ConnStr CatchError("Class_Terminate") End Sub Sub CatchError( Str ) If Err Then Err.Clear Class_Terminate() Response.Write("捕捉到錯誤,程序結束!在"&Str&"處") Response.End() End If End Sub '****************************************** '*通過SQL語句來查找記錄是否存在,容易出錯 '****************************************** Function HasRecordBySql( Sql ) Call CheckSql(Sql,"R") Dim Rs,HasR Set Rs = ConnEx.Execute( Sql ) CatchError("HasReordSql") If Not (Rs.eof Or Rs.bof) Then HasR = False Else HasR = True End If Rs.Close Set Rs = Nothing HasRecordBySql = HasR End Function '*************************************** '*通過ID來查找記錄是否存在 '*************************************** Function HasRecordById( StrTableName , IntID ) 'CheckValue( IntID , 1 ) Dim Rs,HasR Sql = "Select top 1 * from "&StrTableName&" Where Id = "&IntID Call CheckSql(Sql,"R") Set Rs = ConnEx.Execute(Sql) CatchError("HasRecordByID") If Not (Rs.eof Or Rs.bof) Then HasR = False Else HasR = True End If Rs.close Set Rs = Nothing HasRecordById = HasR End Function '********************************************** '*通過SQL語句取得記錄集 '********************************************** Function GetRsBySql( Sql ) Call CheckSql(Sql,"R") Dim Rs Set Rs = Server.CreateObject("Adodb.RecordSet") Rs.Open Sql,ConnEx,1,1 Set GetRsBySql = Rs End Function '********************************************* '*取得某個字段的值 '********************************************* Function GetValueBySql( Sql ) Call CheckSql(Sql,"R") Dim Rs,ReturnValue Set Rs = ConnEx.Execute(Sql) CatchError("GetValueBySql") If Not( Rs.Eof Or Rs.Bof ) Then ReturnValue = Rs(0) Else ReturnValue = "沒有記錄" End If Rs.Close Set Rs = Nothing GetValueBySql = ReturnValue End Function '==================================================Update,Insert================================================================== '********************************************* '*利用SQL修改數據 '********************************************* Function UpdateBySql( Sql ) Call CheckSql(Sql,"w") ConnEx.Execute(Sql) CatchError("UpdateBySql") UpdateBySql = True End Function '******************************************** '*利用SQL語句插入數據 '******************************************** Function InsertBySql(Sql) Call CheckSql(Sql,"w") ConnEx.Execute(Sql) CatchError("InsertBySql") InsertBySql = True End Function '======================================================Delete============================================================= '******************************************** '*通過SQL語句刪除 '******************************************** Function DeleteBySql( Sql ) Call CheckSql(Sql,"D") ConnEx.Execute(Sql) CatchError("DeleteBySql") DeleteBySql = True End Function '******************************************** '*檢查SQL語句權限,根據標志Flag 來檢測語句擁有的權限 '******************************************** Sub CheckSql( Sql , Flag ) Dim StrSql,SinCounts,DouCounts,i StrSql = Lcase(Sql) SinCounts = 0 DouCounts = 0 For i = 1 to Len(StrSql) If Mid(StrSql,i,1) = "'" Then SinCounts = SinCounts + 1 If Mid(StrSql,i,1) = """" Then DouConnts = DouCounts + 1 Next If (SinCounts Mod 2) <> 0 Or (DouCounts Mod 2) <> 0 Or Instr(StrSql,";") > 0 Then Call Class_Terminate() Response.Write("SQL語法錯誤!") Response.End() End If Select Case Flag Case "R","r": If Instr(StrSql,"delete") > 0 Or Instr(StrSql,"update") Or Instr(StrSql,"drop") > 0 Or Instr(StrSql,"insert") > 0 Then Class_Terminate() Response.Write("權限不足,沒有執行寫操作的權限") Response.End() End If Case "W","w": If Instr(StrSql,"delete") > 0 Or Instr(StrSql,"drop") > 0 Or Instr(StrSql,"select") > 0 Then Class_Terminate() Response.Write("權限不足,沒有執行刪除操作的權限") Response.End() End If Case "D","d": Case Else: Response.Write("函數CheckSql標志錯誤!") End Select End Sub Sub Class_Terminate If Not IsEmpty(FriendConn) Then FriendConn.Close Set FriendConn = Nothing CatchError() End If End Sub End Class %>
|