如何提高MSSQL和ACCESS的兼容性
大家都知道ASP當中,最常用到的是ACCESS和MSSQL兩個數據庫。很多程序都想開發成兩個數據庫都可以使用的模式,但是礙于兩個數據庫得一些SQL語句不一致,所以導致很多程序都分兩個沒有必要的版本,就是ACCESS和MSSQL版!而事實上,我們可以通過對代碼判斷和識別,控制整個程序的兼容性。
也就是說,將兩個版本兼容成一個系統。例如我的ASP飛云小說系統,就是兩種數據庫都可以運作的程序。
那么,到底如何讓程序存在數據庫兼容性并且得到高效的運作呢。下邊我將以我的飛云小說系統做范例,說說我的一些控制方法和代碼。
首先,我們要控制一個參數,讓程序知道我們現在運作的是什么數據庫。
如:飛云小說程序中的Config.asp文件參數
以下為引用的內容: Const SystemDatabaseType = "ACCESS" '系統數據庫類型,"SQL"為MSSQL 2000/2005數據庫,"ACCESS"為MS ACCESS 2000數據庫 |
這是兼容性開始的基礎,是整個程序數據庫的判別。所以是非常有必要設置這么一個參數的。
第二,數據庫連接方式和常用函數的區分
在我的程序當中,Conn.asp里邊還存在下邊的一段代碼:
代碼: If SystemDatabaseType = "SQL" Then |
這個代碼,除了區別數據庫連接方式之后,還將MSSQL和ACCESS常用的語句進行變量賦值。這樣做的好處就是后面使用相關內容的時候可以直接使用調用變量的方法,而不再需要進行數據庫類型的判斷。
例如對比時間的datediff函數問題上:
代碼: "Select * From [表] where datediff('"&FY_DatePart_D&",數據庫時間,'變量名)=0 Order By id Desc" |
這樣就免去了數據庫的判別,減少了代碼量和實用性。
第三,正確使用兼容性代碼,而不使用特色代碼。
很多人在寫MSSQL數據庫的是很,都很喜歡使用conn.execute語句,而不使用open方式。雖然在速度上,很多時間conn.execute會比open方式要高速度一點。但是這不是一概而論的。
比如說,在一個判斷是否已經存在的過程算法當中。如果你已經使用了open進行了BOF或EOF的判斷,那么你還要使用conn.execute進行判斷的話,那速度,肯定是不如在OPEN直接修改的好。
而且,在代碼當中open方式的兼容性,遠遠要高過conn.execute。例如時間函數now()的使用上.(這個函數在ACCESS和MSSQL的區別,大家自己去百度)
第四,在追求兼容性的情況下,犧牲一點效率也是必要的。
第三點當中,如果你的過程不需要判斷是否存在,就是在沒有打開OPEN的情況下的話。你可以使用conn.execute。但是我的不是一概而論的。比如說,如果是一個比較少用到,不是頻繁讀取的過程。我會選擇使用OPEN方式,而不使用conn.execute方式。
雖然這過程的速度會降低。可是這不影響到我的使用,所以我還是選擇OPEN方式。原因很簡單,就是兼容性的選擇。
最后,在必要的時候放棄兼容性的追求,采用不同數據庫不同代碼。
前面第一點,我們對代碼已經做了一個設置,就是數據庫類型的設置。那么當我們遇到一些不能通過兼容性解決,或者是像conn.execute和OPEN方式上的追求的時候。我們可以利用前面SystemDatabaseType的參數設置進行判斷,然后相應使用不同的代碼。
如: Else End If |
這樣就可以保證程序的高效性以及穩定性。這也是整個程序的兼容性的一種。
關鍵字:MSSQL、ACCESS、兼容性、數據庫
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解