Member 11297177 Ответов: 1

Преобразование типа данных varchar в тип данных datetime привело к значению вне диапазона. Заявление было прекращено.


The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

The statement has been terminated.



мой код на c#.
string str = "insert into TblStock1 values('" + textBox1.Text + "','" + textBox2.Text + "','" + dateTimePicker1.Value.ToString("dd/MM/yyyy") + "','" + textBox3.Text + "','" + comboBox1.Text + "')";


Что я уже пробовал:

my c# code.
<pre>string str = "insert into TblStock1 values('" + textBox1.Text + "','" + textBox2.Text + "','" + dateTimePicker1.Value.ToString("dd/MM/yyyy") + "','" + textBox3.Text + "','" + comboBox1.Text + "')";

1 Ответов

Рейтинг:
4

MadMyche

Ваш код C# является кандидатом на SQL-инъекция- Ты должен это сделать . NEVER EVER соберите команду SQL, объединив текст команды с пользовательским вводом.

То, что вы должны делать, это использовать параметры для этого, которые дадут вам что-то вроде этого

string qry = "INSERT INTO TblStock1 VALUES (@txt1, @txt2, @dt1, @tx3, @cb1)";

SqlCommand = new SqlCommand(qry, connectionstring);
    cmd.Parameters.AddWithValue("@txt1", textBox1.Text);
    cmd.Paramaters.AddWithValue("@txt2", textBox2.Text);
//  cmd.Paramaters.AddWithValue("@dt1",  ** later **);
    cmd.Paramaters.AddWithValue("@txt3", textBox3.Text);
    cmd.Paramaters.AddWithValue("@cb1", comboBox1.Text);
Теперь перейдем к вашей проблеме с конверсией...

Оставьте значения DateTime как DateTime; они являются числовыми по своей природе, и единственное форматирование времени вступает в игру, когда вы показываете его конечному пользователю.
Таким образом, закомментированная строка выше должна быть просто заменена на
cmd.Paramaters.AddWithValue("@dt1", dateTimePicker1.Value );


Member 11297177

Спасибо за быстрый ответ , позвольте мне попробовать и вернуться к вам

Member 11297177

спасибо за вашу помощь , ваше данное решение сработало отлично .

MadMyche

Рад, что все получилось.
Обе эти проблемы очень распространены, поэтому не принимайте их на свой счет; просто запомните их для дальнейшего развития.
Насколько это распространено? Я просто дал тот же самый основной ответ на новый вопрос, но не мог дать им код замены, так как у меня нет Python.