sql >> Databasteknik >  >> RDS >> Sqlserver

Får fel:Fel vid konvertering av datatyp nvarchar till numerisk i SQL

Vanligtvis är det inga problem att skicka en string till en parameter som är numerisk, så länge som SQL Server kan konvertera innehållet i strängen till ett numeriskt värde själv. Om det inte fungerar får du det här felet.

Till exempel:Skicka "Hello" till en parameter som är numerisk får du ett fel. Skickar "1234" det gör du inte. Observera att en tom sträng eller en sträng som innehåller blanksteg inte kan konverteras till ett numeriskt värde!

Det ska dock sägas att det inte är bra stil att göra så. Du bör se till att typerna du använder i din applikation matchar typerna i databasen för att undvika problem. Kanske lite mer information om varför du behöver ha string typer i din applikation kan hjälpa.

REDIGERA 1
För att göra en parameter valfri för frågan är vägen att gå följande:

  1. Ändra din SQL-sats för att tillåta valfria parametrar som WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. Lägg inte till @Raumklasse_ID parametern om den ska vara valfri eller lägg till värdet DBNull.Value

Du bör verkligen överväga att ändra din string egenskaper till nullbara typer som int? .

REDIGERA 2
Så här kan din kod se ut när jag implementerar ändringarna jag föreslog 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. Hur ställer man in flera kolumnbredder i ett enda kommando i Oracle?

  2. PDO anslutningstest

  3. Hur väljer och optimerar man orakelindex?

  4. Hur hämtar jag kommentarer från en Oracle 11g med JDBC?