Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Грешка при получаване:Грешка при преобразуването на типа данни nvarchar в числови в SQL

Обикновено не е проблем да се предаде string към параметър, който е числов, стига SQL Server да може да преобразува съдържанието на низа в самата числова стойност. Ако това не работи, получавате тази грешка.

Например:Подаване на "Hello" към параметър, който е числов, получавате грешка. Предава се "1234" ти не го правиш. Моля, обърнете внимание, че празен низ или низ, съдържащ интервали, не може да бъде преобразуван в числова стойност!

Все пак трябва да се каже, че това не е добър стил. Трябва да се уверите, че типовете, които използвате във вашето приложение, съответстват на типовете в базата данни, за да избегнете проблеми. Може би някои допълнителни подробности защо трябва да имате string типове във вашето приложение може да помогне.

РЕДАКТИРАНЕ 1
За да направите параметър незадължителен за заявката, начинът ще бъде следният:

  1. Променете своя SQL оператор, за да разрешите незадължителни параметри като WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. Не добавяйте @Raumklasse_ID параметър, ако трябва да е незадължителен, или добавете стойността DBNull.Value

Наистина трябва да обмислите промяна на вашия string свойства към nullable типове като int? .

РЕДАКТИРАНЕ 2
Ето как би могъл да изглежда вашият код, прилагайки промените, които предложих в Редактиране 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. Представяме ви нова функция:Група за винаги наличност

  2. Пренареждане и дедупликиране на SQL колони въз основа на данни от колони

  3. Ограничения на SQL Server Express

  4. TODATETIMEOFFSET() Примери в SQL Server

  5. Промяна на низа за свързване динамично