2012-08-06 72 views
0

我试图使用C#获取日期和时间,然后将其插入SQL SERVER中的smalldatetime数据类型。DateTime.Now into 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 ..

+0

首先,您应该使用参数化查询。即使你使用这段代码,你也不会在查询中用撇号包裹'date'变量。 – LittleBobbyTables 2012-08-06 13:18:43

+0

那是工作还是失败?你有错误信息吗?还是一个问题?不幸的是,从你的帖子中不太清楚你在问什么 - 我建议你编辑一下,让你的问题清楚。 – 2012-08-06 13:19:47

+0

这应该隐式转换为smalldatetime而没有问题。目前的问题是什么?你的问题是什么?也许你不应该在插入列表中包含所有'YTOODLE_LINKS.'前缀? – 2012-08-06 13:19:56

回答

3

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

你InsertSQL statment变为:

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)"; 
+1

您是否意识到所传递的列数和值不相等,这是不对的,我猜? – yogi 2012-08-06 13:25:48

1

它不会有两个原因工作:

  1. 您的日期参数需要调用date.ToString()
  2. 您必须添加单在日期字符串插入到您的内嵌查询中之前和之后的引号如下:

    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注入攻击或添加单引号根据数据类型,等等这一切都透明给你一些参数,您更安全,数据库引擎将能够优化查询的执行计划。