Строка или двоичные данные будут усеченным исключением?

#.net #sqlexception

#.net #sqlexception

Вопрос:

  cmd = new SqlCommand("INSERT INTO sms_sentmessages(Mobilefrom,Mobileto,Message,senddate) VALUES('"   str.Substring(0, str.Length - 4).ToString()   "','"   number   "','"   txtmessage.Text.Replace("'", "''").Trim()   "',getdate())", con);
                                    cmd.CommandType = CommandType.Text;
                                    cmd.ExecuteNonQuery();
  

Ответ №1:

 str.Substring(0, str.Length - 4)
  

и / или

 txtmessage.Text.Replace("'", "''").Trim()
  

слишком велики, чтобы поместиться в столбец, в который вы пытаетесь вставить.

Ответ №2:

Ну, предположительно, вы пытаетесь вставить значение в таблицу, и оно превышает длину столбца. Вы должны проверить данные, прежде чем пытаться выполнить SQL insert.

Однако вам также следует использовать параметризованный запрос — в настоящее время ваш код уязвим для атаки с использованием SQL-инъекций. Смотрите сайт Bobby Tables для получения дополнительной информации. В принципе, параметризованный SQL позволяет вам хранить код (SQL) отдельно от данных (параметров), делая ваш код более понятным и предотвращая атаки с использованием SQL-инъекций (при условии, что вы также не используете динамический SQL).

(Наконец, непонятно, почему вы вызываете ToString() результат Substring вызова …)

Ответ №3:

Ваши данные (или, возможно, триггер) слишком велики, чтобы поместиться в столбец, который вы пытаетесь сохранить.

По крайней мере, это мое лучшее предположение.