November 23, 2008
Suatu saat flashdisk saya terkena virus. Semua file yang berekstensi *.doc hilang entah kemana. Hingga menimbulkan kedukaan yang mendalam di hati saya (bahasanya biasa aja dooong).
Singkat cerita, virus di flashdisk saya berhasil dibersihkan. Tetapi saya masih kehilangan file-file yang penting. Tapi mau bagaimana lagi? Rencananya roh-roh file yang hilang tersebut akan dihadirkan lagi menggunakan program file recovery, tapi belum sempat dilaksanakan. Masih kurang sesajen.
Surprise!! Saat flashdisk saya dibaca oleh komputer kawan, rupanya file2 tersebut terbaca. Hanya saja di-hidden. Berita gembira, rupanya file2 tersebut dibuat tidak tampak oleh virus. Padahal hampir saja saya menghubungi komisi orang hilang atau kontras.
Ketika file tersebut ingin saya pulihkan dari status hidden, saya klik kanan – properties, rupanya file tersebut ter-deep freeze hidden, dalam kata lain tidak bisa dipulihkan hiddennya. Waduh…Tampaknya file-file yang disembunyikan itu dibuat menjadi file system oleh virus.
Kemudian, saya setting computer saya agar bisa membaca file yang hidden, melalui tools\folder options\view di windows explorer. Tapi rupanya belum terbaca juga. Saya un-check ‘Hide protected operating system files’, tetap tidak terbaca. Keanehan terjadi, rupanya setelah saya klik tombol OK, item tersebut kembali checked. Entah kenapa. Jangan-jangan, computer saya masih ada virusnya????
Akhirnya saya pakai cara bodoh (sebenarnya, karena saya merasa bodoh, maka cara apa pun yang saya lakukan tetap namanya cara bodoh. Huh… menghina diri sendiri). Saya pinjam komputer kawan saya itu, lalu saya buka file yang hidden. Kemudian saya save-as dengan nama yang lain (file yang terbaru tidak hidden). Lalu file yang hidden itu saya delete.
Capek juga. Ada lumayan file bertipe doc di flashdisk saya. Hhhh….
Akhirnya saya tanya teman, bagaimana caranya agar file yang ghaib itu bisa pulih. O la la, rupanya dia tahu. Caranya seperti ini:
1.Buka command prompt.
2.Tuju folder yang memuat file yang mati suri.
3.Lalu ketikkan attrib –s –h *
4.Berhasil.
Wah… saya baru tahu caranya. Mungkin pembaca sudah dulu tahu ya. Ya… begini lah saya. Kampungan. Wekekekeke……..
May 6, 2008
Manipulasi Data - 2
Sebenarnya ada cara yang mudah untuk memanipulasi data. Kelewatan nih… Caranya dengan langsung menginput pada datagridview.
Tampilannya akan seperti ini.
”Selengkapnya..>>”
April 28, 2008
Manipulasi Data
Bahasan selanjutnya adalah bagaimana kita melakukan insert/update data ke dalam database. Kita masih menggunakan database yang sama, serta melanjutkan form yang sama.
Berikut ini tampilan form selanjutnya.
”Selengkapnya..>>”
March 19, 2008
Menampilkan Data Pada DatagridView dan Per Record.
Kita sudah membahas bagaimana cara menampilkan data pada DatagridView, juga menampilkan data per record.
Metode menampilkan data per record memiliki kelemahan yaitu tidak bisa melihat banyak data sekaligus. Sungguh tidak enak bila harus menggerak-gerakkan record, sedangkan datanya ada ribuan record.
Tapi bila ditampilkan pada grid pun bukan berarti tidak memiliki kelemahan. Kelemahannya adalah keterbatasan ruang, keterbatasan lebar layar atau jendela atau form. Bayangkan bila kita hendak menampilkan lebih dari 10 field/kolom dalam satu datagrid, apakah kolom-kolom tersebut bisa ditampilkan sekaligus?
”Selengkapnya..>>”
February 5, 2008
Scrolling Data
Sebelumnya, kita sudah mempelajari cara me-load data kedalam DataGridView. Kali ini, kita akan melakukan scrolling data.
Maksudnya seperti ini, ada kalanya data ditampilkan per record, bukan pada datagrid. Sehingga kita tidak bisa melihat data secara jamak, tapi disuguhkan per record. Lihat gambar.

