sql >> Base de Datos >  >> RDS >> Sqlserver

Obteniendo error:error al convertir el tipo de datos nvarchar a numérico en SQL

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:

  1. Cambie su instrucción SQL para permitir parámetros opcionales como WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. No agregue el @Raumklasse_ID parámetro si debe ser opcional o agregue el valor DBNull.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);
    ...
}