Pivot Query

Pada session ini kita akan membuat contoh sederhana pivot query di SQL, kita menggunakan pivot query ketika kita perlu untuk mentransform data dari level baris ke dalam kolom data.

Pivot adalah sebuah table interaktif yang mengkombinasikan dan membandingkan nominal/angka dari sebuah data. Kita bisa merotate baris dan kolomnya untuk melihat perbedaan summary dari sebuah sumber data.

Buat table database di SQL Server. Pada contoh dibawah saya beri nama tabel INVOICE. Tabel INVOICE memiliki tiga kolom data yaitu DT, PRODUCT dan AMOUNT.

Script CREATE tabel di SQL Server :
CREATE TABLE [dbo].[INVOICE](
 [DT] [datetime] NULL,
 [PRODUCT] [varchar](20) NULL,
 [AMOUNT] [numeric](18, 0) NULL
)

Setelah tabel INVOICE dibuat lakukan query INSERT datanya dengan meng-execute sript dibawah ini.
INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A41300000000 AS DateTime), N'A', CAST(100 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A41300000000 AS DateTime), N'B', CAST(90 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A41400000000 AS DateTime), N'C', CAST(80 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A41400000000 AS DateTime), N'A', CAST(100 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A41400000000 AS DateTime), N'B', CAST(90 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A41500000000 AS DateTime), N'A', CAST(100 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A41500000000 AS DateTime), N'B', CAST(90 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A43200000000 AS DateTime), N'A', CAST(100 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A43300000000 AS DateTime), N'A', CAST(100 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A43300000000 AS DateTime), N'B', CAST(90 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A43300000000 AS DateTime), N'C', CAST(80 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A43400000000 AS DateTime), N'A', CAST(100 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A43400000000 AS DateTime), N'B', CAST(90 AS Numeric(18, 0)))

INSERT [dbo].[INVOICE] ([DT], [PRODUCT], [AMOUNT]) VALUES (CAST(0x0000A43500000000 AS DateTime), N'C', CAST(80 AS Numeric(18, 0)))

Kalau kita query SELECT table INVOICE dari hasil INSERT di atas maka akan menghasilkan result seperti gambar berikut ini.

Dari data seperti gambar di atas, kita bisa membuat query yang menghasilkan data produk per tanggal dan produk per bulan dengan nominal amountnya menggunakan pivot queri.

Berikut script pivot query produk per tanggal di bulan January :
SELECT *
 FROM
 (
  SELECT 
  DT AS [DATE]
  ,PRODUCT
  ,AMOUNT 
  FROM INVOICE WHERE MONTH(DT)=1
 ) X
PIVOT
 (
 SUM(AMOUNT)
 FOR [DATE] IN ([2015-01-01],[2015-01-02],[2015-01-03])
 ) P
Result query setelah di-execute :

Script pivot query produk per bulan :
SELECT * FROM
(
 SELECT 
 DATENAME(MONTH,DT) AS [MONTH]
 ,PRODUCT
 ,AMOUNT 
 FROM INVOICE
) X
PIVOT
(
SUM(AMOUNT)
FOR [MONTH] IN ([JANUARY],[FEBRUARY])
) P

Result query setelah di-execute :

Dari script pivot query diatas, kita masih menggunakan fix column. Berikut ini pivot query dengan kolom dinamis.
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', ' + QUOTENAME([MONTH])
FROM (SELECT DISTINCT DATENAME(MONTH,DT) AS [MONTH] FROM INVOICE) AS C;
SET @sql = N'
SELECT PRODUCT,' + STUFF(@columns, 1, 2, '') + '
FROM
(
  SELECT DATENAME(MONTH,DT) AS [MONTH]
  ,PRODUCT
  ,AMOUNT
   FROM INVOICE) AS X
