Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Błąd podczas konwersji typu danych nvarchar na numeryczny w SQL

Zwykle nie jest problemem przekazanie string na parametr, który jest liczbowy, o ile SQL Server jest w stanie przekonwertować zawartość ciągu na samą wartość liczbową. Jeśli to nie zadziała, pojawi się ten błąd.

Na przykład:Przekazywanie "Hello" do parametru, który jest numeryczny, otrzymasz błąd. Przekazywanie "1234" nie. Pamiętaj, że pusty ciąg lub ciąg zawierający białe znaki nie może zostać przekonwertowany na wartość liczbową!

Trzeba jednak powiedzieć, że to nie jest dobry styl. Aby uniknąć problemów, należy upewnić się, że typy używane w aplikacji są zgodne z typami w bazie danych. Może trochę więcej szczegółów na temat tego, dlaczego musisz mieć string typy w Twojej aplikacji mogą pomóc.

EDYTUJ 1
Aby parametr był opcjonalny dla zapytania, należy postępować następująco:

  1. Zmień instrukcję SQL, aby zezwolić na parametry opcjonalne, takie jak WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. Nie dodawaj @Raumklasse_ID parametr, jeśli ma być opcjonalny lub dodaj wartość DBNull.Value

Naprawdę powinieneś rozważyć zmianę string właściwości na typy dopuszczające wartość null, takie jak int? .

EDYTUJ 2
Tak może wyglądać Twój kod implementujący zmiany sugerowane w Edycji 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj funkcji konwersji serwera sql, aby przekonwertować hijri na datę gregoriańską

  2. Dane przestawne tabeli przestawnej przekształcania SQL

  3. Tymczasowe wyłączenie ograniczeń (MS SQL)

  4. Przykłady ATAN() w SQL Server

  5. Jak zweryfikować wielokąt geograficzny w SQL Server 2008?