This blog has moved to http://ikhwanhayat.net

Monday, July 19, 2004

Petualangan .NET: Insert dgn Unique Column

Ini adalah contoh untuk memasukkan data di dalam database dalam satu aplikasi web ASP.NET menggunakan Ms SQL Server. Dalam contoh ini, kita akan memasukkan ke data ke dalam table department yang mempunyai column dept_id dan dept_name. dept_id adalah Primary Key. dept_name adalah nama department tersebut, dan tidak boleh berulang. department

Dim count As Integer
Dim deptName As String = TextBox1.Text

Dim sqlCount As New SqlCommand("SELECT COUNT(*) _
 » FROM department WHERE dept_name=@dept_name", _
 » Conn)
sqlCount.Parameters.Add("@dept_name", _
 » SqlDbType.VarChar, 50).Value = deptName

Dim sqlInsert As New SqlCommand("INSERT INTO _
 » department(dept_name) VALUES (@dept_name)", Conn)
sqlInsert.Parameters.Add("@dept_name", _
 » SqlDbType.VarChar, 50).Value = deptName

Conn.Open()
 
' Kita perlu uji sama ada sudah wujud department 
' dengan nama  sama seperti yang diinput . count 
' akan meyimpan hasil dari query count, iaitu 
' memulangkan jumlah row yang mempunyai 
' dept_name = deptName
count = sqlCount.ExecuteScalar()
If count > 0 Then
    Label1.Text = "Department " + deptName + _
     » " already exist!"

'jika tiada barulah kita laksanakan query insert
Else
    sqlInsert.ExecuteNonQuery()
    Label1.Text = "Department " + deptName + _
     » " added tor record."
End If

Conn.Close()
Tetapi melalui cara ini, kita perlu melakukan dua round-trip ke SQL Server, satu untuk COUNT dan satu lagi untuk INSERT. Cara alternatif berikut dapat menjimatkan satu round-trip iaitu dengan mengeset column dept_name sebagai UNIQUE di dalam Ms SQL. Caranya (dipetik dari help file Ms SQL) adalah berikut:
  1. Open the Table Designer for the table that will contain the constraint, right-click in the Table Designer, and choose Properties from the shortcut menu.
  2. Choose the Indexes/Keys tab.
  3. Choose New. A system-assigned name appears in the Index name box.
  4. Under Column name, expand the list of columns and select the column that you want to attach the constraint to. To attach the constraint to multiple columns, select the additional columns in subsequent rows.
  5. Select the Create UNIQUE check box.
  6. Select the Constraint option.
Kemudian kita ubah code di atas menjadi :
Dim sqlInsert As New SqlCommand("INSERT INTO _
 » department(dept_name) VALUES (@dept_name)", Conn)
sqlInsert.Parameters.Add("@dept_name", _
 » SqlDbType.VarChar, 50).Value = newDept

Try
    Conn.Open()
    sqlInsert.ExecuteNonQuery()
    Label1.Text = "Department " + dept_name + _
     » " added successfully."
   
' Oleh kerana kita telah set dept_name sebagai 
' UNIQUE, maka jika user cuba menginput 
' dept_name yang berulang akan terhasil exception.
Catch ex As SqlClient.SqlException
    ' 2627 ialah error number bagi violation of 
    ' constraint. Anda boleh merujuk kandungan 
    ' table master.dbo.sysmessages didalam 
    ' server Ms SQL untuk senarai error msg
    If ex.Number = 2627 Then
        Label1.Text = "Designation " + _
         » desig_name + " already exist!"
    Else
        ' Jika ada error lain
        Label1.Text = "Error in database _
         » transaction!"
    End If
Finally
    Conn.Close()
End Try

0 Comments:

Post a Comment

<< Home