System.Data.SqlClient.SqlException Ошибка преобразования при преобразовании даты и / или времени из символьной строки. net ADO - PullRequest
0 голосов
/ 08 июля 2020

Я вставляю данные из dateTimePicker в WFA в базу данных с помощью ADO. База данных имеет Дата dataType - YYYY / MM / DD . Итак, у меня короткая дата от dateTimePicker до ShortDateFormat. Разве это не будет ГГГГ / ММ / ДД ? Я получил это исключение:

System.Data.SqlClient.SqlException: 'Ошибка преобразования при преобразовании даты и / или времени из символьной строки.'

Код:

using (SqlConnection conn = new SqlConnection(connString))
                        {
                            string query = "Insert Into Users VALUES (@Name, @Lastname, @Phone, @birthDate, @Image)";
                            using (SqlCommand cmd = new SqlCommand(query, conn))
                            {
                                string FileName = btnImgPath.Text;
                                cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 100).Value = tbName.Text;
                                cmd.Parameters.Add("@Lastname", SqlDbType.NVarChar, 100).Value = tbLastname.Text;
                                cmd.Parameters.Add("@Phone", SqlDbType.NVarChar, 100).Value = tbPhone.Text;
                                cmd.Parameters.Add("@birthDate", SqlDbType.Date, 100).Value = dtp1.Value.Date.ToShortDateString();
                                cmd.Parameters.Add("@Image", SqlDbType.VarBinary).Value = imageData;

                                conn.Open();
                                cmd.ExecuteNonQuery();
                                conn.Close();
                            }
                         }

1 Ответ

3 голосов
/ 08 июля 2020

Код передает строку параметру с типом даты:

cmd.Parameters.Add("@birthDate", SqlDbType.Date, 100).Value = dtp1.Value.Date.ToShortDateString();

Это необходимо проанализировать обратно в DateTime перед отправкой в ​​базу данных.

Передайте DateTime вместо этого напрямую:

cmd.Parameters.Add("@birthDate", SqlDbType.Date).Value = dtp1.Value.Date;

Свойство DateTime.Date возвращает DateTime без временной части исходного значения.

Нет необходимости указывать размер либо date - это тип фиксированного размера

...