ASP.NET Tips: Primary Key Validation

Posting ini dibuat berdasarkan request dari Dewi Thursina yang mengirimkan email berikut:

pertama saya inggin berterima kasih kepada mas erick, karna buku asp.net 3,5
sangat membantu saya dalam pembuatan TA saya, tapi mas saya mau tanya mengenai
bab 4 validation control, gmna cara jika kita menginsert satu data mis: tabel
kategori dengan id_kat kita insert dengan primary key yang sama, sehingga ada
pesan bahwa id_kat tersebut telah ada,,
terima kasih atas perhatiaanya, saya sangat mengharapkan bantuaan,,di tunggu
mas…^___^

Untuk menangkap error yang dikarenakan duplikasi terhadap Primary Key yang ada pada table anda dapat menggunakan 2 cara yaitu:

  • Tangkap Error pada saat event Inserted di SqlDataSource Control
  • Menggunakan Try..Catch Exception saat menjalankan perintah insert() di SqlDataSource control

Pertama Buat database contoh dengan nama “SampleDb.mdf”, buat table “Mahasiswa” berikut:

image 

Isikan beberapa data sample kedalam table tersebut:

image

Untuk cara yang pertama, buat WebForm baru dengan nama “WithSqlDataSource.aspx”, masukan SqlDataSource dan DetailsView.

<form id="form1" runat="server">

    <div>

        <asp:SqlDataSource ID="sdsMahasiswa" runat="server" 

            ConnectionString="<%$ ConnectionStrings:SampleConnectionString %>" 

            DeleteCommand="DELETE FROM [mahasiswa] WHERE [nim] = @nim" 

            InsertCommand="INSERT INTO [mahasiswa] ([nim], [nama]) VALUES (@nim, @nama)" 

            SelectCommand="SELECT [nim], [nama] FROM [mahasiswa]" 

            UpdateCommand="UPDATE [mahasiswa] SET [nama] = @nama WHERE [nim] = @nim" 

            oninserted="sdsMahasiswa_Inserted">

            <DeleteParameters>

                <asp:Parameter Name="nim" Type="String" />

            </DeleteParameters>

            <InsertParameters>

                <asp:Parameter Name="nim" Type="String" />

                <asp:Parameter Name="nama" Type="String" />

            </InsertParameters>

            <UpdateParameters>

                <asp:Parameter Name="nama" Type="String" />

                <asp:Parameter Name="nim" Type="String" />

            </UpdateParameters>

        </asp:SqlDataSource>

    </div>

    <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 

        DataKeyNames="nim" DataSourceID="sdsMahasiswa" DefaultMode="Insert" 

        Height="50px" style="margin-right: 0px" Width="125px">

        <Fields>

            <asp:BoundField DataField="nim" HeaderText="nim" ReadOnly="True" 

                SortExpression="nim" />

            <asp:BoundField DataField="nama" HeaderText="nama" SortExpression="nama" />

            <asp:CommandField ShowInsertButton="True" />

        </Fields>

    </asp:DetailsView>

    <asp:Literal runat="server" ID="ltKeterangan" />

    </form>

Kemudian tambahkan kode berikut pada event Inserted di SqlDataSource

protected void sdsMahasiswa_Inserted(object sender, SqlDataSourceStatusEventArgs e)

   {

       if (e.Exception != null)

       {

           ltKeterangan.Text = e.Exception.Message;

           e.ExceptionHandled = true;

       }

   }

Jika dimasukan data yang sama

image

Untuk cara yang kedua, buat WebForm dengan nama “Specific.aspx” kemudian tambahkan sqldatasource, textbox, dan button kedalam halaman

<fieldset>

        Nim :<br />

        <asp:TextBox runat="server" ID="txtNim" /><br /><br />

        Nama :<br />

        <asp:TextBox runat="server" ID="txtNama" /><br /><br />

        <asp:Button runat="server" ID="btnSubmit" Text="Submit" 

            onclick="btnSubmit_Click" />

        <hr />

        <asp:Label ID="lblKet" runat="server" EnableViewState="false" />

 

         <asp:SqlDataSource ID="sdsMahasiswa" runat="server" 

            ConnectionString="<%$ ConnectionStrings:SampleConnectionString %>" 

            DeleteCommand="DELETE FROM [mahasiswa] WHERE [nim] = @nim" 

            InsertCommand="INSERT INTO [mahasiswa] ([nim], [nama]) VALUES (@nim, @nama)" 

            SelectCommand="SELECT [nim], [nama] FROM [mahasiswa]" 

            UpdateCommand="UPDATE [mahasiswa] SET [nama] = @nama WHERE [nim] = @nim">

            <DeleteParameters>

                <asp:Parameter Name="nim" Type="String" />

            </DeleteParameters>

            <InsertParameters>

                <asp:Parameter Name="nim" Type="String" />

                <asp:Parameter Name="nama" Type="String" />

            </InsertParameters>

            <UpdateParameters>

                <asp:Parameter Name="nama" Type="String" />

                <asp:Parameter Name="nim" Type="String" />

            </UpdateParameters>

        </asp:SqlDataSource>

    </fieldset>

Pada saat tombol Submit ditekan tambahkan kode berikut:

protected void btnSubmit_Click(object sender, EventArgs e)

   {

       try

       {

           sdsMahasiswa.InsertParameters[0].DefaultValue = txtNim.Text;

           sdsMahasiswa.InsertParameters[1].DefaultValue = txtNama.Text;

           sdsMahasiswa.Insert();

           lblKet.Text = "Data berhasil ditambah";

       }

       catch (System.Data.SqlClient.SqlException sEx)

       {

           if (sEx.Number == 2627)

               lblKet.Text = "Error : Nim Sudah ada masukan yang lain";

           else

               lblKet.Text = "Error :" + sEx.Message;

       }

   }

Untuk mengetahui error secara spesifik (karena error yang mungkin terjadi banyak) maka kita bisa menggunakan try catch pada saat perintah insert() dijalankan. jika terjadi duplikasi PK maka akan terjadi eksepsi dengan error number “2627” (Untuk error yang lain nomornya berbeda). Jika anda sudah tahu number errornya maka anda dapat menambahkan pesan spesifik untuk error itu.

kode dari sample diatas dapat didownload disini.

Semoga Membantu, Happy Coding ^_^

5 thoughts on “ASP.NET Tips: Primary Key Validation

  1. mas ada cara lain ngak kalo kita mau tampilin query seperti linq to sql tapi mengunakan accses??karna saya pake accses ni…

  2. ya mas, saya udah beralih ke ms sql server,,tapi mas kalo kita pakai update dan delete mengunakan linqDatasource dengan Gridview, ada data yang kosong bagaimana cara menghandle nya?, begitu pula dengan insert data yang duplicatenya??maaf mas banyak nanya,,

    di tunggu mas jawabanya…^___^

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s