2016-12-08 3 views
-1
string strQuery = "INSERT INTO [Order] (Quantity, Type, DateTime) 
values(" + qty + "," + type + "," + dtstmp.ToString("yyyy-mm-dd hh:mm:ss.fff") + ")"; 

SQL запросов:SQL DateTime Ошибка формата

INSERT INTO [Order] (Quantity, Type, DateTime) values(1,'q',2016-44-08 12:44:39.128) 

Неправильная ошибка синтаксиса возле '12'

Exception thrown: 'System.Data.Odbc.OdbcException' in System.Data.dll 

Может кто-то помочь мне понять эту ошибку синтаксиса?

+0

Дата должна быть в пределах '«и '» ', и вы должны заботиться о инъекции, а также –

+0

Использование ММ в«гггг-ММ-дд». Вы используете «мм», и он дает вам выход 44 в месяц. Измените его на капитал ММ, затем он даст вам соответствующий месяц. – Anoopkumar

+0

Вы всегда должны использовать [параметризованные запросы] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/). Этот тип конкатенаций строк открыт для [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) атак. И ** не ** сохраняйте значения 'DateTime' с их строковыми представлениями. Передайте свой 'dtstmp' напрямую. Прочитайте [Плохие привычки пинать: выбор неправильного типа данных] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data- type.aspx) –

ответ

0

Значения datetime должны иметь одинарные кавычки. Попробуйте

string strQuery = "INSERT INTO [Order] (Quantity, Type, DateTime) 
values(" + qty + "," + type + ",'" + dtstmp.ToString("yyyy-mm-dd hh:mm:ss.fff") + "')"; 
0

Собственно простое исправление, добавив ' до и после DateString не решает ваши проблемы, так как ваш запрос открывает широкую дверь для хакеров. Вместо этого я предпочитаю использовать параметризованные запросы для этих простых текстов/конкатенированных строк. очевидно, что эта проблема будет исправлена; код для этого будет выглядеть следующим образом:

string strQuery = "INSERT INTO [Order] (Quantity, Type, DateTime)Values(@qty,@type,@date)"; 
// create and open connection here 
using (SqlCommand cmdSQL = new SqlCommand(strQuery)) 
{ 
    // assign connection for this comnmand 
    cmdSQL.Parameters.Add("@qty", SqlDbType.Int).Value = qty; 
    cmdSQL.Parameters.Add("@type", SqlDbType.VarChar).Value = type; 
    cmdSQL.Parameters.Add("@date", SqlDbType.DateTime).Value = dtstmp; 
    cmdSQL.ExecuteNonQuery(); 
} 
Смежные вопросы