Обикновено не е проблем да се предаде string
към параметър, който е числов, стига SQL Server да може да преобразува съдържанието на низа в самата числова стойност. Ако това не работи, получавате тази грешка.
Например:Подаване на "Hello"
към параметър, който е числов, получавате грешка. Предава се "1234"
ти не го правиш. Моля, обърнете внимание, че празен низ или низ, съдържащ интервали, не може да бъде преобразуван в числова стойност!
Все пак трябва да се каже, че това не е добър стил. Трябва да се уверите, че типовете, които използвате във вашето приложение, съответстват на типовете в базата данни, за да избегнете проблеми. Може би някои допълнителни подробности защо трябва да имате string
типове във вашето приложение може да помогне.
РЕДАКТИРАНЕ 1
За да направите параметър незадължителен за заявката, начинът ще бъде следният:
- Променете своя SQL оператор, за да разрешите незадължителни параметри като
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Не добавяйте
@Raumklasse_ID
параметър, ако трябва да е незадължителен, или добавете стойносттаDBNull.Value
Наистина трябва да обмислите промяна на вашия string
свойства към nullable типове като int?
.
РЕДАКТИРАНЕ 2
Ето как би могъл да изглежда вашият код, прилагайки промените, които предложих в Редактиране 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);
...
}