Normalt er det ikke et problem at sende en string
til en parameter, der er numerisk, så længe SQL Serveren er i stand til at konvertere indholdet af strengen til en numerisk værdi selv. Hvis det ikke virker, får du denne fejl.
For eksempel:Sender "Hello"
til en parameter, der er numerisk, får du en fejl. Sender "1234"
det gør du ikke. Bemærk venligst, at en tom streng eller en streng med mellemrum ikke kan konverteres til en numerisk værdi!
Det skal dog siges, at det ikke er god stil at gøre det. Du bør sikre dig, at de typer, du bruger i din applikation, matcher typerne i databasen for at undgå problemer. Måske nogle flere detaljer om, hvorfor du skal have string
typer i din applikation kan hjælpe.
REDIGER 1
For at gøre en parameter valgfri for forespørgslen, er vejen at gå på følgende måde:
- Skift din SQL-sætning for at tillade valgfri parametre som
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Tilføj ikke
@Raumklasse_ID
parameter, hvis den skal være valgfri, eller tilføj værdienDBNull.Value
Du bør virkelig overveje at ændre din string
egenskaber til nullbare typer som int?
.
REDIGERING 2
Sådan kunne din kode se ud ved at implementere de ændringer, jeg foreslog i 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);
...
}