<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      數據庫安裝包的制作(參考MSDN)

      [摘要]由于主要是參考MSDN的,所以這里一些細節不再重復具體大家可以參考MSDN上一篇叫:Walkthrough: Using a Custom Action to Create a Database D...
      由于主要是參考MSDN的,所以這里一些細節不再重復
      具體大家可以參考MSDN上一篇叫:
      Walkthrough: Using a Custom Action to Create a Database During Installation
      的文章?截愊聛淼模刂凡恢懒,不好意思:)
      下面開始說制作的步驟:
      首先:新建一個類庫,以C#為例。命名隨意
      然后添加新項,選擇安裝程序類,命名也隨意
      然后添加一個名為:sql.txt的文件(注意大小寫)點擊sql.txt右鍵,在生成操作中選擇嵌入的資源。
      sql.txt的內容為從sql server數據庫導出的sql語句
      這里有個地方需要注意:
      一般導出的sql格式是這樣的:
      CREATE TABLE [dbo].[Company_CanidateAlertList] (
      [JobID] [int] NULL ,
      [JobSeekerID] [int] NULL ,
      [SYS_CreateTime] [datetime] NULL
      ) ON [PRIMARY]
      GO

      這時你需要改成:
      CREATE TABLE [dbo].[Company_CanidateAlertList] (
      [JobID] [int] NULL ,
      [JobSeekerID] [int] NULL ,
      [SYS_CreateTime] [datetime] NULL
      ) ON [PRIMARY];
      否則不會被C# 執行,也不會報錯:)(困擾了我很久,呵呵)

      回到安裝文件類的視圖頁面,點擊數據庫資源管理器,選擇master數據庫生成一個sqlconnection。這個細節我就不重復了。(注意一點,驗證使用window集成)

      切換到安裝類到代碼視圖
      引入名字空間:
      using System.Reflection;
      using System.IO;
      然后添加以下幾個函數,等下一一介紹:
      privatestring GetSql(string Name)
      {
      try
      {
      Assembly Asm = Assembly.GetExecutingAssembly();
      Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "."+Name);
      StreamReader reader = new StreamReader(strm,System.Text.Encoding.Default);
      //System.Text.Encoding.ASCII;
      return reader.ReadToEnd();

      }
      catch (Exception ex)
      {
      Console.Write("In GetSql:"+ex.Message);
      throw ex;
      }
      }

      private void ExecuteSql(string DataBaseName,string Sql)
      {
      System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);

      Command.Connection.Open();
      Command.Connection.ChangeDatabase(DataBaseName);
      try
      {
      Command.ExecuteNonQuery();
      }
      finally
      {
      Command.Connection.Close();
      }
      }


      protected void AddDBTable(string strDBName)
      {
      try
      {
      ExecuteSql("master","CREATE DATABASE "+ strDBName);
      ExecuteSql(strDBName,GetSql("sql.txt"));
      ExecuteSql("master","exec sp_addlogin 'myoamaster','myoamaster','"+strDBName+"',Null,Null");
      ExecuteSql(strDBName,"EXEC sp_grantdbaccess 'myoamaster', 'myoamaster'");
      ExecuteSql(strDBName,"exec sp_addrolemember 'db_owner','myoamaster'");
      }
      catch(Exception ex)
      {
      Console.Write("In exception handler :"+ex.Message);
      }
      }

      public override void Install(System.Collections.IDictionary stateSaver)
      {
      base.Install(stateSaver);
      AddDBTable(this.Context.Parameters["dbname"]);
      }

      首先介紹GetSql函數:
      他的作用是把sql.txt(作為參數)的sql語句一行一行讀出來,但是要注意一點:
      和MSDN不同的,如果有中文的話,一定要加上
      StreamReader reader = new StreamReader(strm,System.Text.Encoding.Default);
      而不是MSDN的StreamReader reader = new StreamReader(strm);
      否則中文全部是亂碼:(

      ExecuteSql是一個通用函數,方便以后調用

      程序的精髓在AddDBTable這個函數上面,也是困擾我最久的一個函數:
      首先,
      ExecuteSql("master","CREATE DATABASE "+ strDBName);
      創建一個數據庫,strDBName為傳入參數,以后介紹。
      ExecuteSql(strDBName,GetSql("sql.txt"));
      調用GetSql函數,讀sql.txt內容,并執行。
      由于安裝之后要與.net系統融合,所以下面執行的sp是一個具體的情況。
      首先,我的系統在web.config里使用的是mymoamaster用戶,密碼也為myoamaster,這樣可以避免sa密碼對于每個用戶不同這個問題。

      ExecuteSql("master","exec sp_addlogin 'myoamaster','myoamaster','"+strDBName+"',Null,Null");這個sp的主要作用是為新數據庫創建一個登錄
      ExecuteSql(strDBName,"EXEC sp_grantdbaccess 'myoamaster', 'myoamaster'");這個語句的作用的為剛才這個登錄指定數據庫訪問權限
      ExecuteSql(strDBName,"exec sp_addrolemember 'db_owner','myoamaster'");這個sp的作用是指定myoamaster有db_owner的權限

      PS:這幾個sp的具體詳細功能大家可以參考sql server的聯機幫助。
      完成了上面的東西后,萬里長城就剩下一點點了。呵呵:)

      首先,添加一個新項目(廢話,當然是安裝項目了,呵呵)命名也隨意,選擇應用程序文件夾,右鍵添加點擊項目輸出,,選擇主輸出。
      右鍵安裝項目,視圖,用戶界面,添加文本框A,作用是給你創建的數據庫命名。對話框的文字就隨意改了,Edit1Porperty改成和MSDN上一樣的CUSTOMTEXTA1(這個我也不知道是不是一定要這樣,還沒有時間測試)然后把Edit2,3,4都隱藏掉。
      右鍵安裝項目選擇視圖點擊自定義操作 ,選中安裝結點,單擊添加雙擊應用程序文件夾在主輸出來自...(活動)上右鍵屬性CustomActiveData屬性修改為/dbname=[CUSTOMTEXTA1](這個相信你也看出來了,在上面那幾個函數里使用的strDBName就是這個了。呵呵

      然后編譯執行。是不是很酷呢。呵呵


      PS:好久沒有寫過東西了,寫得不好,希望大家不要介意。有什么疑問或者可以改進的地方希望大家提出。
      特別感謝:ZEE,CNet,amjn等其他一些大俠對我提供的幫助。再次感謝。使得我的項目順利完成。

      貼這些出來,希望對新手有用,至于高手,就隨便看看好了。呵呵:)



      日韩精品一区二区三区高清