解析Access與Sql Server之ASP代碼比較(3)_Access數據庫教程
推薦:解析ACCESS作為網站數據庫的弊端現在網上絕大多數網站都是ACCESS+ASP的形式,因為ACCESS結構簡單容易處理,而且也能滿足多數的網站程序要求。 ACCESS是小型數據庫,既然是小型就有他根本的局限性,以下幾種情況下數據庫基本上會吃不消: 1。數據庫過大,一般ACCESS數據庫達到50M左右的時候
三、連接字符串的改寫
可參考動網的這段,分別是針對access和SQL的
Dim ConnStr
If IsSqlDataBase = 1 Then
'sql數據庫連接參數:數據庫名、用戶密碼、用戶名、連接名(本地用local,外地用IP)
Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
SqlDatabaseName = "dvbbs7"
SqlPassword = ""
SqlUsername = "dvbbs"
SqlLocalName = "(local)"
ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"
Else
'免費用戶第一次使用請修改本處數據庫地址并相應修改data目錄中數據庫名稱,如將dvbbs6.mdb修改為dvbbs6.asp
'http://www.knowsky.com/
Db = "data/fengerqingqing.mdb"
ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db)
End If
On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnStr
當然你使用SQL的話,有關access的使用語句可以刪除,就是else后面到on error resume next前面,變成這樣:
Dim ConnStr
'sql數據庫連接參數:數據庫名、用戶密碼、用戶名、連接名(本地用local,外地用IP)
Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
SqlDatabaseName = "dvbbs7"
SqlPassword = ""
SqlUsername = "dvbbs"
SqlLocalName = "(local)"
ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"
On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnStr
也可以簡潔一些,寫成這樣:
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "Provider = Sqloledb; User ID = sa; Password = 1234567; Initial Catalog = dvbbs7; Data Source = (local);"
里面的數據庫名稱、數據源、用戶、密碼根據自己的實際情況改寫一下。
四、程序的改寫
這也有兩種情況
1、如果你幸運,拿到的是For SQL的程序,那么如果上面的數據庫建立過程沒有遇到麻煩,程序基本上就可以運行了,出錯的話,只是程序本身的bug,如何修改不是這個帖子討論的內容,就不贅述了。
2、大多數情況,程序本身是For Access的,與For SQL的程序差別主要是程序中使用到的SQL查詢語句。注意,SQL查詢語句是數據庫應用不可缺少的部分,不管是For SQL還是For Aceess的程序使用的語法大體差不多,但是有一些微妙的差別,正是這些差別,造成了程序的不通用,也是我們需要修改的主要內容。這樣一般要修改的部分如下:
(1)時間函數的問題:SQL數據庫的時間函數與access不同,最常見的是取現在時間的函數,access是now(),SQL是getdate()。因此凡是在where子句中使用了now()的地方都要改成getdate();注意,now()函數在asp程序本身也要使用,凡是不在數據庫查詢或執行語句中使用的now()函數千萬不要改。
(2)時間比較函數:datediff('d','時間1',‘時間2’)這是access查詢用的格式,SQl中這些引號都要去掉,同時時間格式的前后可能加上了#,這也要去掉。同樣這也是指在sql語句中的,在asp語句中的要保持原樣。
(3)空值的表示:在access中,判斷空值一般用是否=""來表示,但是這在SQL中往往出錯,如果遇到出錯的問題或者程序運行不正常,可以改成如這樣判斷:where (name is null)
(4)真假值判斷:access中可以用=true、=false來判斷,但是在SQL中就會出錯,因此在SQL查詢或執行語句中這類判斷要分別改成=1、=0。注意一點:有些程序雖然寫成=“true”,但是由于有引號,所以這個字段是字符類型的,你不能改成=1,保持原樣即可。
以上是比較常見的改寫的地方,還有一些不太常見,如果遇到了可以在此回帖討論。
五、程序的調試
前面推薦使用帶有行號的編輯器,是因為上述的改寫不大可能是直接搜索程序源碼來做,很難找全。
我采取的方式一般這樣:數據庫改寫完成,直接調試程序,出錯后,看看出錯的提示,找到相應文件的代碼行,但是根源往往不是那行,比如出錯的語句是:conn.execute(sql),但是這句本身是沒有錯的,錯誤原因是里面的這個sql字符串,那就向上看這個sql字符串是如何生成的,按照上面所說的程序修改辦法修改。
分享:揭秘Access數據庫過大問題的幾種解決方案問題: 1、我的Access數據庫里面沒存多少數據,為什么體積很大,別人和我存一樣的數據為什么只有我的文件體積的1/10。 2、為什么我刪除了數據,但是數據庫體積沒有減小? 3、為什么我存了幾張圖片到ole字段里面數據庫體積就變大,而且變大的速度超過圖片的總
- 相關鏈接:
- 教程說明:
Access數據庫教程-解析Access與Sql Server之ASP代碼比較(3)
。