Vanligtvis är det inga problem att skicka en string
till en parameter som är numerisk, så länge som SQL Server kan konvertera innehållet i strängen till ett numeriskt värde själv. Om det inte fungerar får du det här felet.
Till exempel:Skicka "Hello"
till en parameter som är numerisk får du ett fel. Skickar "1234"
det gör du inte. Observera att en tom sträng eller en sträng som innehåller blanksteg inte kan konverteras till ett numeriskt värde!
Det ska dock sägas att det inte är bra stil att göra så. Du bör se till att typerna du använder i din applikation matchar typerna i databasen för att undvika problem. Kanske lite mer information om varför du behöver ha string
typer i din applikation kan hjälpa.
REDIGERA 1
För att göra en parameter valfri för frågan är vägen att gå följande:
- Ändra din SQL-sats för att tillåta valfria parametrar som
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Lägg inte till
@Raumklasse_ID
parametern om den ska vara valfri eller lägg till värdetDBNull.Value
Du bör verkligen överväga att ändra din string
egenskaper till nullbara typer som int?
.
REDIGERA 2
Så här kan din kod se ut när jag implementerar ändringarna jag föreslog 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);
...
}