PIVOT
(
  SUM(AMOUNT) FOR [MONTH] IN ('
  + STUFF(REPLACE(@columns, ', [', ',['), 1, 1, '')
  + ')
) AS P;';
PRINT @sql;
EXEC sp_executesql @sql;


Install SSL Certificate di IIS

SSL Certificate adalah sebuah file data berukuran kecil yang menyimpan data cryptographic seperti Common Name, Company Name, Country, City, Province dan Organization Unit Name sekaligus dengan informasi identitas atas Server Anda. SSL sendiri singkatan dari Secure Socket Layer, juga dikenal dengan istilah Transport Secure Layer (TLS). Ketika SSL Certificate di install pada sebuah web server, ia melindungi transmisi data antara server dan browser. SSL digunakan untuk melindungi transaksi kartu kredit, data transfer, user/password login dan informasi data sensitive lainnya.

Dengan SSL Certificate data jadi terenkripsi sebelum melakukan transmisi melalui internet. Data yang telah terenkripsi dapat didekodekan hanya oleh server yang mana aAnda benar-benar mengirimkannya sendiri. Ini adalah jaminan bahwa informasi yang anda kirimkan ke situs web tidak akan dicuri atau dirusak.

Dimana kita bisa mendapatkan SSL Certificate, kita bisa membuatnya sendiri dengan men-generatenya menggunakan tool gratis yang bisa didownload di internet maupun membelinya dari vendor penyedia SSL Certificate seperti Symantec dan GeoTrush.

Pada session ini kita akan belajar menginstall SSL Certificate di web server IIS. Berikut ini langkah-langkahnya :

  1. Buka Control Panel pilih Administrative Tools, kemudian buka Information Services (IIS) Manager anda.
  2. Dari Panel Home, double-click the "Server Certificates".
  3. Dari panel "Actions" disebelah kanan, pilih "Complete Certificate Request."
  4. Setelah “Complite Certifacte Request” dipilih, akan membuka jendela “Specify Certificate Authority Response”. Kemudian browse file Sertifikat SSL, isi Friendly name sesuai nama Aplikasi, Kemudian tekan tombol OK.
  5. Setelah file Sertifikat SSL terpasang selanjutnya Binding ke Web Aplikasi. Pilih Web Aplikasi di Menu Site.
  6. Dari panel "Actions" disebelah kanan, pilih "Bindings...". Kemudian akan tampil jendela Site Binding.
  7. Pada jendela Site Binding tekan tombol “Add”, kemudian akan tampil jendela Edit Site Bindings. Pada Jendela Edit Site Binding pilih “https” di combo Type, isi Port yang akan digunakan kemudian pada combo File SSL Sertificate pilih nama Friendly Name yang sudah kita buat di atas. Selanjutnya tekan tombol OK.
  8. Restart Web Aplikasi, selanjutnya browse Web Aplikasi di site “https”.
  9. Selesai, SELAMAT MENCOBA....!


Gzip Compression


Gzip adalah sebuah file format, atau metode pemampatan file. Dengan gzip, file anda dapat di mampatin menjadi lebih kecil ukuranya. Gzip juga digunakan dalam penyajian konten web sehingga meningkatkan performance web anda.

Dengan menggunakan gzip compression, web anda akan lebih cepat untuk dimuat dan juga menghemat bandwith pada hosting atau server.

Kebanyakan browser sekarang seperti Internet Explorer, Firefox, Opera dan lainnya sudah mendukung gzip compressed. Ada banyak web server yang sudah menyediakan fitur gzip compression kita tinggal mengaktifkan saja.

Pada contoh di session ini kita akan mengaktifkanya di web server Tomcat dan IIS. Saya asumsikan anda sudah punya web aplikasi yang sudah di hosting di Tomcat bagi yang develop web menggunakan Java environment atau di IIS bagi yang mendevelop menggunakan .Net environment.

Berikut ini cara konfigurasinya di Tomcat, buka file /config/server.xml di Tomcat anda. Cari baris Connection kemudian tambahkan script dibawah diantara tag Connection.

compression="on" 
compressionMinSize="2048" 
noCompressionUserAgents="gozilla, traviata" 
compressableMimeType="text/html,text/xml"

Contoh :
<Connector connectionTimeout="20000"
 compression="on"
        compressionMinSize="2048"
        noCompressionUserAgents="gozilla, traviata"
        compressableMimeType="text/html,text/xml"
 port="8181" 
 protocol="HTTP/1.1"
 redirectPort="8443"/>

Simpan perubahan scriptnya dan jalankan kembali Tomcat anda. Kini aplikasi anda sudah mengaktifkan fitur Gzip Compression.

Anda bisa melihat perbedaannya sebelum dan setelah menggunakan Gzip Compression, dengan menggunakan Firebug tool, anda bisa mendownloadnya di internet. Jalankan web aplikasi di browser Mozzila, klik dua kali icon serangga di sudut kanan atas.

Gambar dibawah ini adalah tampilan halaman sebelum Gzip compression diaktifkan.
Gambar tampilan halaman setelah gzip compression diaktifkan.

Berdasarkan testing menggunakan Firebug tool diatas terlihat perubahannya yang sangat signifikan untuk mengakses halaman yang sama. Sebelum Gzip compression diaktifkan browser butuh waktu 4.88s dengan response data sebesar 7.1MB setelah diaktifkan hanya butuh 673ms untuk response data 74.9KB. Disini terjadi perubahan ukuran file dari 7.1MB menjadi 74.9KB.

Untuk konfigurasi di IIS sangat mudah dengan menggunakan UI Interfaces. Pastikan dahulu kalau anda sudah menambahkan Ferformance Features di IIS anda. Jika belum install dahulu dengan pilih Control Panel, klik Program and Feature kemudian pilih Turn Windows feature on or off seperti gambar dibawah.


Centang Dynamic Content Compression dan Static Content Compression seperti gambar dibawah, kemudian tekan OK.

Setelah proses install selesai, buka IIS Manager anda, pilih panel Features View, klik dua kali icon Compression.
Centang Enable dynamic content compression dan Enable static content compression, kemudian tekan Apply dan restart IIS anda.

SELAMAT MENCOBA..!

ASP.NET Web API


ASP.Net Web API adalah sebuah framework untuk membangun Web Service(HTTP services). Pada umumnya sebuah web service ASP.NET Web API melayani client dengan menyediakan berbagai layanan dan data untuk web page, desktop maupun mobile aplikasi. ASP.Net Web API adalah sebuah platform ideal untuk membangun RESTful aplikasi pada .NET Framework.

Pada session kali ini, kita akan belajar membuat sebuah Web API project dan cara memanggilnya menggunakan Javascript dan JQuery. Web API yang kita buat akan mengembalikan sebuah list produk dengan tampilan web seperti gambar berikut ini.


Siapkan Visual Studio anda, saya menggunakan Visual Studio 2013. Start Visual Studio dan pilih New Project dari Start page. atau, dari File menu, pilih New dan kemudian Project.

Pada panel Templates, pilih Installed Templates dan expand node Visual C#. Dibawah Visual C#, pilih Web. Pada list project template, pilih ASP.NET Web Application. Beri nama project "ProductsApp" dan click OK.


Pada jendela dialog New ASP.NET Project, pilih Empty template. Dibawah "Add folders and core references for", check Web API kemudian Click OK.


Setelah project dibuat saatnya membuat Model untuk merepresentasikan sebuah product. Tentang apa itu Model, akan saya jelaskan di session yang berbeda diblog ini. Pada solution explorer klik kanan models folder, dari context menu, pilih Add kemudian pilih Class.


Pada class product tambahkan property class product sebagai berikut ini
namespace ProductsApp.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }
    }
}
Pada Web API, sebuah controller adalah sebuah object yang menangani HTTP requests. Kita akan menambahkan sebuah controller yang bisa mengembalikan data list product maupun sebuah single product yang dispesipikasikan oleh sebuah ID.

