Obvykle není problém předat string
na parametr, který je číselný, pokud je SQL Server schopen převést obsah řetězce na číselnou hodnotu sám. Pokud to nefunguje, zobrazí se tato chyba.
Například:Předání "Hello"
u parametru, který je číselný, dostanete chybu. Předávání "1234"
ty ne. Upozorňujeme, že prázdný řetězec nebo řetězec obsahující mezery nelze převést na číselnou hodnotu!
Je však třeba říci, že to není dobrý styl. Měli byste se ujistit, že typy, které používáte ve své aplikaci, odpovídají typům v databázi, abyste předešli problémům. Možná nějaké další podrobnosti o tom, proč potřebujete mít string
vám mohou pomoci typy ve vaší aplikaci.
UPRAVIT 1
Chcete-li nastavit parametr jako volitelný pro dotaz, postup by byl následující:
- Změňte svůj příkaz SQL tak, aby umožňoval volitelné parametry jako
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Nepřidávejte
@Raumklasse_ID
parametr, pokud by měl být volitelný, nebo přidejte hodnotuDBNull.Value
Opravdu byste měli zvážit změnu string
vlastnosti na typy s možností null, jako je int?
.
ÚPRAVA 2
Takto by mohl vypadat váš kód implementující změny, které jsem navrhl v Úpravě 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);
...
}