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

Får fejl:Fejl ved konvertering af datatype nvarchar til numerisk i SQL

Normalt er det ikke et problem at sende en string til en parameter, der er numerisk, så længe SQL Serveren er i stand til at konvertere indholdet af strengen til en numerisk værdi selv. Hvis det ikke virker, får du denne fejl.

For eksempel:Sender "Hello" til en parameter, der er numerisk, får du en fejl. Sender "1234" det gør du ikke. Bemærk venligst, at en tom streng eller en streng med mellemrum ikke kan konverteres til en numerisk værdi!

Det skal dog siges, at det ikke er god stil at gøre det. Du bør sikre dig, at de typer, du bruger i din applikation, matcher typerne i databasen for at undgå problemer. Måske nogle flere detaljer om, hvorfor du skal have string typer i din applikation kan hjælpe.

REDIGER 1
For at gøre en parameter valgfri for forespørgslen, er vejen at gå på følgende måde:

  1. Skift din SQL-sætning for at tillade valgfri parametre som WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. Tilføj ikke @Raumklasse_ID parameter, hvis den skal være valgfri, eller tilføj værdien DBNull.Value

Du bør virkelig overveje at ændre din string egenskaber til nullbare typer som int? .

REDIGERING 2
Sådan kunne din kode se ud ved at implementere de ændringer, jeg foreslog i Edit 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);
    ...
}


  1. CONVERT() i SQL Server

  2. gem var_dump i tekstfil

  3. Hvorfor tillader Oracle SQL os ikke at bruge kolonnealiaser i GROUP BY-sætninger?

  4. JDBC 4's java.sql.Clob.free() metode og bagudkompatibilitet