Pada Solution Explorer, klik kanan folder Controllers. Pilih Add dan kemudian pilih Controller.


Pada jendela dialog Add Scaffold, pilih Web API Controller - Empty. Kemudian click Add.


Pada jendela Add Controller, beri nama controller "ProductsController". Kemudian click Add.



Buka file ProductController.cs dengan double click, copas script code dibawah ini.
using ProductsApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;

namespace ProductsApp.Controllers
{
  public class ProductsController : ApiController
  {
   Product[] products = new Product[] 
   { 
     new Product {Id=1,Name="Tomato Soup",Category="Groceries",Price=1}, 
     new Product {Id=2,Name="Yo-yo",Category="Toys",Price=3.75M}, 
     new Product {Id=3,Name="Hammer",Category="Hardware",Price=16.99M} 
   };

   public IEnumerable GetAllProducts()
   {
     return products;
   }

   public IHttpActionResult GetProduct(int id)
   {
     var product = products.FirstOrDefault((p) => p.Id == id);
     if (product == null)
      {
        return NotFound();
      }
        return Ok(product);
   }
 }
}

Pada contoh script di atas produk diisi dengan menggunakan fix array, tentunya ini hanyalah sebuah latihan. Pada aplikasi sesungguhnya kita bisa menggunakan query database atau menggunakan beberapa external sumber data.

Sekarang mari kita lanjutkan, controller mendefinisikan dua buah metode yaitu GetAllProducts yang mengembalikan list product sebagai type IEnumerable, dan GetProduct yang mengembalikan single data product yang dispesipikasikan oleh sebuah parameter ID.

That's it! anda mempunyai sebuah WEB API. Masing-masing metode dalam sebuah controller berkorespondensi pada satu atau lebih URIs.


Controller Method

URI

GetAllProducts

/api/products

GetProduct

/api/products/id

Untuk metode GetProduct, id adalah sebuah placeholder. Contoh anda dapat memperoleh product dengan ID=5, dengan memanggil URI api/products/5.

Setelah Web API dibuat, selanjutnya adalah bagaimana cara memanggil Web API menggunakan Javascript dan JQuery. Kita akan menambahkan sebuah halaman HTML yang menggunakan JQuery untuk membuat AJAX yang memanggil dan juga mengupdate halaman web dengan hasilnya.

Pada Solution Explorer, klik kanan project dan pilih Add, kemudian pilih New Item.
Pada dialog Add New Item, pilih node Web dibawah Visual C#, dan kemudian pilih item HTML Page. Beri nama page "index.html".


