vijay_bale Ответов: 2

Как я могу обновить значение datetime picker до SQL с помощью c#. Я вставил с помощью INSERT SQL. Проблема только с обновлением


Я вставил значение выбора даты и времени в базу данных. но я хочу отредактировать это значение в c# и обновить. но я столкнулся с некоторыми ошибками при обновлении " преобразование не удалось. При преобразовании даты/времени из символьной строки". Мой код таков
"UPDATE [dbo].[tempsales] SET[date] = '" + Convert.ToDateTime(dateTimePicker1.Value) + "', [customername]='" + txtcust.Text + "',[billno]='" + txtbno.Text + "',[itemname]='"+txtName.Text+"',[qty]='"+txtQty.Text+"',[price]='"+txtPrice.Text+"',[tax]='"+txtTax.Text+"',[itemtot]='"+txtTotal.Text+"' WHERE sno='" + txtslno.Text + "'", con);


что же мне теперь делать?

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

Я погуглил для обновления. но найти можно только вставку.

F-ES Sitecore

Какой тип поля "дата"?

vijay_bale

defaullt выбор даты и времени так что это строка может быть

[no name]

Если бы вы использовали правильный параметризованный запрос вместо этой атаки SQL-инъекции, ожидающей своего часа, у вас, скорее всего, не было бы этой проблемы.

vijay_bale

@NotPolitcally, сейчас это работает. Обновление. Но если я отредактировал одно значение одного поля и нажал на кнопку для обновления, то одна новая запись добавляет, а не обновляет текущую запись. Где я поступил неправильно.Если я коснулся значения только этого поля,то это происходит.

[no name]

"Где я сделал что-то не так", и как ты думаешь, я узнаю? У меня нет хрустального шара, который позволяет мне видеть ваш экран.

vijay_bale

@NotPolitcally, пожалуйста, расскажите мне какой-нибудь пример того, что вы сказали.

2 Ответов

Рейтинг:
4

Wendelius

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

Взгляните на Правильное выполнение операций с базой данных[^]


Рейтинг:
20

OriginalGriff

Только не так! Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Вы хотите что-то вроде:

using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlCommand com = new SqlCommand("UPDATE myTable SET myColumn1=@C1, myColumn2=@C2 WHERE RowId=@ID", con))
        {
        com.Parameters.AddWithValue("@ID", id);
        com.Parameters.AddWithValue("@C1", myTextBox.Text);
        com.Parameters.AddWithValue("@C2", myDateTimePicker.Value);
        com.ExecuteNonQuery();
        }
    }