Object Command Builder merupakan salah satu komponen yang termasuk ke dalam ado.net data provider. Komponen ini dapat digunakan untuk generate command text secara run time terhadap sebuah Data Adapter yang melakukan query tertentu. Command tersebut dapat berupa command text yang di perlukan untuk update semua perubahan data yang terjadi di dalam sebuah dataset, data table atau data row collection.
Selain itu object command builder dapat juga digunakan untuk populate parameter parameter yang digunakan dalam sebuah stored procedure. Hal tersebut dapat dilakukan karena adanya method DeriveParameters. Secara code method tsb memerlukan input parameter berupa object Command yang akan digunakan untuk eksekusi stored procedure. Parameter yang digunakan dalam stored procedure tsb di retrieve dengan melakukan looping parameter terhadap Parameter Collection object command.
Dengan method DeriveParameter kita dapat membuat sebuah class helper yang digunakan untuk passing query berupa stored procedure yang berparameter, dan informasi parameter tsb di generate secara runtime. Developer hanya cukup melakukan passing value nya saja, dan sudah pasti kita harus tahu urutan-urutan dari parameter tsb tentunya. Di bawah ini saya berikan contohnya, dengan asumsi saya punya sebuah stored procedure di database northwind untuk insert ke table customers hanya untuk kolom customerid, dan companyname saja. Iterasi looping counternya saya mulai dari satu, karena parameter yang pertama berupa return value, dan disini saya tidak akan gunakan return value tsb.
1: CREATE PROCEDURE InsertCustomers
2: @id nchar(5),@name nvarchar(40)
3: AS
4: Insert Into Customers (CustomerID,CompanyName)
5: Values (@id,@name)
Code :
1: Imports System.Data.SqlClient
2:
3: Public Class DeriveParametersHelper
4: Public Sub GetStoredProcedure(ByVal StoredProcName As String, _
5: ByVal ConnectionString As String, ByVal ParamValue() As Object)
6:
7: Using sqlConn As New SqlConnection(ConnectionString)
8: Using SqlCmd As New SqlCommand(StoredProcName, _
9: sqlConn)
10: SqlCmd.CommandType = CommandType.StoredProcedure
11: If sqlConn.State <> ConnectionState.Open Then _
12: sqlConn.Open()
13:
14: SqlCommandBuilder.DeriveParameters(SqlCmd)
15:
16: For i As Integer = 1 To SqlCmd.Parameters.Count - 1
17: SqlCmd.Parameters(i).Value = ParamValue(i - 1)
18: Next
19: SqlCmd.ExecuteNonQuery()
20: End Using
21: End Using
22:
23: End Sub
24: End Class
Implementasi :
1: Module Module1
2: Sub Main()
3: Dim execQuery As New DeriveParametersHelper
4: Try
5: execQuery.GetStoredProcedure("InsertCustomers", _
6: "database=northwind2k5;server=.\sqldev2k5;" & _
7: "integrated security=true", _
8: New Object() {"Roel", "Roel corp"})
9:
10: Console.WriteLine("Data has been inserted")
11: Console.Write("Press any key to exit")
12: Console.ReadLine()
13: Catch ex As Exception
14: Console.WriteLine(ex.Message)
15: Console.Write("Press any key to exit")
16: Console.ReadLine()
17: End Try
18: End Sub
19: End Module