Copas script dibawah ini kedalam halaman code index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Product App</title>
</head>
<body>
  <div>
    <h2>All Products</h2>
    <ul id="products" />
  </div>
  <div>
    <h2>Search by ID</h2>
    <input type="text" id="prodId" size="5" />
    <input type="button" value="Search" onclick="find();" />
    <p id="product" />
  </div>

 <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
  <script>
    var uri = 'api/products';
    $(document).ready(function () {
      // Send an AJAX request
      $.getJSON(uri)
          .done(function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, item) {
              // Add a list item for the product.
              $('<li>', { text: formatItem(item) }).appendTo($('#products'));
            });
          });
    });

    function formatItem(item) {
      return item.Name + ': $' + item.Price;
    }
    function find() {
      var id = $('#prodId').val();
      $.getJSON(uri + '/' + id)
          .done(function (data) {            
           $('#product').text(formatItem(data));
          });
          .fail(function (jqXHR, textStatus, err) {
            $('#product').text('Error: ' + err);
          });
    }
  </script>
</body>
</html>

Ada banyak cara untuk memperoleh JQuery library. Pada contoh diatas saya menggunakan Microsoft Ajax CDN. Anda bisa juga mendownloadnya dari http://jquery.com/. Pada project template ASP.Net JQuery sudah dimasukan didalamnya.

Untuk memperoleh daftar produk, fungsi getJSON mengirim sebuah Ajax Request melalui HTTP GET. Dimana apiUrl pada parameter getJSON adalah string “/api/products” yang mewakili method GetAllProducts di Controller method. Request ini akan mengembalikan response object yang berisi array JSON. Fungsi done menangani response jika sukses, yang akan mengupdate object DOM di HTML dengan informasi product.
$(document).ready(function () {
    // Send an AJAX request
    $.getJSON(apiUrl)
        .done(function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, item) {
                // Add a list item for the product.
                $('<li>', { text: formatItem(item) }).appendTo($('#products'));
            });
        });
});

Untuk memperoleh produk dengan spesifikasi id, fungsi getJSON akan mengirimkan request dengan apiUrl "/api/products/id", yang mewakili GetProduct pada Controller Method. “id” pada apiUrl adalah id dari produk yang akan direquest.
function find() {
    var id = $('#prodId').val();
    $.getJSON(apiUrl + '/' + id)
        .done(function (data) {
            $('#product').text(formatItem(data));
        });
        .fail(function (jqXHR, textStatus, err) {
            $('#product').text('Error: ' + err);
        });
}

Sekarang jalankan aplikasi anda dengan menekan F5. Halaman web page akan tampil di IE browser anda dengan tampilan seperti berikut.


Untuk memperoleh Produk dengan spesifikasi id, masukan id kemudian tekan tombol Search.


Jika id tidak valid maka server akan mengembalikan respon dengan http error sebagai berikut.


Untuk melihat HTTP request dan response tekan F12. Pada tab Network pilih Start Capturing, kemudian kembali ke IE Browser anda reload page anda dengan menekan F5. Maka IE akan menangkap HTTP traffic antara browser dan web server.


Klik tombol Go to detailed view pilih tab Request Header disitu anda dapat melihat client merequest Application/json di baris Accept. Klik tombol Response body disitu anda akan melihat bagaimana daftar product di serialized ke dalam object array JSON.

Belajar LINQ dan Entity Framework(EF) di C#


Kali ini kita akan belajar bagaimana menggunakan LINQ untuk query data. Sebelum kita mulai, mari kita berkenalan dahulu dengan apa itu Entity Framework(EF) dan LINQ.


LINQ kepanjangan dari Language Integrated Query adalah keyword baru pada C# dan VB, ia terdapat pada .NET versi 3.5 ke atas. LINQ berupa query expression untuk memanipulasi data, anda dapat melakukan query ke berbagai macam data seperti ke database SQL Server (LINQ to SQL), ke object DataSet (LINQ to DataSet), ke entity (LINQ to Entity Framework), data XML (LINQ to XML) dan masih banyak lagi.
 
Entity Framework(EF) adalah ORM buatan Microsoft ia diluncurkan bersamaan dengan Microsoft Visual Studio 2010 dan .Net Framework versi 4.0. ORM itu sendiri adalah Object Relational Mapping, yaitu suatu alat yang digunakan untuk mapping objek-objek dalam database seperti tabel dan view menjadi class entity.
EF membantu mempercepat programmer dalam membangun sebuah aplikasi, karena ia akan membuatkan mapping objek-objek dalam database dan operasi dasar CRUD seperti insert, select, update dan delete secara otomatis.
Cukup sudah berkenalanya, sekarang kita langsung ke praktisnya bagaimana menggunakan kedua fitur tersebut. pada latihan ini saya menggunakan Visual Studio 2010 dan SQL server 2008 untuk databasenya. Pertama buka SQL Server anda buat database dengan nama Latihan1, selanjutnya buat table dengan nama Cars dengan struktur field sebagai berikut :


