sql >> Database >  >> RDS >> Sqlserver

Fout krijgen:fout bij het converteren van gegevenstype nvarchar naar numeriek in SQL

Meestal is het geen probleem om een ​​string door te geven naar een parameter die numeriek is, zolang de SQL Server de inhoud van de tekenreeks zelf naar een numerieke waarde kan converteren. Als dat niet werkt, krijg je deze foutmelding.

Bijvoorbeeld:"Hello" doorgeven naar een parameter die numeriek is, krijg je een foutmelding. Passeren "1234" jij niet. Houd er rekening mee dat een lege tekenreeks of een tekenreeks met witruimte niet kan worden geconverteerd naar een numerieke waarde!

Het moet echter gezegd worden dat het geen goede stijl is om dat te doen. U moet ervoor zorgen dat de typen die u in uw toepassing gebruikt, overeenkomen met de typen in de database om problemen te voorkomen. Misschien wat meer details over waarom je string nodig hebt typen in uw toepassing kunnen helpen.

BEWERK 1
Als u een parameter voor de query optioneel wilt maken, gaat u als volgt te werk:

  1. Wijzig uw SQL-instructie om optionele parameters toe te staan, zoals WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. Voeg de @Raumklasse_ID niet toe parameter als het optioneel zou moeten zijn of voeg de waarde toe DBNull.Value

Je zou echt moeten overwegen om je string te veranderen eigenschappen naar nullable-typen zoals int? .

BEWERK 2
Zo zou uw code eruit kunnen zien door de wijzigingen te implementeren die ik in Edit 1 heb voorgesteld:

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. Hoe krijg ik een tekenreeks voor de start- en einddatum van de week in PostgreSQL?

  2. Hoe maak je een extended insert met JDBC zonder strings te bouwen?

  3. Hoe houd ik rekening met ontbrekende xPaths en houd ik mijn gegevens uniform bij het scrapen van een website met behulp van de DOMXPath-querymethode?

  4. Hoe geërfde tabellen programmatisch te vinden in PostgreSQL?