C# SQL日期时间格式错误

C# SQL日期时间格式错误,c#,sql,datetime,odbc,syntax-error,C#,Sql,Datetime,Odbc,Syntax Error,SQL查询: string strQuery = "INSERT INTO [Order] (Quantity, Type, DateTime) values( " + qty + "," + type + "," + dtstmp.ToString("yyyy-mm-dd hh:mm:ss.fff") + ")"; “12”附近出现不正确的语法错误 INSERT INTO [Order] (Quantity, Type, DateTime) values( 1,'q',2016-44-08

SQL查询:

string strQuery = "INSERT INTO [Order] (Quantity, Type, DateTime) 
values( " + qty + "," + type + "," + dtstmp.ToString("yyyy-mm-dd hh:mm:ss.fff") + ")";
“12”附近出现不正确的语法错误

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

有人能帮我找出这个语法错误吗?

日期时间值应该带单引号。试试这个

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

实际上,在日期字符串前后添加一个
的简单修复方法并不能解决您的问题,因为您的查询为黑客打开了一扇大门。我希望您对这种纯文本/串联字符串使用参数化查询。显然,这也将解决这个问题;其代码如下所示:

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

日期应在
'
'
之间,并且您还必须注意注入以及在“yyy-MM-dd”中使用MM。您正在使用'mm',它将每月输出44。将其更改为大写MM,然后它将给您相应的月份。您应该始终使用。这种类型的字符串连接对攻击是开放的。并且不要将
DateTime
值与其字符串表示形式一起存储。直接传递您的
dtstmp
。阅读
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();
}