Meestal is het geen probleem om een string
door te geven naar een parameter die numeriek is, zolang de SQL Server de inhoud van de tekenreeks zelf naar een numerieke waarde kan converteren. Als dat niet werkt, krijg je deze foutmelding.
Bijvoorbeeld:"Hello"
doorgeven naar een parameter die numeriek is, krijg je een foutmelding. Passeren "1234"
jij niet. Houd er rekening mee dat een lege tekenreeks of een tekenreeks met witruimte niet kan worden geconverteerd naar een numerieke waarde!
Het moet echter gezegd worden dat het geen goede stijl is om dat te doen. U moet ervoor zorgen dat de typen die u in uw toepassing gebruikt, overeenkomen met de typen in de database om problemen te voorkomen. Misschien wat meer details over waarom je string
nodig hebt typen in uw toepassing kunnen helpen.
BEWERK 1
Als u een parameter voor de query optioneel wilt maken, gaat u als volgt te werk:
- Wijzig uw SQL-instructie om optionele parameters toe te staan, zoals
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Voeg de
@Raumklasse_ID
niet toe parameter als het optioneel zou moeten zijn of voeg de waarde toeDBNull.Value
Je zou echt moeten overwegen om je string
te veranderen eigenschappen naar nullable-typen zoals int?
.
BEWERK 2
Zo zou uw code eruit kunnen zien door de wijzigingen te implementeren die ik in Edit 1 heb voorgesteld:
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);
...
}