2011-07-12 69 views
2

我有一個名爲Fio_FinalSched的表的數據庫,該表又有一個名爲FinalDate的類型爲smalldatetime的列。我的日期字符串轉換爲DateTime類型是:C#插入日期時間失敗

DateTime theDate = Convert.ToDateTime("2010-01-05 23:50:00"); 

然後我創建的命令字符串:

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ("+theDate+")"; 

然後,把它變成一個SQL命令:

SqlCommand myCommand = new SqlCommand(testCommand,conn); 

哪裏conn是數據庫連接。最後,我執行命令:

myCommand.ExecuteNonQuery(); 

當我運行它,它得到執行行,然後給我的錯誤:

Incorrect syntax near '11'. 

我試圖改變我的日期格式串了幾種方式,無濟於事。是否因爲我的數據庫需要smalldatetime類型而不是datetime類型? C#似乎沒有我可以使用的smalldatetime類型。任何有識之士將不勝感激!

回答

7

您需要包裝的日期在SQL字符串常量使用單引號...

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')"; 

或者使用參數..

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values (@myDate)"; 
cmd.Parameters.Add(new SqlParameter("@myDate", theDate)); 
+0

奏效!謝謝! – hemlocker

3

嘗試把單引號括起來的字符串中的日期...

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')"; 
+0

正如我在克里斯的回答中所讚揚的那樣,它起作用了!謝謝! – hemlocker

2

與DateTime類型和其他幾個人在數據庫工作而其使用@參數,所有convertions強烈recomended,如果你需要,例如:時區,格式或在客戶端做的任何事情。

另外,因爲,如您在您的帖子中提到的,該列是smalldatetime類型而不是字符串。

總之嘗試使用@參數並且很可能你會成功。

問候。

1

首先在日期前放置單引號。

例如

(「‘+ theDate +’」)「;

這通常是足夠的ISO你可能要考慮轉換功能

要小心的地方的信息來自於theDate如果它。來自可編輯字段(等),那麼這是SQL注入攻擊的候選人。

但是,如果您轉換爲dateTime,然後粘貼到一個SQL字符串中,是不是一層編碼?

+0

謝謝!不,我只是從另一個數據庫中提取信息:) – hemlocker

1

我建議你使用命名參數:

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values (@MYDATE)"; 
SqlCommand myCommand = new SqlCommand(testCommand,conn); 
myCommand.Parameters.Add(new SqlParameter("@MYDATE", SqlDbType.DateTime)).Value = theDate; 
myCommand.ExecuteNonQuery();