Biasanya tidak masalah untuk melewatkan string
ke parameter numerik, selama SQL Server mampu mengonversi konten string menjadi nilai numerik itu sendiri. Jika tidak berhasil, Anda mendapatkan kesalahan ini.
Misalnya:Melewati "Hello"
ke parameter yang numerik, Anda mendapatkan kesalahan. Melewati "1234"
Anda tidak. Harap dicatat bahwa string kosong atau string yang berisi spasi tidak dapat dikonversi ke nilai numerik!
Namun, harus dikatakan bahwa itu bukan gaya yang baik untuk melakukan itu. Anda harus memastikan bahwa jenis yang Anda gunakan dalam aplikasi Anda cocok dengan jenis dalam database untuk menghindari masalah. Mungkin beberapa detail lebih lanjut tentang mengapa Anda perlu memiliki string
jenis dalam aplikasi Anda dapat membantu.
EDIT 1
Untuk membuat parameter opsional untuk kueri, caranya adalah sebagai berikut:
- Ubah pernyataan SQL Anda untuk mengizinkan parameter opsional seperti
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Jangan tambahkan
@Raumklasse_ID
parameter jika harus opsional atau tambahkan nilaiDBNull.Value
Anda harus benar-benar mempertimbangkan untuk mengubah string
properties ke tipe nullable seperti int?
.
EDIT 2
Beginilah tampilan kode Anda saat menerapkan perubahan yang saya sarankan di Edit 1:
using (SqlCommand cmd = new SqlCommand(@"SELECT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID FROM RAUM r WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) OR STADT_ID = ISNULL(@Stadt_ID, STADT_ID) OR GEBAEUDE_ID = ISNULL(@Gebaeude_ID, GEBAEUDE_ID) OR REGION_ID = ISNULL(@Region_ID, REGION_ID)", con))
{
con.Open();
if (!String.IsNullOrWhitespace(RAUMKLASSE_ID))
cmd.Parameters.AddWithValue("@Raumklasse_ID", RAUMKLASSE_ID);
else
cmd.Parameters.AddWithValue("@Raumklasse_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(STADT_ID))
cmd.Parameters.AddWithValue("@Stadt_ID", STADT_ID);
else
cmd.Parameters.AddWithValue("@Stadt_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(GEBAEUDE_ID))
cmd.Parameters.AddWithValue("@Gebaeude_ID", GEBAEUDE_ID);
else
cmd.Parameters.AddWithValue("@Gebaeude_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(REGION_ID))
cmd.Parameters.AddWithValue("@Region_ID", REGION_ID);
else
cmd.Parameters.AddWithValue("@Region_ID", DBNull.Value);
...
}