數據庫連接字符串的處理應該是一個項目裏最基礎的東東了。(除非你的項目不涉及到數據庫。)
千萬不要小看他,處理不好也時會給你帶來不少的麻煩的。
連接字符串的內容在這裏就不討論了,這裏主要說一下他的存放位置和讀取方法。
我們要達到的目的:無論連接字符串如何變化,都不需要修改項目!
1.把連接字符串寫在程序裏面。
一般的初級教程裏會告訴你這麼寫
VB.net
Dim cn As New SqlClient.SqlConnection("user id=sa;password=sa;server=.;initial catalog=數據庫名稱")
C#
SqlClient.SqlConnection cn = new SqlClient.SqlConnection("user id=sa;password=sa;server=.;initial catalog=數據庫名稱")
這麼寫當然是沒有錯誤,但是當你寫了n個頁面後,有一半的頁面有這樣的代碼,這時候如果需要改變連接字符串(比如換用戶名和密碼)的話,那可就有得你改的了。想當初我就犯過這樣的錯誤,555555
2.放在web.config裏面
這是比較流行的方法了。修改web.config文件,加入以下代碼
<APPSETTINGS>
<ADD value="user id=sa;password=sa;server=.;initial catalog=數據庫名稱" key="connString" />
</APPSETTINGS>
然後在需要的地方調用就可以了。
VB.net
Dim cnString As String = System.Configuration.ConfigurationSettings.AppSettings.Item("connString")
C#
string cnString = System.Configuration.ConfigurationSettings.AppSettings["connString"]
這樣呢就不怕連接字符串再發生變化了。如果有變化的話,修改web.config就行了。
缺點就是web.congfig 是文本形式的,雖然不能下載,但還是缺乏安全感。
3.放在註冊表裏面
事先把連接字符串放在註冊表裏面,用的時候到註冊表裏面取值。
優點:安全性高。要想看到註冊表裏的信息不是很容易的事情吧。
缺點:讀取註冊表需要一定的權限,但是一般的空間是不會開放這個權限的,因爲開放了就意味着可以操作註冊表,這對服務器就太不安全了。
4.放在DLL文件裏面
寫一個單獨的類,再寫一個函數,調用這個函數返回連接字符串。然後把它編譯成DLL文件備用
using System;
namespace JYK
{
/**//// <summary>
/// 取得連接字符串。
/// </summary>
public class Connection
{
public static string ConnectionString()
{
return "user id=sa;password=sa;server=.;initial catalog=數據庫名稱";
}
}
}
直接打開 DLL文件 看到的是亂碼,要比寫在web.config有安全感。當然了通過反編譯軟件還是可以看到裏面的代碼。
還有就是修改起來不太方便,需要重新編譯一下這個類。
5.綜合
以上個四種方法各有優越缺點,用哪一個都不是最好的,另外還有一個問題沒有提及 —— 加密連接字符串。
那麼在一個項目裏,怎麼做纔是最好的方法呢? —— 分層。
項目 <——類(DLL文件) <——存放連接字符串的位置
A.對於項目來說呢只需要知道:當我要用連接字符串的時候我到DLL裏面(調用函數)讀取就行了,至於連接字符串具體的存放位置、是否加密等都不必關心。
B.類(DLL文件),這個就很重要和靈活了。對於一般的項目可以這麼寫
using System;
namespace JYK
{
/**//// <summary>
/// 取得連接字符串。
/// </summary>
public class Connection
{
public static string ConnectionString()
{
return System.Configuration.ConfigurationSettings.AppSettings["ConnString"];
}
}
}
注意:上一個DLL是把連接字符串直接寫在了類裏面,而這回是到web.config裏面讀取。
也許你會問:既然是到web.config裏面讀取連接字符串,那爲什麼還要加上一個DLL呢,是不是多此一舉呀?
這麼做是爲了達到這個目的:無論連接字符串如何變化,都不需要修改項目!
如果是直接讀取web.config,那麼如果web.config裏面放的是加密的連接字符串,那怎麼處理?是不是要修改項目,或者是數據層。不要認爲修改數據層就不是修改項目了。
如果加上了一個DLL的話,那麼只需要重新編譯一下這個DLL就行了。項目可以保持不變。
C.連接字符串的存放位置
這個可以根據項目的要求來做,放在哪裏都可以,只需要修改一下DLL文件就行了。