Struktur Table Cars
Buat field code sebagai primary key dengan identity specification adalah autoincrement.
Sekarang buka Visual Studio 2010 anda buat New Project pilih Windows Form Aplication, beri nama projek anda dengan nama Latihan1
 

 

Membuat Projek baru pada Visual Studio 2010
Pada Solusion Projek anda klik kanan Add Item, selanjutnya pilih ADO.Net Entity Data Model tekan tombol Add maka akan tampil jendela Entity Data Model Wizard, di jendela ini pilih Generate From Database kemudian klik tombol Next anda akan di pandu untuk membuat Connection String database untuk Model anda.

 
Jendela Connection String

Setelah membuat Connection String klik tombol Next kemudian centang table Cars dan klik tombol Finish. Build Projek anda dan saat ini anda sudah berhasil membuat class entity menggunakan EF.
 
Setelah Model selesai di buat saatnya untuk coding, buka Form1 di projek anda, beri nama header form-nya Latihan LINQ dan EF. Tambahkan komponen DataGridView ke Form dan empat Button ganti Properties Text-nya dengan nama masing-masing Refresh, Add, Update, Delete. 

Gambar Form1
 

Selanjutnya buat Form untuk entry data-nya dengan klik kanan Solusion Projek anda tambahkan Window Form. Ubah properties Text menjadi Entry Cars. Tambahkan empat komponen Label dan Textbox ke dalam Form serta satu Button. Ubah properties Text label-nya masing-masing Code, Merk, Type dan Made In. Ubah juga Properties name Textbok-nya masing-masing txtCode, txtMerk, txtType dan txtMade dan terakhir properties text untuk buttonya yaitu Save.


Gambar Form2 untuk Entry Cars


Kembali ke Form1 buka View Code untuk Form1, copas kode dibawah ini :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Latihan1
{
    public partial class Form1 : Form
    {
        //deklarasi class instan dari Latihan1Entity
        private Latihan1Entities ObjLatihan;
        public Form1( )
        {
            InitializeComponent();
            ObjLatihan = new Latihan1Entities();
            //binding dataGridView1 ke list Cars
            dataGridView1.DataSource = ObjLatihan.Cars.ToList();
        }
        //event untuk tombol Refresh
        private void button1_Click(object sender, EventArgs e)
        {
             dataGridView1.Refresh();   
        }
        //event untuk tombol Add
        private void button2_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.statusForm = 1;//flag untuk add data
            frm.ShowDialog();
        }
        //event untuk tombol update 
        private void button3_Click(object sender, EventArgs e)
        {
            int code = Convert.ToInt32(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value);
            Form2 frm = new Form2();
            frm.statusForm = 2;//flag untuk update data
            frm.code = code; // code car yang akan di edit
            frm.ShowDialog();
        }
    }
}

Pada View Code Form2 copas kode dibawah ini :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Latihan1
{
    public partial class Form2 : Form
    {
        private Latihan1Entities ObjLatihan;
        private Car car = new Car();
        public Form2( )
        {
            InitializeComponent();
            ObjLatihan = new Latihan1Entities();
            
        }
        //membuat properti untuk mode form(insert/update
        public byte statusForm
        {
            get;
            set;
        }
        //membuat properti untuk code car(jika mode-nya 1 nilainya null
        //jika mode-nya 2 maka berisi code Car
        public int code
        {
            get;
            set;
        }
        //event untuk tombol Save
        private void button1_Click(object sender, EventArgs e)
        {
           //mode Form 1 maka Add data
           //jika bukan satu maka update data 
            if (statusForm == 1)
            {
                car.merk = txtMerk.Text;
                car.type = txtType.Text;
                car.made = txtMade.Text;

               //menambah object car baru di EF
                ObjLatihan.Cars.AddObject(car);
               //perintah save perubahan di EF karena ada data
               //baru yang ditambahkan  
               ObjLatihan.SaveChanges();
            }
            else
            {
                
                car.merk = txtMerk.Text;
                car.type = txtType.Text;
                car.made = txtMade.Text;
                //perintah save di EF karena ada perubahan data
                ObjLatihan.SaveChanges();
 
            }
            this.Close();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            if (code!=0)
            {
                //lamda expersion di LINQ untuk select data berdasarkan code
                car = ObjLatihan.Cars.SingleOrDefault(x => x.code == code);
                txtCode.Text = car.code.ToString();
                txtMerk.Text = car.merk;
                txtType.Text = car.type;
                txtMade.Text = car.made;

            }
        }
    }
}

