實(shí)現(xiàn)效果:安裝項(xiàng)目時直接附加數(shù)據(jù)庫,。
1.首先在需要部署的項(xiàng)目的解決方案資源管理器中新建一個安裝項(xiàng)目
2.在安裝項(xiàng)目的文件視圖中,右鍵【應(yīng)用程序文件夾】->【添加】->【項(xiàng)目輸出】
選擇你的項(xiàng)目中的啟動項(xiàng)目,,下面的列表中,,默認(rèn)就是主輸出,,確定。
3.此時在文件系統(tǒng)的中間欄目,,會自動列出編譯所需的文件,。一個簡單項(xiàng)目打包差不多,還有快捷方式什么的,,就不說了,。開始重點(diǎn)了。
創(chuàng)建安裝程序類
4.在解決方案資源管理器中,,新建一個類庫項(xiàng)目【InstallDB】,,刪除Class1.cs,新建一個安裝程序類[InstallDB.cs],等下將在這個類中編寫附加數(shù)據(jù)庫代碼,。
創(chuàng)建自定義安裝對話框
5.在剛新建的安裝項(xiàng)目上右鍵,,【視圖】->【用戶界面】:
在用戶界面中,右鍵【啟動】-【添加對話框】-選擇【文本框(A)】-確定,。
6.然后右鍵這個文本框(A),,將其上移到歡迎使用下面:
右鍵選擇【屬性】,參考下圖的信息填寫:
7.在剛新建的安裝項(xiàng)目上右鍵,,【視圖】->【自定義操作】:
8.右鍵【自定義操作界面】的【安裝】節(jié)點(diǎn),,【添加自定義操作】,彈出的對話框,。
9.在查找范圍里選擇應(yīng)用程序文件夾,,再點(diǎn)擊右側(cè)的【添加輸出(O)…】,選擇剛新建的安裝程序類項(xiàng)目,默認(rèn)還是主輸出,確定,。此時:
10.右鍵這個【主輸出來自InstallDB(活動)】,進(jìn)入屬性界面,,在【CustomActionData】屬性里輸入下面的內(nèi)容:
/dbname=[DBNAME] /server=[SERVER] /user=[USER] /pwd=[PWD] /targetdir="[TARGETDIR]\"
說明:其中前四個方括號中的大寫字母,為上面第6步圖中輸入的四個EditProPerty屬性,,需要對應(yīng)好,。最后一個targetdir的值的意思是安裝后文件的目錄路徑。
特別提醒:前三個"/XXX=[XXX]"后面 ,,都有一個空格的,,小xin曾因此煩惱甚久,網(wǎng)上的某些教程實(shí)在是,。,。。很耐人,。
11.現(xiàn)在可以添加數(shù)據(jù)庫文件了,,在剛新建的安裝項(xiàng)目上右鍵,【添加】->【文件】,,選擇你的MDF和LDF文件,,就是安裝時需要附加的數(shù)據(jù)庫文件,。
12.最后,我們只需在安裝程序類里編寫附加數(shù)據(jù)庫的代碼了,。打開上面第4步中新建的安裝程序類,,參考下方的代碼,編寫適合您的附加數(shù)據(jù)庫代碼:
/// <summary> /// 附加數(shù)據(jù)庫方法 /// </summary> /// <param name="strSql">連接數(shù)據(jù)庫字符串,,連接master系統(tǒng)數(shù)據(jù)庫</param> /// <param name="DataName">數(shù)據(jù)庫名字</param> /// <param name="strMdf">數(shù)據(jù)庫文件MDF的路徑</param> /// <param name="strLdf">數(shù)據(jù)庫文件LDF的路徑</param> /// <param name="path">安裝目錄</param> private void CreateDataBase( string strSql, string DataName, string strMdf, string strLdf, string path) { SqlConnection myConn = new SqlConnection(strSql); String str = null ; try { str = " EXEC sp_attach_db @dbname='"+DataName+"',@filename1='"+strMdf+"',@filename2='"+strLdf+"'"; SqlCommand myCommand = new SqlCommand(str, myConn); myConn.Open(); myCommand.ExecuteNonQuery(); MessageBox.Show("數(shù)據(jù)庫安裝成功,!點(diǎn)擊確定繼續(xù)");//需Using System.Windows.Forms } catch(Exception e) { MessageBox.Show("數(shù)據(jù)庫安裝失敗,!" + e.Message+"\n\n"+"您可以手動附加數(shù)據(jù)"); System.Diagnostics.Process.Start(path);//打開安裝目錄 } finally { myConn.Close(); } } public override void Install(System.Collections.IDictionary stateSaver) { string server = this.Context.Parameters["server"];//服務(wù)器名稱 string uid = this.Context.Parameters["user"];//SQlServer用戶名 string pwd = this.Context.Parameters["pwd"];//密碼 string path = this.Context.Parameters["targetdir"];//安裝目錄 string strSql = "server=" + server + ";uid=" + uid + ";pwd=" + pwd + ";database=master";//連接數(shù)據(jù)庫字符串 string DataName = "JXC";//數(shù)據(jù)庫名 string strMdf = path + @"JXC.mdf";//MDF文件路徑,,這里需注意文件名要與剛添加的數(shù)據(jù)庫文件名一樣! string strLdf = path + @"jxc_log.ldf";//LDF文件路徑 base.Install(stateSaver); this.CreateDataBase(strSql, DataName, strMdf, strLdf, path);//開始創(chuàng)建數(shù)據(jù)庫 }
|