在我們的藍山公司人事管理系統的項目中,員工管理EmployeeManagement和安全管理Security等項目都要用到資料庫連接,考慮到可以將資料庫連接字串儲存到應用程式設定檔app.config。但預設的應用程式設定檔只能在自己的項目中讀取,如何?多重專案共用一個
app.config檔案,這樣,當資料庫連接發生改變時,只需要修改應用程式設定檔app.config,而不需要重新編譯器。
一、建立應用程式設定檔app.config首先,打藍山公司人事管理解決方案,在主專案BlueHillWindows中添加應用程式設定檔app.config,其內容如下:
<?xmlversion="1.0"encoding="utf-8" ?><configuration> <connectionStrings> <addname="BlueHillConnString"connectionString="Data Source=(local);Initial Catalog=BlueHill;User ID=BlueHill;Password=rj3101"providerName="System.Data.SqlCLient"/> </connectionStrings></configuration>
該連接字串命名為BlueHillConnString,內容根據實際情況確定。編譯時間,會在相應的Bin檔案夾產生與主程式同名的設定檔,如BlueHillWindows.exe.config,內容與
app.config檔案相同。發布時,只要修改BlueHillWindows.exe.config就可以修改資料庫連接字串。
二、在員工管理EmployeeManagement
項目中讀取主專案中的設定檔讀取設定檔,需要用到System..Configuration命名空間的Configuration類。首先,在EmployeeManagement項目中添加對.NET組件System..Configuration的引用。同樣,在FrmNewEmployee表單類的建構函式中,也寫入同樣的上述代碼:
public FrmListEmployee() { InitializeComponent(); // 定義Configuration類對象,讀取與主應用程式可執行檔相同檔案夾下的設定檔 System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None); // 讀取BlueHillConnString資料庫連接字串,並賦值給SqlConnectiong控制項cnBlueHill this.cnBlueHill.ConnectionString = config.ConnectionStrings.ConnectionStrings["BlueHillConnString"].ConnectionString; }
對應修改FrmListEmployee類的建構函式:
public FrmNewEmployee() { InitializeComponent(); // 定義Configuration類對象,讀取與主應用程式可執行檔相同檔案夾下的設定檔 System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None); // 讀取BlueHillConnString資料庫連接字串,並賦值給SqlConnectiong控制項cnBlueHill this.cnBlueHill.ConnectionString = config.ConnectionStrings.ConnectionStrings["BlueHillConnString"].ConnectionString; // 綁定部門列表 BindDepart(); } public FrmNewEmployee(int empID) { InitializeComponent(); // 定義Configuration類對象,讀取與主應用程式可執行檔相同檔案夾下的設定檔 System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None); // 讀取BlueHillConnString資料庫連接字串,並賦值給SqlConnectiong控制項cnBlueHill this.cnBlueHill.ConnectionString = config.ConnectionStrings.ConnectionStrings["BlueHillConnString"].ConnectionString; // 儲存要操作的員工號,並記錄操作方式為更新 this.EmployeeID = empID; this.Operator = OperatorType.Update; // 綁定員工列表和員工資訊 BindDepart(); BindEmployee(this.EmployeeID); this.Text = "修改員工資訊"; tbPassword.CausesValidation = false; tbPassword.Enabled = false; }
三、在安全管理Security
項目中讀取主專案中的設定檔與第二步類似,在Security項目中添加對.NET組件System..Configuration的引用。同樣,在FrmLogin表單類的建構函式中,也寫入同樣的上述代碼:
public FrmLogin() { InitializeComponent(); // 定義Configuration類對象,讀取與主應用程式可執行檔相同檔案夾下的設定檔 System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None); // 讀取BlueHillConnString資料庫連接字串,並賦值給SqlConnectiong控制項cnBlueHill this.cnBlueHill.ConnectionString = config.ConnectionStrings.ConnectionStrings["BlueHillConnString"].ConnectionString; }
以後,如果在調試期間調整資料庫連接字串,修改主專案的
app.config檔案中對應的資料庫連接字串就要以了,應用程式無需任何修改。例如,要使用Windows身份認證,將連接字串: <addname="BlueHillConnString"connectionString="Data Source=(local);Initial Catalog=BlueHill;User ID=BlueHill;Password=rj3101"providerName="System.Data.SqlCLient"/>修改為: <addname="BlueHillConnString"connectionString="Data Source=(local);Initial Catalog=BlueHill; Integrated Security=SSPI;"providerName="System.Data.SqlCLient"/>如果要使用SQL Server Express資料庫,資料庫example.mdf與可執行檔在同一檔案夾,則可以將連接字串改為:<addname="BlueHillConnString"connectionString=" Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\example.mdf;Integrated Security=True;User Instance=True"providerName="System.Data.SqlCLient"/>如果項目已經發布,也只需要修改可執行資料夾下與可執行檔同名的.config檔案中對應的內容就可以了。