C#_項目打包附加數據庫

C#_項目打包附加數據庫

實現效果:安裝項目時直接附加數據庫。

1.首先在需要部署的項目的解決方案資源管理器中新建一個安裝項目

image

 

2.在安裝項目的文件視圖中,右鍵【應用程序文件夾】->【添加】->【項目輸出】

image

 

選擇你的項目中的啓動項目,下面的列表中,默認就是主輸出,確定。

3.此時在文件系統的中間欄目,會自動列出編譯所需的文件。一個簡單項目打包差不多,還有快捷方式什麼的,就不說了。開始重點了。

創建安裝程序類

4.在解決方案資源管理器中,新建一個類庫項目【InstallDB】,刪除Class1.cs,新建一個安裝程序類[InstallDB.cs],等下將在這個類中編寫附加數據庫代碼。

image

 

創建自定義安裝對話框

5.在剛新建的安裝項目上右鍵,【視圖】->【用戶界面】:

image

在用戶界面中,右鍵【啓動】-【添加對話框】-選擇【文本框(A)】-確定。

6.然後右鍵這個文本框(A),將其上移歡迎使用下面:

image

右鍵選擇【屬性】,參考下圖的信息填寫:

image


7.在剛新建的安裝項目上右鍵,【視圖】->【自定義操作】:

8.右鍵【自定義操作界面】的【安裝】節點,【添加自定義操作】,彈出的對話框。

9.查找範圍裏選擇應用程序文件夾,再點擊右側的【添加輸出(O)…】,選擇剛新建的安裝程序類項目,默認還是主輸出,確定。此時:

image

10.右鍵這個【主輸出來自InstallDB(活動)】,進入屬性界面,在【CustomActionData】屬性裏輸入下面的內容:

/dbname=[DBNAME] /server=[SERVER] /user=[USER] /pwd=[PWD] /targetdir="[TARGETDIR]/"

說明:其中前四個方括號中的大寫字母,爲上面第6步圖中輸入的四個EditProPerty屬性,需要對應好。最後一個targetdir的值的意思是安裝後文件的目錄路徑。

特別提醒:前三個"/XXX=[XXX]"後面  ,都有一個空格的,小xin曾因此煩惱甚久,網上的某些教程實在是。。。很耐人。

11.現在可以添加數據庫文件了,在剛新建的安裝項目上右鍵,【添加】->【文件】,選擇你的MDF和LDF文件,就是安裝時需要附加的數據庫文件。

12.最後,我們只需在安裝程序類裏編寫附加數據庫的代碼了。打開上面第4步中新建的安裝程序類,參考下方的代碼,編寫適合您的附加數據庫代碼:

 

/// <summary>
/// 附加數據庫方法
/// </summary>
/// <param name="strSql">連接數據庫字符串,連接master系統數據庫</param>
/// <param name="DataName">數據庫名字</param>
/// <param name="strMdf">數據庫文件MDF的路徑</param>
/// <param name="strLdf">數據庫文件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("數據庫安裝成功!點擊確定繼續");//需Using System.Windows.Forms
   }
   catch(Exception e)
   {
      MessageBox.Show("數據庫安裝失敗!" + e.Message+"/n/n"+"您可以手動附加數據");
      System.Diagnostics.Process.Start(path);//打開安裝目錄
   }
   finally
   {
      myConn.Close();
   }
}
public override void Install(System.Collections.IDictionary stateSaver)
{
   string server = this.Context.Parameters["server"];//服務器名稱
    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";//連接數據庫字符串
    string DataName = "JXC";//數據庫名
    string strMdf = path + @"JXC.mdf";//MDF文件路徑,這裏需注意文件名要與剛添加的數據庫文件名一樣!
    string strLdf = path + @"jxc_log.ldf";//LDF文件路徑
    base.Install(stateSaver);
   this.CreateDataBase(strSql, DataName, strMdf, strLdf, path);//開始創建數據庫
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章