Por lo general, no es un problema pasar una string
a un parámetro que es numérico, siempre que SQL Server pueda convertir el contenido de la cadena en un valor numérico. Si eso no funciona, obtendrá este error.
Por ejemplo:pasar "Hello"
a un parámetro que es numérico, obtiene un error. Pasando "1234"
tu no ¡Tenga en cuenta que una cadena vacía o una cadena que contiene espacios en blanco no se puede convertir a un valor numérico!
Sin embargo, hay que decir que no es de buen estilo hacer eso. Debe asegurarse de que los tipos que utiliza en su aplicación coincidan con los tipos de la base de datos para evitar problemas. Tal vez algún detalle adicional sobre por qué necesita tener string
tipos en su aplicación podrían ayudar.
EDITAR 1
Para hacer que un parámetro sea opcional para la consulta, el camino a seguir sería el siguiente:
- Cambie su instrucción SQL para permitir parámetros opcionales como
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - No agregue el
@Raumklasse_ID
parámetro si debe ser opcional o agregue el valorDBNull.Value
Realmente debería considerar cambiar su string
propiedades a tipos anulables como int?
.
EDITAR 2
Así es como se vería su código implementando los cambios que sugerí en la Edición 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);
...
}