Zwykle nie jest problemem przekazanie string
na parametr, który jest liczbowy, o ile SQL Server jest w stanie przekonwertować zawartość ciągu na samą wartość liczbową. Jeśli to nie zadziała, pojawi się ten błąd.
Na przykład:Przekazywanie "Hello"
do parametru, który jest numeryczny, otrzymasz błąd. Przekazywanie "1234"
nie. Pamiętaj, że pusty ciąg lub ciąg zawierający białe znaki nie może zostać przekonwertowany na wartość liczbową!
Trzeba jednak powiedzieć, że to nie jest dobry styl. Aby uniknąć problemów, należy upewnić się, że typy używane w aplikacji są zgodne z typami w bazie danych. Może trochę więcej szczegółów na temat tego, dlaczego musisz mieć string
typy w Twojej aplikacji mogą pomóc.
EDYTUJ 1
Aby parametr był opcjonalny dla zapytania, należy postępować następująco:
- Zmień instrukcję SQL, aby zezwolić na parametry opcjonalne, takie jak
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Nie dodawaj
@Raumklasse_ID
parametr, jeśli ma być opcjonalny lub dodaj wartośćDBNull.Value
Naprawdę powinieneś rozważyć zmianę string
właściwości na typy dopuszczające wartość null, takie jak int?
.
EDYTUJ 2
Tak może wyglądać Twój kod implementujący zmiany sugerowane w Edycji 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);
...
}