Selasa, 21 Desember 2010

Menyertakan Instalasi Database Saat Deploy Aplikasi .Net

install database juga ketika deploying sebuah aplikasi? .net framework sudah sediakan class yang dapat digunakan untuk melakukan hal tsb. Menggunakan Class Installer pada Class Library project template kita dapat dengan "mudah" melakukannya...

Dalam class installer terdapat prosedur-prosedur yang harus juragan override code implementasinya, prosedur tsb yaitu : Install, Uninstall, Commit, Rollback...Tugasnya untuk eksekusi script database. Begitu juga kalau terjadi error on the way maka prosedur Rollback yang akan dijalankan.

Sudah pasti juragan harus membuat Setup Project template nya untuk menjalankan Class Installer yang dibuat. Pada setup project tsb ditambahkan Custom Actions editor yang akan mengeksekusi script database setelah main aplikasinya beres diinstal terlebih dahulu. Berikut langkah-langkahnya :

1. - Buat dulu Class Library project template.
- Hapus file Class1 yang ditambahkan secara default.
- Tambahkan Class Installer (Add New Item dari projectnya)

Tambahkan code dibawah ini :
Imports System.ComponentModel
Imports System.Configuration.Install
  
  Public Class DBInstaller

      Public Overrides Sub Install( _
      ByVal savedState As System.Collections.IDictionary)
          MyBase.Install(savedState)

          '//File Path ini didapatkan dari
          '//setting CustomActionnya nanti

          Dim strSqlFilePath As String = _
          Me.Context.Parameters.Item("Args")

  

          '//gunakan osql.exe untuk execute
          '//script database yang akan diinstal
          '//sesuaikan nama instance name server nya
          '//pada opsi -S .\sqldev2k5

          Dim psi As ProcessStartInfo = New ProcessStartInfo( _
          "osql.exe", "-Slocalhost -E -i " & Chr(34) & _
          strSqlFilePath & Chr(34))

          '//Chr(34) digunakan untuk
          '//menghasilkan apostrope (single quote)

          psi.WindowStyle = ProcessWindowStyle.Normal
          psi.UseShellExecute = False

          Try
              Dim p As Process = Process.Start(psi)
          Catch e As Exception
              Throw New InstallException(e.Message + _
              strSqlFilePath)
          End Try
      End Sub

      Public Overrides Sub Commit(ByVal savedState As _
      System.Collections.IDictionary)
          MyBase.Commit(savedState)
      End Sub

      Public Overrides Sub Rollback(ByVal savedState As _
      System.Collections.IDictionary)
          MyBase.Rollback(savedState)
      End Sub

      Public Overrides Sub Uninstall(ByVal savedState As _
      System.Collections.IDictionary)
          MyBase.Uninstall(savedState)
      End Sub

  End Class


2. Buat sebuah windows application yang digunakan sebagai main applicationnya.

3. Generate sql script dari database yang akan di gunakan. Anda bisa menggunakan enterprise manager (sql server 2000) atau sql server management studio (sql server 2005) tergantung dari jenis database yang digunakan. Pada contoh yang terdapat di file yang dapat anda download ini menggunakan database sql server 2005.

4. Tambahkan Setup Project pada solution, and then do the following steps :
- Add project output to the Application folder from Class Library (Class Installer) project and Windows Application project. You can do these at the File System Editor by clicking its toolbar menu above Solution Explorer.
- Tambahkan file .sql yang sudah di generate dengan klik kanan application folder >> Add >> File...
- Klik Custom Actions editor di toolbar menu
- Klik kanan Custom Actions node di Custom Actions editornya >> Add Custom Action >> pilih Primary Ouput dari Class Libary project (Installer Class) dari Application Folder
- Klik kanan node Primary Output tepat di bawah node Install >> pilih Properties Window
- assign properti CustomActionData dengan nilai :
/args="[TARGETDIR]RoelDB.sql"
sesuaikan nama file .sql nya. Variabel "args" tsb juga digunakan di Installer Class dan harus sama nama variabelnya...





5. Build project

6. Install aplikasi

7. Lihat hasilnya seperti screen shot :



Tidak ada komentar:

Posting Komentar