c#
  • sql
  • 2015-08-14 3 views -4 likes 
    -4

    Я написал это, чтобы обновить таблицу SQL.Выполнение команды UPDATE

     mycmd.CommandText = "UPDATE savedinfo SET User_id='" + Login.GetUserID().ToString() + "', Date='" + DateTime.Now.ToLongDateString() + "', Evaluate='" + activeEvaluate.ToString() + "', TimeStart='" + dtCurrentTime1.ToLongTimeString() + "', TimeEnd='" +dtCurrentTime2.ToLongTimeString() + "' , Salary= '" + todaySalary.Text +"'"; 
         mycmd.Connection = con; 
         mycmd.ExecuteNonQuery(); 
    

    При получении в mycmd.ExecuteNonQuery(); я получил ошибку:

    An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

    Additional information: String or binary data would be truncated.

    The statement has been terminated.

    Что здесь проблема? Thanks

    +1

    Вы должны использовать параметризованный запрос. –

    +0

    Что представляет собой командный текст для записи, которая терпит неудачу, и как это соотносится с табличной схемой? –

    +0

    Как сказано в [предыдущем] [1], поле НЕ достаточно большое, чтобы хранить ваши данные. [1]: http://stackoverflow.com/questions/5591473/error-string-or-binary-data-would-be-truncated-when-trying-to-insert –

    ответ

    0

    Ошибка подразумевает, что вы пытаетесь вставить значение, которое должно быть большим для длины столбца в базе данных. Просмотрите схему базы данных и укажите, какой столбец вызывает эту проблему.

    Глядя на фрагмент кода У меня есть несколько других замечаний, которые, возможно, помогут.

    Требуется ли в инструкции Update предложение where?

    Выполняйте параметризованные запросы, так как это поможет избежать атак SQL-инъекций.

    Использование инструкции очень полезно при очистке и очистке объектов, в этом случае инструкция using помогает управлять открытыми соединениями с базой данных.

    Если вы хотите проверить допустимые длины строк перед отправкой их в базу данных, проверьте аргументы перед созданием соединений и т. Д., В идеале эти проверки будут выполняться на уровне вашей бизнес-логики.

      if (activeEvaluate.Length > 5) 
          { 
          throw new ArgumentException("activeEvaluate"); 
          } 
    
          using (SqlConnection connection = new SqlConnection(ConnString)) 
          { 
           using (SqlCommand cmd = connection.CreateCommand()) 
           { 
           cmd.CommandText = "UPDATE savedinfo set User_id= @UserId, Date = @Date, Evaluate = @Evaluate, TimeStart = @TimeStart, TimeEnd = @TimeEnd, Salary = @Salary "; 
    
           cmd.Parameters.AddWithValue("@UserId", Login.GetUserID()); 
           cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToLongDateString()); 
           cmd.Parameters.AddWithValue("@Evaluate", activeEvaluate.ToString()); 
           cmd.Parameters.AddWithValue("@TimeStart", dtCurrentTime1.ToLongTimeString()); 
           cmd.Parameters.AddWithValue("@TimeEnd", dtCurrentTime2.ToLongTimeString()); 
           cmd.Parameters.AddWithValue("@Salary", todaySalary.Text); 
           cmd.Connection.Open(); 
           cmd.ExecuteNonQuery(); 
           } 
          } 
    
    Смежные вопросы