Yah saya adalah monyet kode klien yang banyak berurusan dengan database. Inilah cara saya menanganinya.
Pengecualian (raiseerrors) yang terjadi di SQL disebarkan kembali ke pemanggil. Ini termasuk batasan ref, pelanggaran indeks unik, masalah yang lebih serius, dll. Pada dasarnya apa pun yang tidak membuat operasi data terjadi secara normal harus disebarkan kembali.
Penelepon C# harus memiliki ini:
catch (SQLException sqlEx)
Dan kemudian tangani pengecualian sesuai kebutuhan. Mereka harus memiliki penangan SQLException tertentu. Ini penting.
Saya biasanya menjauh dari parameter keluaran karena saya menganggapnya terkait dengan data yang diangkut dan bukan pesan kesalahan apa pun, selain itu saya dapat memeriksa pengecualian untuk kode kesalahan SQL Server sehingga semua data yang kami butuhkan harus dalam pengecualian itu.
Selain itu, dalam beberapa kasus dengan SQL Server, kami memiliki Prosedur Tersimpan yang dapat memunculkan "pengecualian jenis bisnis". Dalam kasus tersebut, kami menambahkan nomor kesalahan khusus (di atas 50000) dan meningkatkan kesalahan itu dalam prosedur tersimpan bila diperlukan. Secara umum kami mencoba untuk menjaga ini seminimal mungkin karena menambah kerumitan, tetapi dalam beberapa kasus, kami merasa perlu.
Sekarang, karena klien menangkap SQLException, mereka dapat melihat kode kesalahan yang dikembalikan oleh SQL Server dalam pengecualian dan kemudian mengambil tindakan khusus (jika diperlukan) ketika pengecualian ditangkap dan nomor kesalahan adalah nilai tertentu. Ini memungkinkan penanganan kesalahan tingkat kedua berdasarkan kode kesalahan jika itu diperlukan untuk kesalahan khusus (>50000).
Ini juga memungkinkan DBA untuk meningkatkan kesalahan khusus dan membuat kode klien memiliki cara yang konsisten untuk mengatasinya. DBA kemudian harus memberi tahu client code monkey apa kesalahan khusus itu sehingga mereka dapat mempersiapkannya.
Saya biasanya tidak menggunakan kode pengembalian untuk tujuan penanganan kesalahan, meskipun saya dapat melihat bagaimana mereka dapat digunakan, tetapi itu berarti lebih banyak logika di lapisan kode monyet untuk melihat dan menangani kode pengembalian. Jika itu masalah, saya ingin pengecualian kembali, karena saya bisa menanganinya secara konsisten. Jika saya harus melihat kode pengembalian juga, sekarang ada beberapa cara penanganan kesalahan.