2012-08-06 66 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注入攻擊或添加單引號根據數據類型,等等這一切都透明給你一些參數,您更安全,數據庫引擎將能夠優化查詢的執行計劃。