Build dan Run project anda, SELAMAT MENCOBA...

Konversi Numerik Keterbilang

Seringkali kita menemukan di invoice, kwitansi atau surat bukti pembayaran lainnya. Nominal uang disamping ditulis dalam angka numerik juga ditulis dalam format terbilang. Misal 1.250.000,00 ditulis dalam format terbilang 'satu juta dua ratus lima puluh ribu rupiah'.

Untuk menyelesaikan masalah diatas berikut adalah sebuah modul program konversi terbilang menggunakan VB.Net.


Module ModTerbilang

Public Function TerbilangIndonesia(ByVal InputCurrency As String, _
Optional ByVal MataUang As String = "rupiah") As String
Dim strInput As String
Dim strBilangan As String
Dim strPecahan As String
On Error GoTo Pesan
Dim strValid As String
Dim huruf As String
Dim i As Integer
Dim AngkaTerbilang As String
'Periksa setiap karakter yg diketikkan ke kotak UserID
strValid = "1234567890."
For i% = 1 To Len(InputCurrency)
huruf = Chr(Asc(Mid(InputCurrency, i%, 1)))
If InStr(strValid, huruf) = 0 Then
AngkaTerbilang = Nothing
MsgBox("Harus karakter angka!", _
vbCritical, "Karakter Tidak Valid")

End If
Next i%

If InputCurrency = "" Then

End If
If Len(Trim(InputCurrency)) > 15 Then GoTo Pesan

strInput = CStr(InputCurrency) 'Konversi ke string
'Periksa apakah ada tanda "," jika ya berarti pecahan
If InStr(1, strInput, ".", vbBinaryCompare) Then

strBilangan = Left(strInput, InStr(1, strInput, ".", vbBinaryCompare) - 1)
'strBilangan = Right(strInput, InStr(1, strInput, ".", vbBinaryCompare) - 2)
strPecahan = Trim(Right(strInput, Len(strInput) - Len(strBilangan) - 1))

If MataUang <> "" Then

'- Mengatasi kemungkinan adanya nilai sen yang > 99 atau
' memiliki digit pecahan lebih dari 2 digit, maka pecahan
' tersebut dibulatkan ke kelipatan terdekat sebanyak 2 digit.
' Contoh: TerbilangDesimal("20,599") -> menampilkan MataUang
' dibulatkan menjadi: 20,60 -> dibaca menjadi:
' "Dua Puluh Rupiah Enam Puluh Sen" dan BUKAN:
' "Dua Puluh Rupiah Enam Sen".
' Hal ini berlaku hanya yg menampilkan MataUang.
If CLng(Trim(strPecahan)) > 99 Then
strInput = Format(Math.Round(CDbl(strInput), 2), "#0.00")
strPecahan = Format((Right(strInput, Len(strInput) - Len(strBilangan) - 1)), "00")
End If

'- Mengatasi kemungkinan jumlah digit sen yang hanya 1 angka.
' maka pecahan tersebut harus ditambahkan dengan nol virtual.
' Contoh: TerbilangDesimal("20,5") -> menampilkan MataUang
' dibulatkan menjadi: 20,5 -> dibaca menjadi:
' "Dua Puluh Rupiah Lima Puluh Sen" dan BUKAN:
' "Dua Puluh Rupiah Lima Sen".
' Hal ini berlaku hanya yg menampilkan MataUang.
If Len(Trim(strPecahan)) = 1 Then
strInput = Format(Math.Round(CDbl(strInput), 2), "#0.00")
strPecahan = Format((Right(strInput, Len(strInput) - Len(strBilangan) - 1)), "00")
End If

'Yang ini ditutup, untuk memperbaiki ejaan sesudah tanda
'koma (pecahan)...
'TerbilangDesimal = (KonversiBilangan(strBilangan) & "koma " & KonversiBilangan(strPecahan) & "rupiah")

'-------------------------------------------------------
'- Membetulkan ejaan untuk bilangan setelah tanda koma,
' sebelumnya menggunakan KonversiBilangan, kini memakai
' KonversiPecahan (setiap 1 angka dibaca satu per satu)
'- Membuat parameter "MataUang" yg bersifat opsional,
' di mana default-nya = "rupiah". Jika parameter ini
' dikosongkan dengan "" maka kata "rupiah" tidak muncul.

