2015-05-04 4 views
0

Таблица, которую я использую, имеет 3 nvarchar(MAX) столбцы и 1 datetime столбец. Я получаю эту ошибку, когда я выполняющийся следующую вставку заявление: -Ошибка преобразования при преобразовании символьной строки в дату или время

Конверсия удалось при преобразовании строки символов в дату или время

 DateTime date = System.DateTime.Now;   
    SqlCommand cmd = new SqlCommand("insert into chats values('" + chatFrom + "','" + chatTo + "',@msg,'"+date+"')", conn); 
    cmd.Parameters.Add("msg", msg); 

ответ

1

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

Во-вторых, по моему опыту, SQL может быть намного сложнее в отношении формата строки даты/времени, чем язык программирования. Вы можете попробовать сделать что-то вроде date.ToString("ddMMyy"), возможно, используя более подходящую строку формата для вашей конкретной базы данных и уровень точности, который вы хотите сохранить.

-1

Это, скорее всего, из-за макета вашего формата даты по умолчанию.

SQL Server не может определить, является ли '01/04/2015 'первым апреля или четвертого января.

Изменить эту строку:

SqlCommand cmd = new SqlCommand("insert into chats values('" + chatFrom + "','" + chatTo + "',@msg,'"+ date.ToString("dd/MMM/yyyy") +"')", conn); 
cmd.Parameters.Add("msg", msg); 

Чтобы сделать однозначный.

+0

То есть не однозначный формат дата – ErikEJ

+0

Как это формат дата не однозначен? – Molloch

+0

Он сломается на неамериканских системах – ErikEJ

0

Вы должны использовать параметры для значения даты:

DateTime date = System.DateTime.Now;   
SqlCommand cmd = new SqlCommand("insert into chats values('" + chatFrom + "','" + chatTo + "',@msg, @date)", conn); 
cmd.Parameters.Add("msg", msg); 
cmd.Parameters.Add(new SqlParameter("@date", SqlDbType.DateTime).Value = date); 
Смежные вопросы

 Смежные вопросы