sql >> Databáze >  >> RDS >> Sqlserver

Získávání chyby:Chyba při převodu datového typu nvarchar na číselný v SQL

Obvykle není problém předat string na parametr, který je číselný, pokud je SQL Server schopen převést obsah řetězce na číselnou hodnotu sám. Pokud to nefunguje, zobrazí se tato chyba.

Například:Předání "Hello" u parametru, který je číselný, dostanete chybu. Předávání "1234" ty ne. Upozorňujeme, že prázdný řetězec nebo řetězec obsahující mezery nelze převést na číselnou hodnotu!

Je však třeba říci, že to není dobrý styl. Měli byste se ujistit, že typy, které používáte ve své aplikaci, odpovídají typům v databázi, abyste předešli problémům. Možná nějaké další podrobnosti o tom, proč potřebujete mít string vám mohou pomoci typy ve vaší aplikaci.

UPRAVIT 1
Chcete-li nastavit parametr jako volitelný pro dotaz, postup by byl následující:

  1. Změňte svůj příkaz SQL tak, aby umožňoval volitelné parametry jako WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. Nepřidávejte @Raumklasse_ID parametr, pokud by měl být volitelný, nebo přidejte hodnotu DBNull.Value

Opravdu byste měli zvážit změnu string vlastnosti na typy s možností null, jako je int? .

ÚPRAVA 2
Takto by mohl vypadat váš kód implementující změny, které jsem navrhl v Úpravě 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. Jak používat DISTINCT v SQL

  2. ImportError:Žádný modul s názvem mysql.base v projektu django na serveru Ubuntu 11.04

  3. Čtenář řešení výzvy Special Islands

  4. Jak může moje aplikace těžit z dočasných tabulek?