首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将DateTime.Now转换为smalldatetime?

将DateTime.Now转换为smalldatetime?
EN

Stack Overflow用户
提问于 2012-08-06 21:16:32
回答 2查看 4K关注 0票数 0

我正在尝试使用C#获取日期和时间,然后将其插入到SQL SERVER中的smalldatetime数据类型中。

我试着这样做:

代码语言:javascript
复制
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 ..

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-06 21:19:25

我建议使用参数。cmd.Parameters.AddWithValue("@date", date.toString); AddWithField将负责正确的转换。

您的InsertSQL语句变为:

代码语言:javascript
复制
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)";
票数 3
EN

Stack Overflow用户

发布于 2012-08-06 21:25:33

它不起作用有两个原因:

您的日期参数需要调用date.ToString()

  • You必须在内联查询中插入日期字符串前后添加单引号,如下所示:
  1. Your date parameter to call date必须在内联查询中插入日期字符串前后添加单引号:

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注入攻击中,还因为您必须担心添加单引号等问题。

更好的方法是这样使用参数:

代码语言:javascript
复制
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注入攻击或根据数据类型向某些参数添加单引号等。这对您来说是完全透明的,您更安全,数据库引擎将能够优化查询的执行计划。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11829070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档