Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obtendo erro:Erro ao converter o tipo de dados nvarchar para numérico no SQL


Normalmente não é um problema passar uma string para um parâmetro numérico, desde que o SQL Server seja capaz de converter o conteúdo da string em um valor numérico. Se isso não funcionar, você receberá este erro.

Por exemplo:Passando "Hello" para um parâmetro numérico, você recebe um erro. Passando "1234" você não. Observe que uma string vazia ou uma string contendo espaço em branco não pode ser convertida em um valor numérico!

No entanto, deve-se dizer que não é bom estilo fazer isso. Você deve certificar-se de que os tipos usados ​​em seu aplicativo correspondem aos tipos no banco de dados para evitar problemas. Talvez alguns detalhes adicionais sobre por que você precisa ter string tipos em seu aplicativo podem ajudar.

EDITAR 1
Para tornar um parâmetro opcional para a consulta, o caminho a seguir seria o seguinte:
  1. Altere sua instrução SQL para permitir parâmetros opcionais como WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. Não adicione o @Raumklasse_ID parâmetro se for opcional ou adicione o valor DBNull.Value

Você realmente deveria considerar mudar sua string propriedades para tipos anuláveis ​​como int? .

EDITAR 2
É assim que seu código pode ficar implementando as mudanças que sugeri na Edição 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);
    ...
}