C# SQL日期时间格式错误
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
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();
}