Karena ditampilkan per record, maka untuk melihat record yang lain perlu dilakukan perpindahan record. Untuk pindah record digunakan tombol next/previous. Lalu ada juga tombol first & last untuk pindah ke record pertama atau record terakhir.

Keterangan label pada tombol-tombol di atas adalah:
|< = Ke awal record. Untuk tombolnya, beri nama btnFirst
< = Menuju record sebelumnya, btnPrev.
> = Menuju record selanjutnya, btnNext.
>| = Menuju record terakhir, btnLast.
Masih menggunakan database sebelumnya, dan table yang sama (tbMataUang) yang hanya terdiri dari 2 field: Kode dan Nama.
Untuk Textbox yang menampilkan kode, beri nama txtKode. Dan untuk Nama, beri nama txtNama.
Listingnya seperti ini:
Imports System.Data.OleDb
Public Class FormScrollData
Private oleDa As New OleDbDataAdapter("Select * from tbMataUang", _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Application.StartupPath.ToString & "\dbTutorial.mdb")
Private dt As New DataTable
Dim bm As BindingManagerBase
Private Sub FormScrollData_Load(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
oleDa.Fill(dt)
bm = BindingContext(dt)
txtKode.DataBindings.Add("text", dt, "Kode")
txtNama.DataBindings.Add("text", dt, "Nama")
End Sub
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal _
e As System.EventArgs) Handles btnFirst.Click
bm.Position = 0
End Sub
Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles btnPrev.Click
bm.Position -= 1
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles btnNext.Click
bm.Position += 1
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles btnLast.Click
bm.Position = bm.Count
End Sub
End Class
Ada beberapa syntax yang saya tidak perlu menjelaskannya lagi, karena pada bagian pertama sudah dijelaskan. Bagian kali ini, saya memperkenalkan konsep data binding.
Data binding memudahkan kita berinteraksi dengan data source. Di bagian ini diperkenalkan bagaimana memanfaatkan data binding untuk melakukan scrolling data.
Bind dalam bahasa inggris artinya mengikat/membalut. Anggap seperti itulah, ada datasource (sumber data) yang dikaitkan ke objek-objek yang kita buat. Datasourcenya adalah objek dt yang telah diisi dengan data-data yang ada pada table tbMataUang. Yang diikat adalah antara field yang ada pada datasource, dengan property pada objek.
Syntax
txtKode.DataBindings.Add("text", dt, "Kode")
bisa diterjemahkan seperti ini, property text pada txtKode dihubungkan dengan field kode yang ada dalam dt. Begitu juga dengan txtNama.
BindingManagerBase (pada code di atas menggunakan variable bm) mengatur semua objek-objek yang terikat pada datasource yang sama. Untuk mengisi bm, kita gunakan BindingContext, dan kita isi datasourcenya dengan dt.
bm = BindingContext(dt)
Kita menggunakan bm ini buat memindahkan record, atau menuju record pertama/terakhir.
bm.Position += 1
bm.Position -= 1
bm.Position = 0
Untuk ke record selanjutnya, posisi bm ditambah 1, begitu sebaliknya buat menuju ke record sebelumnya. Untuk menuju record pertama, posisi bm diisi dengan nilai 0. Dan untuk menuju record terakhir, kita tuliskan code
bm.Position = bm.Count
yang artinya mengisi nilai posisi bm dengan nilai besar jumlah record yang terikat di bm tersebut.
Tiap kali posisi bm berubah, tiap objek yang terikat dengan datasource yang sama akan merefresh nilainya dan mengisi nilai baru sesuai dengan posisi bm.
Saya kira cukup. Mudah2an bisa dimengerti.
January 7, 2008
Yang ini dari temanku, Dandi. Memakai Class bawaan .Net yang menggunakan metode Rinjdael. Memakai bahasa C#.
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Collections;
public class AES_Cryptography
{
public const int KEYSIZE_128 = 128;
public const int KEYSIZE_192 = 192;
public const int KEYSIZE_256 = 256;
public const string HASH_MD5 = "MD5";
public const string HASH_SHA1 = "SHA1";
private string getRandomPassword()
{
string strOut = "";
Random rnd = new Random();
for (int i = 0; i < 8; i++)
strOut = strOut + Convert.ToChar(rnd.Next(0, 254)).ToString();
MD5 md5 = new MD5CryptoServiceProvider();
byte[] strTemp = md5.ComputeHash(Encoding.UTF8.GetBytes(strOut));
string sOut = "";
foreach (byte b in strTemp)
{
sOut += String.Format("{0:x2}", b);
}
sOut = sOut.Substring(8, 16);
return sOut;
}
private string getRandomSalt()
{
string strOut = "";
Random rnd = new Random();
for (int i = 0; i < 8; i++)
strOut = strOut + Convert.ToChar(rnd.Next(0, 254)).ToString();
MD5 md5 = new MD5CryptoServiceProvider();
byte[] strTemp = md5.ComputeHash(Encoding.UTF8.GetBytes(strOut));
string sOut = "";
foreach (byte b in strTemp)
{
sOut += String.Format("{0:x2}", b);
}
sOut = sOut.Substring(8, 16);
return sOut;
}
private string getRandomInitVector()
{
string strOut = "";
Random rnd = new Random();
for (int i = 0; i < 8; i++)
strOut = strOut + Convert.ToChar(rnd.Next(0, 254)).ToString();
MD5 md5 = new MD5CryptoServiceProvider();
byte[] strTemp = md5.ComputeHash(Encoding.UTF8.GetBytes(strOut));
string sOut = "";
foreach (byte b in strTemp)
{
sOut += String.Format("{0:x2}", b);
}
sOut = sOut.Substring(8, 16);
return sOut;
}
public string encryptString(string clearText)
{
try
{
string cipherText = "";
string strPass = getRandomPassword();
string strSalt = getRandomSalt();
string strIV = getRandomInitVector();
string cipherOut;
MemoryStream mStream = new MemoryStream();
Rijndael rCrypt = Rijndael.Create();
PasswordDeriveBytes password = new PasswordDeriveBytes(strPass, Encoding.ASCII.GetBytes(strSalt), AES_Cryptography.HASH_MD5, 9);
rCrypt.Key = password.GetBytes(AES_Cryptography.KEYSIZE_256 / 8 ) ;
rCrypt.IV = Encoding.ASCII.GetBytes(strIV);
CryptoStream cStream = new CryptoStream(mStream, rCrypt.CreateEncryptor(rCrypt.Key, rCrypt.IV), CryptoStreamMode.Write);
cStream.Write(Encoding.UTF8.GetBytes(clearText), 0, Encoding.UTF8.GetBytes(clearText).Length);
cStream.FlushFinalBlock();
cipherText = Convert.ToBase64String(mStream.ToArray());
cStream.Close();
mStream.Close();
cipherText = strPass.Substring( 0 , 8 ) + strIV + cipherText + strSalt + strPass.Substring(8, 8 ) ;
cipherOut = cipherText;
return cipherOut;
}
catch (Exception exp)
{
throw new Exception(exp.Message, exp);
}
}
public string decryptString(string cipherText)
{
try
{
MemoryStream mStream = new MemoryStream();
Rijndael rCrypt = Rijndael.Create();
string textOut;
string strOut = "";
string strPass = cipherText.Substring(0, 8 ) + cipherText.Substring(cipherText.Length - 8, 8 ) ;
string strSaltValue = cipherText.Substring(cipherText.Length - (8 + 16), 16);
string strIV = cipherText.Substring(8, 16);
cipherText = cipherText.Substring(24, cipherText.Length - 16 - 16 - 16);
PasswordDeriveBytes password = new PasswordDeriveBytes(strPass, Encoding.ASCII.GetBytes(strSaltValue), AES_Cryptography.HASH_MD5, 9);
rCrypt.Key = password.GetBytes(AES_Cryptography.KEYSIZE_256 / 8 ) ;
rCrypt.IV = Encoding.ASCII.GetBytes(strIV);
CryptoStream cStream = new CryptoStream(mStream, rCrypt.CreateDecryptor(rCrypt.Key, rCrypt.IV), CryptoStreamMode.Write);
cStream.Write(Convert.FromBase64String(cipherText), 0, Convert.FromBase64String(cipherText).Length);
cStream.FlushFinalBlock();
strOut = Encoding.UTF8.GetString(mStream.ToArray());
cStream.Close();
mStream.Close();
textOut = strOut;
return textOut;
}
catch (Exception exp)
{
throw new Exception(exp.Message, exp);
}
}
public string encryptString(string clearText, string passKey)
{
try
{
string cipherText = "";
string strPass = passKey;
string strSalt = getRandomSalt();
string strIV = getRandomInitVector();
string cipherOut;
MemoryStream mStream = new MemoryStream();
Rijndael rCrypt = Rijndael.Create();
PasswordDeriveBytes password = new PasswordDeriveBytes(strPass, Encoding.ASCII.GetBytes(strSalt), AES_Cryptography.HASH_MD5, 9);
rCrypt.Key = password.GetBytes(AES_Cryptography.KEYSIZE_256 / 8 ) ;
rCrypt.IV = Encoding.ASCII.GetBytes(strIV);
CryptoStream cStream = new CryptoStream(mStream, rCrypt.CreateEncryptor(rCrypt.Key, rCrypt.IV), CryptoStreamMode.Write);
cStream.Write(Encoding.UTF8.GetBytes(clearText), 0, Encoding.UTF8.GetBytes(clearText).Length);
cStream.FlushFinalBlock();
cipherText = Convert.ToBase64String(mStream.ToArray());
cStream.Close();
mStream.Close();
cipherText = strIV + cipherText + strSalt;
cipherOut = cipherText;
return cipherOut;
}
catch (Exception exp)
{
throw new Exception(exp.Message, exp);
}
}
public string decryptString(string cipherText, string passKey)
{
try
{
MemoryStream mStream = new MemoryStream();
Rijndael rCrypt = Rijndael.Create();
string textOut;
string strOut = "";
string strPass = passKey;
string strSaltValue = cipherText.Substring(cipherText.Length - (16), 16);
string strIV = cipherText.Substring(0, 16);
cipherText = cipherText.Substring(16, cipherText.Length - 16 - 16);
PasswordDeriveBytes password = new PasswordDeriveBytes(strPass, Encoding.ASCII.GetBytes(strSaltValue), AES_Cryptography.HASH_MD5, 9);
rCrypt.Key = password.GetBytes(AES_Cryptography.KEYSIZE_256 / 8 ) ;
rCrypt.IV = Encoding.ASCII.GetBytes(strIV);
CryptoStream cStream = new CryptoStream(mStream, rCrypt.CreateDecryptor(rCrypt.Key, rCrypt.IV), CryptoStreamMode.Write);
cStream.Write(Convert.FromBase64String(cipherText), 0, Convert.FromBase64String(cipherText).Length);
cStream.FlushFinalBlock();
strOut = Encoding.UTF8.GetString(mStream.ToArray());
cStream.Close();
mStream.Close();
textOut = strOut;
return textOut;
}
catch (Exception exp)
{
throw new Exception(exp.Message, exp);
}
}
}
Class berikut ini berfungsi untuk meng-encrypt-decrypt string. Misalnya untuk keperluan meng-enkripsi password, dll. Masih menggunakan vb.Net 2005. Menggunakan class yang menggunakan metode TripleDes.
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text
Public Class zSecurity
Dim password As String = "ZE161207"
Dim salt() As Byte = {&H0, &H1, &H2, &H3, &H4, &H5, &H6, &HF1, &HF0, &HEE, &H21, &H22, &H45}
Public Function EncryptString(ByVal str As String) As String
Dim k1 As New Rfc2898DeriveBytes(password, salt, 1000)
Dim encAlg As TripleDES = TripleDES.Create()
encAlg.Key = k1.GetBytes(16)
Dim encryptionStream As New MemoryStream()
Dim encrypt As New CryptoStream(encryptionStream, encAlg.CreateEncryptor(), CryptoStreamMode.Write)
Dim utfD1 As Byte() = New System.Text.UTF8Encoding(False).GetBytes(str)
encrypt.Write(utfD1, 0, utfD1.Length)
encrypt.FlushFinalBlock()
encrypt.Close()
Dim edata1 As Byte() = encryptionStream.ToArray()
k1.Reset()
Return Convert.ToBase64String(edata1) & Convert.ToBase64String(encAlg.IV) ‘Encoding.ASCII.GetString(encAlg.IV)
End Function
Public Function DecryptString(ByVal str As String) As String
Dim k2 As New Rfc2898DeriveBytes(password, salt)
Dim strIV As String = str.Substring(str.Length - 12, 12)
str = str.Substring(0, str.Length - 12)
Dim decAlg As TripleDES = TripleDES.Create()
decAlg.Key = k2.GetBytes(16)
decAlg.IV = Convert.FromBase64String(strIV)
Dim decryptionStreamBacking As New MemoryStream()
Dim decrypt As New CryptoStream(decryptionStreamBacking, decAlg.CreateDecryptor(), CryptoStreamMode.Write)
decrypt.Write(Convert.FromBase64String(str), 0, Convert.FromBase64String(str).Length)
decrypt.Flush()
decrypt.Close()
k2.Reset()
Return New UTF8Encoding(False).GetString(decryptionStreamBacking.ToArray())
End Function
End Class
January 4, 2008
Class di bawah ini untuk melakukan mapping drive ke komputer lain. Dapet dari suatu sumber, terus dimodifikasi. Menggunakan vb.Net, versi 2005.
Public Class Mapping_Drive
Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer
Public Declare Function WNetCancelConnection2 Lib "mpr" Alias "WNetCancelConnection2A" _
(ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential)> _
Public Structure NETRESOURCE
Public dwScope As Integer
Public dwType As Integer
Public dwDisplayType As Integer
Public dwUsage As Integer
Public lpLocalName As String
Public lpRemoteName As String
Public lpComment As String
Public lpProvider As String
End Structure
Public Const ForceDisconnect As Integer = 1
Public Const RESOURCETYPE_DISK As Long = &H1
Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String, ByVal strUsername As String, ByVal strPassword As String) As Boolean
Dim nr As NETRESOURCE
nr = New NETRESOURCE
nr.lpRemoteName = UNCPath
nr.lpLocalName = DriveLetter & ":"
nr.dwType = RESOURCETYPE_DISK
Dim result As Integer
result = WNetAddConnection2(nr, strPassword, strUsername, 0)
If result = 0 Then
Return True
Else
Return False
End If
End Function
Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String) As Boolean
Dim nr As NETRESOURCE
Dim strUsername As String
Dim strPassword As String
nr = New NETRESOURCE
nr.lpRemoteName = UNCPath
nr.lpLocalName = DriveLetter & ":"
strUsername = Nothing ‘(add parameters to pass this if necessary)
strPassword = Nothing ‘(add parameters to pass this if necessary)
nr.dwType = RESOURCETYPE_DISK
Dim result As Integer
result = WNetAddConnection2(nr, strPassword, strUsername, 0)
If result = 0 Then
Return True
Else
Return False
End If
End Function
Public Function UnMapDrive(ByVal DriveLetter As String) As Boolean
Dim rc As Integer
rc = WNetCancelConnection2(DriveLetter & ":", 0, ForceDisconnect)
If rc = 0 Then
Return True
Else
Return False
End If
End Function
End Class
December 4, 2007
MENAMPILKAN DATA PADA DATAGRID
Sebagai permulaan, kita mencoba menampilkan data yang ada pada database ke sebuah datagrid. Control Datagrid, yang pada VB.Net versi 2005 bernama DataGridView, berfungsi untuk menampilkan data kedalam bentuk table yang terdiri dari baris dan kolom. Komponen ini sangat representatif untuk menampilkan data karena sesuai dengan karakteristik penyimpanan data pada table di database, yang terdiri dari field dan record.
Bentuknya seperti yang tampak pada di bawah ini:
”Selengkapnya..>>”
December 3, 2007
Saat harus melakukan koneksi database, kita membutuhkan koneksi string. Tiap database berbeda koneksi stringnya. Bagaimana caranya agar kita bisa menuliskan koneksi string dengan tepat?
MENGHAFAL!
Tenang… itu cuma salah satu cara kok. Anda tidak suka menghafal? Sama!!!
”Selengkapnya..>>”
October 24, 2007
Koneksi String adalah sebuah string yang berisi informasi server database, nama database, dan informasi lainnya.
Koneksi string ini dipakai oleh objek yang akan menghubungkan program dengan database. Setelah terkoneksi, baru bisa dilakukan pengambilan data, modifikasi data, dll.
Macam-macam bentuk koneksi string bisa dilihat di http://www.connectionstrings.com/.