2013-05-18 1 views
-1

при попытке вставить datetime значение в базу данных SQL Server, я получаю эту ошибку:Вставка даты и времени из C# в базе данных SQL Server

Conversion failed when converting date and/or time from character string

Код:

connection.Open(); 
SqlCommand command = new SqlCommand("insert into table values(@time)", connection); 
command.Parameters.AddWithValue("@time", DateTime.Now); 
command.ExecuteNonQuery(); 
connection.Close(); 

Таблица table имеет 1 datetime столбец time.

Edit:
моя таблица, созданная в MSSQL 2012: http://i.imgur.com/TJ3t3y7.png
мой реальный код:

public void vytvorDotaz(String uzivatel, DateTime cas, String nazev, String dotaz) 
    { 
     int id = getMaxID() + 1; 
     connection.Open(); 
     SqlCommand command = new SqlCommand("insert into otazky values('" + id + "', '" + uzivatel + "', '0','0','0','@cas','" + nazev + "','" + dotaz + "')", connection); 
     command.Parameters.AddWithValue("@cas", DateTime.Now); 
     command.ExecuteNonQuery(); 
     connection.Close(); 
    } 
+2

Есть ли в вашем заявлении вставки ** одна ** отдельная цитата или это ошибка? –

+0

Замечание: с SQL Server ** 2008 ** существует новый тип данных под названием 'TIME' - это действительно плохая идея назвать столбец просто« время »- используйте что-то более содержательное, более выразительное! –

+0

Пожалуйста, напишите фактический SQL вместо dummy-sql для вопроса. Кроме того, каков тип столбца, в котором вы пытаетесь сохранить DateTime? –

ответ

2

Реальная проблема здесь состоит в том, что вы пишете параметр внутри кавычек:

... ,'0','@cas',' ... 
     ^^

Это не будет использовать @cas в качестве параметра, вы на самом деле пытаетесь вставить строку «@cas» в этот столбец, а не содержимое параметра @cas.

Удалить цитаты, и эта часть должна работать.

Кроме того, не используйте конкатенацию строк для создания SQL, используйте все параметры, избавляйте вас от головной боли от SQL-инъекций или кавычек или чего-то еще. Это связано с параметрами «id», «uzivatel», «nazev» и «dotav», которые вы используете (параметры метода, которые есть).

2

Похоже, что вам нужно:

insert into table values(@time) 

без единой цитаты характера.

+0

ah Мне очень жаль, эта ошибка была сделана мной, когда я очищал код (обычно у меня есть более одного параметра) ... Моя проблема заключается в том, что преобразование asp datetime в SQL datetime .... Я отредактировал код, но thnx – Eleer

0

Попробуйте System.Data.SqlTypes.SqlDateTime Также при хранении дат, пожалуйста, храните их как UTC для предотвращения путаницы.

+0

Я пропустил одну цитату, как упоминал @Darren, это, скорее всего, будет проблемой. –

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