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:
Isikan beberapa data sample kedalam table tersebut:
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
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 ^_^
terima kasih banyak ya mas…di tunggu mas buku2 lainnya,,,
^___^
sama-sama :)
mas ada cara lain ngak kalo kita mau tampilin query seperti linq to sql tapi mengunakan accses??karna saya pake accses ni…
kalau pakai access setahu saya tidak ada providernya mba untuk LINQ, kalau pake db server yg lain seperti mysql, postgree atau oracle bisa menggunakan EF (Entity Framework)
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…^___^