Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Errore di ricezione:errore durante la conversione del tipo di dati nvarchar in numerico in SQL

Di solito non è un problema passare una string in un parametro numerico, purché SQL Server sia in grado di convertire il contenuto della stringa in un valore numerico stesso. Se non funziona, viene visualizzato questo errore.

Ad esempio:passaggio di "Hello" su un parametro numerico, viene visualizzato un errore. Passaggio di "1234" tu no. Tieni presente che una stringa vuota o una stringa contenente spazi bianchi non può essere convertita in un valore numerico!

Tuttavia, va detto che non è un buon stile farlo. Dovresti assicurarti che i tipi che usi nella tua applicazione corrispondano ai tipi nel database per evitare problemi. Forse qualche ulteriore dettaglio sul motivo per cui devi avere string i tipi nella tua applicazione potrebbero essere d'aiuto.

MODIFICA 1
Per rendere un parametro opzionale per la query, la strada da percorrere sarebbe la seguente:

  1. Modifica la tua istruzione SQL per consentire parametri opzionali come WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. Non aggiungere il @Raumklasse_ID parametro se dovrebbe essere facoltativo o aggiungere il valore DBNull.Value

Dovresti davvero considerare di cambiare la tua string proprietà a tipi nullable come int? .

MODIFICA 2
Ecco come potrebbe apparire il tuo codice implementando le modifiche che ho suggerito nella modifica 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);
    ...
}