Pengunjung

8512

PRIMBON™ - Gerbang Dunia Mistik & Alam Gaib
header photo
Berbagi Info Semoga Bermanfaat Bagi Anda

memanipulasi file konfigurasi (exe.config)

July 2, 2010

memanipulasi file konfigurasi (exe.config)

banyak sekali para developer memanfaatkan
suatu fitur baru yaitu My.Settings. Salah satu fungsi nya adalah untuk melakukan
penyimpaanan informasi yang bisa di akses secara mudah dan cepat oleh aplikasi
kita. Dan fitur banyak sekali di gunakan untuk menyimpan connection string dalam
mengakses database. Lalu bagaimana membuat aplikasi yang fleksible dalam
menyimpan connection string tanpa harus membuka secara langsu file konfigurasi
nya. Untuk itu kita harus membuat sedikit code untuk mengakses dan memanipulasi
data yang tersimpan di file tersebut. Bagaimana cara nya , ikuti trus artikel ini

Pembuatan Applikasi
Buatlah project baru dengan nama Read_Write. Lalu Klik Project pada menu dan
“Read_Write Properties”. Dan Klik Settings,

Name = conn
Type = Connection string
Scope = Application
Value= DataSource=namaserver\SQLEXPRESS;Initial
Catalog=BelajarLINQ;UID=sa;PWD=password
Untuk nama sever ganti sesuai dengan nama computer dimana SQL server di
install. Dan password isi password untuk login pada user sa.
Tambahkan beberapa kontrol pada form 1 Setelah disusun seperti gambar diatas, ganti properties Name pada textbox menjadi
= txtserver,txtuser dan txtpassword
Note : Project ini di buat menggunakan VB 2009.

Tambahkan Class pada project, dengan nama config.vb, lalu ketikkan sintaks
seperti dibawah.
1. Ketikkan beberapa imports Name Space seperti dibawah
Imports System
Imports System.Xml
Imports System.Configuration
Imports System.Reflection
Imports System.Data.SqlClient
2. Fungsi bawah sintaks dibawah adalah untuk mendapatkan nilai lokasi beserta
nama dari file konfigurasi (exe.config)

'mendapatkan nama dan lokasi dari file exe.config
Private Shared Function getConfigFilePath() As String
Return Assembly.GetExecutingAssembly().Location & ".config"
End Function

Setelah mendapatkan alamat berserta nama file nya, lalu akan meng load file
konfigurasi, seperti dibawah:

'load file konfigurasi, berdasarkan nilai yang didapat pada fungsi
- getConfigFilePath
Private Shared Function loadConfigDocument() As XmlDocument
Dim doc As XmlDocument = Nothing
Try
doc = New XmlDocument()
doc.Load(getConfigFilePath())
Return doc
Catch e As System.IO.FileNotFoundException
Throw New Exception("File konfigurasi tidak di temukan", e)
End Try
End Function

Lalu ketikkan sintaks dibawah ini, sintaks dibawah berfungsi untuk menulis
atribut pada elemen yang dipilih, untuk penjelasan dapat dilihat pada komen.

