Membuat Class Untuk Akses Database Di ASP.net

Ada beberapa metode yang bisa digunakan untuk mengakses database. Mulai dari ADO.net, menggunakan strong-type dataset, atau LINQ. Kali ini saya mencoba membuat class untuk mengakses database menggunakan ADO.net. Tentu saja, cara yang saya lakukan mungkin bukan cara yang terbaik. Tapi setidaknya, bisa memberikan gambaran bagaimana menggunakan ADO.net.

Saya menggunakan class SQLClient, untuk mengakses tabel ‘products’ dari database ‘Nortwind’. Saya membuat class ProductSQL yang terdiri dari lima method.

  • GetProduct() : mendapatkan semua isi dari tabel products
  • GetProductByCategoryID : mendapatkan isi dari tabel products, berdasarkan category id.
  • AddProduct : menambahkan data product baru
  • DeleteProductByID : menghapus produk berdasarkan product id
  • Dispose() : membersihkan resource memory.

Seleksi Data
Buat file ProductSQL.vb

Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient

Public Class ProductSQL
    Implements IDisposable
	
    Private conn As SqlConnection
    Private cmd As SqlCommand
    Private dtAdapter As SqlDataAdapter
    Private dtProduct As DataTable
    Private param As SqlParameter

    Public Sub New()
        conn = New SqlConnection(KoneksiString())
        cmd = New SqlCommand()
        dtAdapter = New SqlDataAdapter()
        dtProduct = New DataTable
        conn.Open()
    End Sub

    Private ReadOnly Property KoneksiString() As String
        Get
            Return ConfigurationManager.ConnectionStrings.Item("NorthwindConnectionString").ToString()
        End Get
    End Property

    Public Function GetProduct() As DataTable
        Dim kueri As String = "select * from products"
        cmd.Connection = conn
        cmd.CommandText = kueri
        dtAdapter.SelectCommand = cmd
        dtProduct = New DataTable
        dtAdapter.Fill(dtProduct)
        Return dtProduct
    End Function	
	
    Public Function GetProductByCategoryID(ByVal categoryid As Integer) As DataTable
        cmd.Connection = conn
        cmd.CommandText = "select * from products where categoryID = " & categoryid
        dtAdapter.SelectCommand = cmd
        dtProduct = New DataTable
        dtAdapter.Fill(dtProduct)
        Return dtProduct
    End Function
	
    Private disposedValue As Boolean = False        ' To detect redundant calls
    ' IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                If conn.State = ConnectionState.Open Then
                    conn.Close()
                End If
                cmd.Dispose()
                dtAdapter.Dispose()
                dtProduct.Dispose()
            End If

            ' TODO: free your own state (unmanaged objects).
            ' TODO: set large fields to null.
        End If
        Me.disposedValue = True
    End Sub

#Region " IDisposable Support "
    ' This code added by Visual Basic to correctly implement the disposable pattern.
    Public Sub Dispose() Implements IDisposable.Dispose
        ' Do not change this code.  Put cleanup code in Dispose(ByVal disposing As Boolean) above.
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region
End Class

Method GetProduct dan GetProductByCategoryID mempunyai fungsi yang sama, membaca data dan mengembalikan dalam bentuk datatable. Ketika inisialisasi, kita mendefinisikan koneksi, sqlConnection, sqlCommand, DataAdapter dan DataTable. Semua ini dilakukan di method constructor (sub New()). Setelah data selesai dibaca dan dikembalikan. Bersihkan semua resource dengan menjalankan method Dispose(). Disini saya menggunakan inteface IDisposable.

Contoh penerapan:

Dim product As New ProductSQL()
GridView1.DataSource = product.GetProduct()
GridView1.DataBind()

GridView3.DataSource = product.GetProductByCategoryID(1)
GridView3.DataBind()
product.Dispose()

Menambahkan Data Baru

Method AddProduct membutuhkan beberapa parameter sesuai dengan kolom-kolom yang ada pada tabel Products.

Perhatikan desain dari tabel products. Ada beberapa kolom yang dapat menerima nilai NULL seperti SupplierID dan CategoryID. Jika tidak ada nilai parameter yang dimasukkan oleh user, maka perlu dievaluasi nilainya. Karena NULL itu tidak sama dengan 0 dan juga tidak sama dengan ” “. Jadi NULL bukan 0 dan juga bukan ” “.

Tambahkan method AddProduct di class ProductSQL. Di kolom tertentu, lakukan pemeriksaan, apakah ada data yang dimasukkan ke parameter, jika tidak, maka dianggap NULL.

