我正在尝试使用C#获取日期和时间,然后将其插入到SQL SERVER中的smalldatetime数据类型中。
我试着这样做:
DateTime date = DateTime.Now;
sql = "INSERT INTO YTOODLE_LINKS (YTOODLE_LINKS.TASK_ID,YTOODLE_LINKS.LINK_TITLE,YTOODLE_LINKS.LINK_DESC,YTOODLE_LINKS.LINK_PATH,YTOODLE_LINKS.USER_ID,YTOODLE_LINKS.LAST_USER_EDIT)VALUES (1,'','','',2,'1',"+ date +")";
dataObj = new DataObj();
dataObj.InsertCommand(sql);
connection = new SqlConnection(conn);
connection.Open();
cmd = new SqlCommand(sql, connection);
cmd.ExecuteNonQuery();
connection.Close();然后它会告诉我:“‘16’附近的语法不正确。”我猜它指的是我现在的时间,也就是现在16:15 ..
发布于 2012-08-06 21:19:25
我建议使用参数。cmd.Parameters.AddWithValue("@date", date.toString); AddWithField将负责正确的转换。
您的InsertSQL语句变为:
sql = "INSERT INTO YTOODLE_LINKS (YTOODLE_LINKS.TASK_ID,YTOODLE_LINKS.LINK_TITLE,YTOODLE_LINKS.LINK_DESC,YTOODLE_LINKS.LINK_PATH,YTOODLE_LINKS.USER_ID,YTOODLE_LINKS.LAST_USER_EDIT)VALUES (1,'','','',2,'1',@date)";发布于 2012-08-06 21:25:33
它不起作用有两个原因:
您的日期参数需要调用date.ToString()
sql = "INSERT INTO YTOODLE_LINKS (YTOODLE_LINKS.TASK_ID,YTOODLE_LINKS.LINK_TITLE,YTOODLE_LINKS.LINK_DESC,YTOODLE_LINKS.LINK_PATH,YTOODLE_LINKS.USER_ID,YTOODLE_LINKS.LAST_USER_EDIT) VALUES (1,'',2,'1','"+ date +"')";
但上面的策略并不好,因为它通过连接字符串的方式将您暴露在SQL注入攻击中,还因为您必须担心添加单引号等问题。
更好的方法是这样使用参数:
sql = "INSERT INTO YTOODLE_LINKS (YTOODLE_LINKS.TASK_ID,YTOODLE_LINKS.LINK_TITLE,YTOODLE_LINKS.LINK_DESC,
YTOODLE_LINKS.LINK_PATH,YTOODLE_LINKS.USER_ID,YTOODLE_LINKS.LAST_USER_EDIT)
VALUES (@First,@Second,@Third,@Fourth,@Fifth,@Sixth,@YourDate)";
cmd.Parameters.AddWithValue("@First", 1);
// ... and so on
cmd.Parameters.AddWithValue("@YourDate", date);现在,您不必担心sql注入攻击或根据数据类型向某些参数添加单引号等。这对您来说是完全透明的,您更安全,数据库引擎将能够优化查询的执行计划。
https://stackoverflow.com/questions/11829070
复制相似问题