Public Sub WriteSettingCon(ByVal name As String, ByVal connectionString As String, _
ByVal providerName As String)
'load konfigurasi file
Dim doc As XmlDocument = loadConfigDocument()
' retrieve connectionStrings node
Dim node As XmlNode = doc.SelectSingleNode("//connectionStrings")
If node Is Nothing Then 'jika node connectionStrings tidak ada
Throw New InvalidOperationException("connectionStrings section tidak dapat di
temukan")
End If
Try
'memilih add elemen, berdasarkan name
Dim elem As XmlElement =
DirectCast(node.SelectSingleNode(String.Format("//add[@name='{0}']",
name)), XmlElement)
If elem IsNot Nothing Then 'jika sudah ada
' mengganti nilai dari atribut
elem.SetAttribute("name", name)
elem.SetAttribute("connectionString", connectionString)
elem.SetAttribute("providerName", providerName)
Else
'membuat elemen dan mengisi nilai atribut
elem = doc.CreateElement("add")
elem.SetAttribute("name", name)
elem.SetAttribute("connectionString", connectionString)
elem.SetAttribute("providerName", providerName)
node.AppendChild(elem)
End If
doc.Save(getConfigFilePath())
Catch
Throw New Exception
End Try
End Sub

5. Untuk menghapus elemen yang dipilih, dapat dilihat pada sintaks dibawah.

Public Sub RemoveSettingCon(ByVal name As String)
'load konfigurasi file
Dim doc As XmlDocument = loadConfigDocument()
'retrieve connectionStrings node
Dim node As XmlNode = doc.SelectSingleNode("//connectionStrings")
Dim elem As XmlElement = DirectCast(node.SelectSingleNode(String.Format("//add[@name='{0}']",
name)), XmlElement)
Try
If node Is Nothing Then
Throw New InvalidOperationException("connectionStrings section tidak dapat di temukan
")
Else
If elem IsNot Nothing Then
' hapus elemen berdasarkan key yang dipilih
node.RemoveChild(node.SelectSingleNode(String.Format("//add[@name='{0}']", name)))
doc.Save(getConfigFilePath())
End If
End If
Catch
Throw New Exception()
End Try
End Sub

Sekarang kita kembali ke form1, double click button Connect, lalu ketikkan sintaks
dibawah..

Try
Configs.RemoveSettingCon(Application.ProductName + ".My.MySettings.conn")
Catch ex As Exception
MsgBox(ex.Message)
End Try

Sebelum menjalankan, liat file konfigurasi pada folder bin > debug>
Read_Write.exe.config. lalu liat informasi didalam file tersebut. Untuk sintaks di atas kita
akan melakukan penghapusan elemen pada node connectionStrings,Jalankan program dan klik button connect, lalu liat hasil nya lagi pada file
Read_Write.exe.config
Cobaperhatikan gambar di atas, kita telah berhasil menghapus data pada node
connectionStrings.

Try
Dim connectionString As String
Dim Configs As New Config
' Configs.RemoveSettingCon(Application.ProductName + ".My.MySettings.conn")
connectionString = "Data Source=" + txtServer.Text + ";Initial Catalog=BelajarLINQ;UID="
+ txtUser.Text + ";PWD=" + txtPassword.Text
Configs.WriteSettingCon(Application.ProductName + ".My.MySettings.conn",
connectionString, "System.Data.SqlClient")
Catch ex As Exception
MsgBox(ex.Message)
End Try

Lalu jalankan program, masukkan data-data yang di perlukan pada textbox,
lalu tekan button connect.Sekali lagi coba buka file Read_Write.exe.config, apakah data-data yang kita
isikan terdapat file tersebut.Jika berhasil maka kita telah bisa membuat program yang fleksible, jika kita
mengalami perubahan pada server, kita bisa menggunakan fungsi ini, tanpa
harus membuka langsung file konfigurasi. Tapi apakah kita akan membiarkan
user dapat melihat informasi pada file. bagaimana jika itu merupakan
informasi yang penting. Jangan khawatir, kita bisa melakukan enkrip data
tersebut. Untuk lebih jelas tentang ini bisa membaca E-Book dari 2 orang
MVP VB (Mas Erick dan Mas Rully) dengan judul “Migrasi Visual Basic 6
ke VB.Net”.
Dan sintaks di bawah ini saya ambil dari contoh pada buku tersebut
(memanfaatkan yang sudah ada.

Public Sub EncryptConnection(ByVal BolEnAs Boolean)
Try
Dim configFile = _
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Dim connectionElement = configFile.GetSection("connectionStrings")
If BolEn= True Then
connectionElement.SectionInformation.ProtectSection(Nothing)
Else
connectionElement.SectionInformation.UnprotectSection()
End If
connectionElement.SectionInformation.ForceSave() = True
configFile.Save(ConfigurationSaveMode.Modified)
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub

Dan buat satu procedure untuk mengecek apakah file konfigurasi sudah di enkrip atau
belum.lalu tambahkan sintaks dibawah, pada procedure WriteSettingCon dan
RemoveSettingCon.
Double click button Connect dan ganti seperti sintaks dibawah.

Dim Configs As New Config
Try
Dim connectionString As String
connectionString = "Data Source=" + txtServer.Text + ";Initial Catalog=BelajarLINQ;UID="
+ txtUser.Text + ";PWD=" + txtPassword.Text
Configs.WriteSettingCon(Application.ProductName + ".My.MySettings.conn",
connectionString, "System.Data.SqlClient")
Configs.EncryptConnection(True)
Catch ex As Exception
Configs.RemoveSettingCon(Application.ProductName + ".My.MySettings.conn")
MsgBox(ex.Message)
End Try

Selanjutnya kita akan membuat procedure untuk melakukan koneksi ke database,
sebelum nya buat, procudere untuk membaca attribute pada elemen connectionStrings

Private Function ReadSetting(ByVal name As String) As String
Try
If CekEncrypt() = True Then
EncryptConnection(False)
End If
Dim cn As String
Dim doc As XmlDocument = loadConfigDocument()
Dim node As XmlNode = doc.SelectSingleNode("//connectionStrings")
If node Is Nothing Then 'jika node connectionStrings tidak ada
Throw New InvalidOperationException("connectionStrings section tidak dapat di temukan")
End If
'memilih add elemen, berdasarkan name
Dim elem As XmlElement =
DirectCast(node.SelectSingleNode(String.Format("//add[@name='{0}']", _
name)),
XmlElement)
If elem IsNot Nothing Then 'jika sudah ada
cn = elem.GetAttribute("connectionString")
Else
Throw New InvalidOperationException("connection string atribut tidak dapat di temukan")
End If
Return cn
Catch ex As Exception
Throw New Exception(ex.Message.ToString)
End Try
End Function

Public Sub TestConnection()
Try
Using connect As New SqlConnection(ReadSetting(Application.ProductName +
".My.MySettings.conn"))
connect.Open()
End Using
MsgBox("Success")
Catch ex As SqlException
Throw New Exception(ex.Message.ToString)
End Try
End Sub

Ubah sintaks button connect seperti dibawah. Dan jalan kan program. Apakah pesan
keberhasilan seperti dibawah tampil ?

Dim Configs As New Config
Try
Dim connectionString As String
connectionString = "Data Source=" + txtServer.Text + ";Initial Catalog=BelajarLINQ;UID="
+ txtUser.Text + ";PWD=" + txtPassword.Text
Configs.WriteSettingCon(Application.ProductName + ".My.MySettings.conn",
connectionString, "System.Data.SqlClient")
Configs.TestConnection()
Configs.EncryptConnection(True)
Catch ex As Exception
Configs.RemoveSettingCon(Application.ProductName + ".My.MySettings.conn")
MsgBox(ex.Message)
End Try

SUGENG NYOBI

 

Go Back

Comment