'- Menangani kemungkinan ejaan sen jika menggunakan
' mata uang rupiah, di mana nilai sen harus di antara
' mulai 1 dan 99. (Kemungkinan I)
' Contoh: TerbilangDesimal("20,99")
' "Dua Puluh Rupiah Sembilan Puluh Sembilan Sen".
'- Menangani kemungkinan ejaan desimal tanpa menggunakan
' mata uang rupiah, di mana nilai desimal dieja per satu
' karakter. (Kemungkinan II)
' Contoh: TerbilangDesimal("20,99", "")
' "Dua Puluh Koma Sembilan Sembilan")

'BANDINGKAN Kemungkinan I dan Kemungkinan II...

'MULAI PERIKSA >>>>>>
'Jika tanpa parameter MataUang (default), berarti akan
'menampilkan kata "Rupiah" dan perhatikan pula penanganan
'ejaan untuk sen. Lihat contoh Kemungkinan I di atas...

'Periksa lagi kemungkinan adanya angka: 20,00
'seharusnya: "Dua Puluh Rupiah"
' dan BUKAN "Dua Puluh Rupiah Sen"
'Jika pemeriksaan berikut ini tidak ada, maka 20,00
'akan dibaca dengan: "Dua Puluh Rupiah Sen"
If CLng(Trim(strPecahan)) = 0 Then
TerbilangIndonesia = (KonversiBilangan(strBilangan) & MataUang & " " & KonversiBilangan(strPecahan))
Else
TerbilangIndonesia = (KonversiBilangan(strBilangan) & MataUang & " " & KonversiBilangan(strPecahan) & "sen")
End If
Else
TerbilangIndonesia = (KonversiBilangan(strBilangan) & "koma " & KonversiPecahan(strPecahan))
End If

Else

TerbilangIndonesia = (KonversiBilangan(strInput))

End If
Exit Function
Pesan:
TerbilangIndonesia = "(maksimal 15 digit)"
End Function



Private Function KonversiPecahan(ByVal strAngka As String) As String
Dim i%, strJmlHuruf$, Urai$, Kar$
If strAngka = "" Then
KonversiPecahan = ""
End If
strJmlHuruf = Trim(strAngka)
Urai = ""
Kar = ""
For i = 1 To Len(strJmlHuruf)
'Tampung setiap satu karakter ke Kar
Kar = Mid(strAngka, i, 1)
Urai = Urai & Kata(CInt(Kar))
Next i
KonversiPecahan = Urai
End Function

Private Function Kata(ByVal angka As Byte) As String

Dim kata1 As String = ""
Select Case angka
Case 1 : kata1 = "satu "
Case 2 : kata1 = "dua "
Case 3 : kata1 = "tiga "
Case 4 : kata1 = "empat "
Case 5 : kata1 = "lima "
Case 6 : kata1 = "enam "
Case 7 : kata1 = "tujuh "
Case 8 : kata1 = "delapan "
Case 9 : kata1 = "sembilan "
Case 0 : kata1 = "nol "
End Select
Return kata1
End Function

Private Function KonversiBilangan(ByVal strAngka As String) As String
Dim strJmlHuruf As String
Dim intPecahan As Integer = 0
Dim strPecahan As String = ""
Dim Urai As String = ""
Dim Bil1 As String = ""
Dim strTot As String = ""
Dim Bil2 As String = ""
Dim X, Y, z As Integer

If strAngka = "" Then
KonversiBilangan = ""
End If

strJmlHuruf = Trim(strAngka)
X = 0
Y = 0
Urai = ""
While
 (X < x =" X" strtot =" Mid(strJmlHuruf," y =" Y" z =" 
Len(strJmlHuruf)" bil1 = "NOL " z =" 1" z =" 7" z =" 10" z =" 13)" bil1 =
 "satu " z =" 4)" x =" 1)" bil1 = "se" bil1 = "satu " z =" 2" z =" 5" z 
=" 8" z =" 11" z =" 14)" x =" X" strtot =" Mid(strJmlHuruf," z =" 
Len(strJmlHuruf)" bil2 = "" bil1 = "sepuluh " bil1 = "sebelas " bil1 = 
"dua belas " bil1 = "tiga belas " bil1 = "empat belas " bil1 = "lima 
belas " bil1 = "enam belas " bil1 = "tujuh belas " bil1 = "delapan belas
 " bil1 = "sembilan belas " bil1 = "se" bil1 = "dua " bil1 = "tiga " 
bil1 = "empat " bil1 = "lima " bil1 = "enam " bil1 = "tujuh " bil1 = 
"delapan " bil1 = "sembilan " bil1 = ""> 0) Then
If (z = 2 Or z = 5 Or z = 8 Or z = 11 Or z = 14) Then
Bil2 = "puluh "
ElseIf (z = 3 Or z = 6 Or z = 9 Or z = 12 Or z = 15) Then
Bil2 = "ratus "
Else
Bil2 = ""
End If
Else
Bil2 = ""
End If
If (Y > 0) Then
Select Case z
Case 4
Bil2 = Bil2 + "ribu "
Y = 0
Case 7
Bil2 = Bil2 + "juta "
Y = 0
Case 10
Bil2 = Bil2 + "milyar "
Y = 0
Case 13
Bil2 = Bil2 + "trilyun "
Y = 0
End Select
End If
Urai = Urai + Bil1 + Bil2
End While
KonversiBilangan = Urai
End Function

