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:
- Altere sua instrução SQL para permitir parâmetros opcionais como
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Não adicione o
@Raumklasse_ID
parâmetro se for opcional ou adicione o valorDBNull.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);
...
}