Masalah langsung Anda mungkin adalah string koneksi yang salah atau server database tidak tersedia. String koneksi harus seperti ini
Server=localhost;Database=testdb;Uid=<username>;Pwd=<password>;
dengan <username>
dan <password>
diganti dengan nilai Anda yang sebenarnya.
Selain itu kode Anda memiliki beberapa masalah dan Anda harus memeriksanya jika ini dimaksudkan untuk menjadi kode produksi dan mungkin bahkan jika ini hanya proyek mainan untuk mempelajari sesuatu. Daftar ini dalam urutan tertentu dan mungkin tidak lengkap.
- Jangan melakukan hard code pada string koneksi Anda. Pindahkan ke file konfigurasi.
- Jangan sertakan sandi teks biasa dalam file konfigurasi atau kode sumber. Ada berbagai solusi seperti otentikasi windows, sertifikat atau dilindungi sandi oleh API Perlindungan Data Windows .
- Jangan buang
IDisposable
instance dengan memanggilIDisposable.Dispose()
. Alih-alih gunakanusing
pernyataan untuk melepaskan sumber daya bahkan dalam kasus pengecualian. - Jangan membuat pernyataan SQL menggunakan teknik manipulasi string. Alih-alih gunakan
SqlParameter
untuk mencegah serangan injeksi SQL. - Jangan simpan sandi teks biasa dalam database. Sebaliknya, setidaknya simpan salted hash dari kata sandi dan gunakan fungsi hash yang lambat, bukan MD5 atau anggota keluarga SHA.
- Anda dapat menggunakan
IDbCommand.ExecuteScalar
untuk mengambil hasil skalar dan menghindari penggunaan pembaca data. - Membandingkan nilai boolean dengan
true
ataufalse
berlebihan dan hanya menambahkan noise ke kode Anda. Alih-alihif (reader.IsDBNull(0) == true)
anda bisa menggunakanif (reader.IsDBNull(0))
. Hal yang sama berlaku untukif (reader.Read() != false)
apa yang setara denganif (reader.Read() == true)
dan karena itu jugaif (reader.Read())
. - Menggunakan pemetaan O/R seperti Kerangka Entitas biasanya lebih disukai daripada berinteraksi dengan database pada tingkat perintah SQL.