Public Function AddProduct(ByVal productName As String, ByVal supplierid As Nullable(Of Integer), _
                            ByVal categoryId As Nullable(Of Integer), ByVal quantityPerUnit As String, _
                            ByVal unitPrice As Nullable(Of Decimal), ByVal unitInStock As Nullable(Of Short), _
                            ByVal unitInOrder As Nullable(Of Short), ByVal reorderLevel As Nullable(Of Short), _
                            ByVal discontinued As Boolean) As Boolean
    Dim kueri As String = "INSERT INTO [Products] ([ProductName], [SupplierID], " & _
                          "[CategoryID], [QuantityPerUnit], [UnitPrice], [UnitsInStock], " & _
                          "[UnitsOnOrder], [ReorderLevel], [Discontinued]) VALUES " & _
                          "(@ProductName, @SupplierID, @CategoryID, @QuantityPerUnit, " & _
                          "@UnitPrice, @UnitsInStock, @UnitsOnOrder, @ReorderLevel, @Discontinued)"
    cmd.Connection = conn
    cmd.CommandText = kueri
    param = New SqlParameter()
    param.ParameterName = "@ProductName"
    param.Value = productName
    cmd.Parameters.Add(param)

    param = New SqlParameter()
    param.ParameterName = "@SupplierID"
    If Not supplierid.HasValue Then
        param.Value = DBNull.Value
    Else
        param.Value = supplierid.Value
    End If
    cmd.Parameters.Add(param)

    param = New SqlParameter()
    param.ParameterName = "@CategoryID"
    If Not categoryId.HasValue Then
        param.Value = DBNull.Value
    Else
        param.Value = categoryId.Value
    End If
    cmd.Parameters.Add(param)

    param = New SqlParameter()
    param.ParameterName = "@QuantityPerUnit"
    If quantityPerUnit Is Nothing Then
        param.Value = DBNull.Value
    Else
        param.Value = quantityPerUnit
    End If
    cmd.Parameters.Add(param)

    param = New SqlParameter()
    param.ParameterName = "@UnitPrice"
    If Not unitPrice.HasValue Then
        param.Value = DBNull.Value
    Else
        param.Value = unitPrice.Value
    End If
    cmd.Parameters.Add(param)

    param = New SqlParameter()
    param.ParameterName = "@UnitsInStock"
    If Not unitInStock.HasValue Then
        param.Value = DBNull.Value
    Else
        param.Value = unitInStock.Value
    End If
    cmd.Parameters.Add(param)

    param = New SqlParameter()
    param.ParameterName = "@UnitsOnOrder"
    If Not unitInOrder.HasValue Then
        param.Value = DBNull.Value
    Else
        param.Value = unitInOrder.Value
    End If
    cmd.Parameters.Add(param)

    param = New SqlParameter()
    param.ParameterName = "@ReorderLevel"
    If Not reorderLevel.HasValue Then
        param.Value = DBNull.Value
    Else
        param.Value = reorderLevel.Value
    End If
    cmd.Parameters.Add(param)

    param = New SqlParameter()
    param.ParameterName = "@Discontinued"
    param.Value = discontinued
    cmd.Parameters.Add(param)

    Dim rowAdded As Integer = cmd.ExecuteNonQuery()
    Return rowAdded = 1
End Function

Contoh penerapan:

'=== nambah data
Dim nambahdata As New ProductSQL()
Dim sukses As Boolean = nambahdata.AddProduct("KATOK", 1, 1, 10, 1000, Nothing, Nothing, 1, False)
Response.Write(sukses.ToString)
nambahdata.Dispose()

Method AddProduct mengembalikan nilai boolean. Jika baris baru berhasil ditambahkan ke database maka, akan menghasilkan nilai TRUE, jika proses gagal, menghasilkan nilai FALSE. Method diatas dapat juga diterapkan untuk melakukan updating data yang ada di database.

Menghapus Data

Proses penghapusan data juga mengembalikan nilai boolean. Jika proses penghapusan berhasil, dikembalikan nilai TRUE.
Tambahkan method berikut di dalam class ProductSQL

Public Function DeleteProductByID(ByVal productid As Integer) As Boolean
    cmd.Connection = conn
    cmd.CommandText = "DELETE FROM [Products] WHERE (([ProductID] = @Original_ProductID))"
    param = New SqlParameter()
    param.ParameterName = "@Original_ProductID"
    param.Value = productid
    cmd.Parameters.Add(param)

    Dim rowDeleted As Integer = cmd.ExecuteNonQuery()
    Return rowDeleted = 1
End Function

Contoh penerapan:

Dim Datadidel As New ProductSQL()
Dim sukses As Boolean = Datadidel.DeleteProductByID(78)
Datadidel.Dispose()
Response.Write("Proses hapus:" & sukses.ToString)

Apa yang saya tulis disini, masih jauh dari sempurna. Masih banyak hal mengenai metode akses ke database yang tidak dijelaskan. Selamat mencoba.

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 8 Februari 2010, in ADO.net, ASP.net and tagged , , , , . Bookmark the permalink. 4 Komentar.

  1. makasih om wat info ny,..
    ni Qjg lg belajar VB,.. so infony sangat membantu,,.

  2. thanks kawan atas infonya menarik sekali apalagi sekarang saya baru belajar dan butuh sekali banyak informasi.

  3. makasih bro atas sharing2nya, sangat membantu nih buat ngerjain tugas hehee

    ” schaerdz “

  4. kk, ada source lengkapnya ga ? heheh biar lebih mudah😳 thx

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: