Я пытаюсь вставить значения из средства выбора даты и времени в базу данных, но получаю необработанное исключение
Ошибка преобразования при преобразовании даты и/или времени из строки символов
Это код, который я использовал:
private void bunifuFlatButton8_Click(object sender, EventArgs e)
{
if (OrderID.Text == "" || CustomerID.Text == "" || CustName.Text == "" || AmountTB.Text = = "")
{
MessageBox.Show("Fill the data correctly");
}
else
{
SqlCommand cmd = new SqlCommand("insert into OrderTB values(" + OrderID.Text + "," + CustomerID.Text + ",'" + CustName.Text + "','" + OrderDate.Text + "'," + AmountTB.Text + ")", Con);
Con.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Order successfully added");
Con.Close();
populate();
}
}
Любая помощь будет оценена.
Не используйте параметр для SQL, используйте правильный способ предоставления параметра stackoverflow.com/questions/6043389/…
Изменение OrderDate.Text на OrderDate.Value решило мою проблему. Спасибо, что нашли время ответить на мой вопрос, и я обязательно узнаю больше об объектах поставщиков баз данных: D
@xeyon, почему ты удалил свой комментарий после подтверждения ответа?
Извините, я хотел прокомментировать ответ другого парня, но я также многому научился из вашего ответа, сэр, спасибо.
Вы можете использовать код ниже. Если вы хотите использовать try and catch, используйте его, чтобы получить ошибку, а вместо OrderDate.Text используйте OrderDate.Value, чтобы получить значение DateTime и преобразовать его в строку в нужном формате, как показано ниже.
private void bunifuFlatButton8_Click(object sender, EventArgs e)
{
if (OrderID.Text == "" || CustomerID.Text == "" || CustName.Text == "" || AmountTB.Text = = "")
{
MessageBox.Show("Fill The data Correctly");
}
else
{
try
{
//Instead of OrderDate.Text use OrderDate.Value.ToString("yyyy-MM-dd HH:mm:ss.fff") then you will have correct format for SQL Insert
using(SqlCommand cmd = new SqlCommand("insert into OrderTB values(" + OrderID.Text + "," + CustomerID.Text + ",'" + CustName.Text + "','" + OrderDate.Value.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'," + AmountTB.Text + ")", Con))
{
Con.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Order Successfully Added");
Con.Close();
populate();
}
}
catch(Exception ex)
{
MessageBox.Show("I got an error : " + ex.Message); // This will give you error message instead of stopping your program
}
}
}
Нет, пожалуйста, не делай этого. 1. НИКОГДА не создавайте операторы SQL из конкатенации строк (остерегайтесь атак SQL-инъекций) и 2. не передавайте DateTime в базу данных как строку, а как DateTime.
Как @Ňɏssa Pøngjǣrdenlarp упомянул в комментарии, вы должны использовать значение в правильном формате, который должен быть DateTime
.
У вас есть несколько проблем в вашем коде, позвольте мне выделить их ниже.
using
с соединением, чтобы избавиться от них.null
, если текст — null
.ExecuteNonQuery
.
У вас много проблем с этим небольшим фрагментом кода, но если
OrderDate
является средством выбора даты и времени, пользовательOrderDate.Value
должен передать дату в базу данных. Затем посетите сайт документации Microsoft, чтобы узнать, как правильно использовать эти объекты поставщика базы данных.