Private Function SpellDigit(ByVal strNumeric As Integer)
Dim cRet As String
On Error GoTo Pesan
cRet = ""
Select Case strNumeric
Case 0 : cRet = " zero"
Case 1 : cRet = " one"
Case 2 : cRet = " two"
Case 3 : cRet = " three"
Case 4 : cRet = " four"
Case 5 : cRet = " five"
Case 6 : cRet = " six"
Case 7 : cRet = " seven"
Case 8 : cRet = " eight"
Case 9 : cRet = " nine"
Case 10 : cRet = " ten"
Case 11 : cRet = " eleven"
Case 12 : cRet = " twelve"
Case 13 : cRet = " thirteen"
Case 14 : cRet = " fourteen"
Case 15 : cRet = " fifteen"
Case 16 : cRet = " sixteen"
Case 17 : cRet = " seventeen"
Case 18 : cRet = " eighteen"
Case 19 : cRet = " ninetieen"
Case 20 : cRet = " twenty"
Case 30 : cRet = " thirty"
Case 40 : cRet = " fourthy"
Case 50 : cRet = " fifty"
Case 60 : cRet = " sixty"
Case 70 : cRet = " seventy"
Case 80 : cRet = " eighty"
Case 90 : cRet = " ninety"
Case 100 : cRet = " one hundred"
Case 200 : cRet = " two hundred"
Case 300 : cRet = " three hundred"
Case 400 : cRet = " four hundred"
Case 500 : cRet = " five hundred"
Case 600 : cRet = " six hundred"
Case 700 : cRet = " seven hundred"
Case 800 : cRet = " eight hundred"
Case 900 : cRet = " nine hundred"
End Select
SpellDigit = cRet
Exit Function
Pesan:
SpellDigit = "(maksimal 9 digit)"
End Function

Private Function SpellUnit(ByVal strNumeric As Integer)
Dim cRet As String
Dim n100 As Integer
Dim n10 As Integer
Dim n1 As Integer
On Error GoTo Pesan
cRet = ""
n100 = Int(strNumeric / 100) * 100
n10 = Int((strNumeric - n100) / 10) * 10
n1 = (strNumeric - n100 - n10)
If n100 > 0 Then
cRet = SpellDigit(n100)
End If
If n10 > 0 Then
If n10 = 10 Then
cRet = cRet & SpellDigit(n10 + n1)
Else
cRet = cRet & SpellDigit(n10)
End If
End If
If n1 > 0 And n10 <> 10 Then
cRet = cRet & SpellDigit(n1)
End If
SpellUnit = cRet
Exit Function
Pesan:
SpellUnit = "(maksimal 9 digit)"
End Function

Public Function TerbilangInggris(ByVal strNumeric As String) As String
Dim cRet As String
Dim n1000000 As Long
Dim n1000 As Long
Dim n1 As Integer
Dim n0 As Integer
On Error GoTo Pesan
Dim strValid As String = ""
Dim huruf As String = ""
Dim i As Integer
'Periksa setiap karakter masukan
strValid = "1234567890.,"
For i% = 1 To Len(strNumeric)
huruf = Chr(Asc(Mid(strNumeric, i%, 1)))
If InStr(strValid, huruf) = 0 Then
MsgBox("Harus karakter angka!", _
vbCritical, "Karakter Tidak Valid")
TerbilangInggris = ""
End If
Next i%

If strNumeric = "" Then
TerbilangInggris = ""
End If
If Len(Trim(strNumeric)) > 9 Then GoTo Pesan

cRet = ""
n1000000 = Int(strNumeric / 1000000) * 1000000
n1000 = Int((strNumeric - n1000000) / 1000) * 1000
n1 = Int(strNumeric - n1000000 - n1000)
n0 = (strNumeric - n1000000 - n1000 - n1) * 100
If n1000000 > 0 Then
cRet = SpellUnit(n1000000 / 1000000) & " million"
End If
If n1000 > 0 Then
cRet = cRet & SpellUnit(n1000 / 1000) & " thousand"
End If
If n1 > 0 Then
cRet = cRet & SpellUnit(n1)
End If
If n0 > 0 Then
cRet = cRet & " and cents" & SpellUnit(n0)
End If
TerbilangInggris = cRet & " only"
Exit Function
Pesan:
TerbilangInggris = "(maximum 9 digit)"
End Function

End Module