2012-06-15 63 views
0

我有一個gridview和sqldatasource。以另一種格式插入數據庫日期

我試圖在數據庫中插入新記錄,Date列的類型是Date和默認格式是US,mm/dd/yyyy,我試圖用另一種格式插入日期。

SqlDataSource2.InsertCommand = "Insert into test (Name,Date) VALUES (@Name,@CONVERT(Date,'@Date',104))"; 
     SqlDataSource2.InsertParameters.Add("Name", nameText); 
     SqlDataSource2.InsertParameters.Add("Date", DbType.DateTime, date.Text); 

我得到:String未被識別爲有效的DateTime。

感謝

+0

'date'(和'datetime','datetime2'等)列不包含*格式。他們只是存儲日期(和時間)。在將它作爲參數添加之前,將您的字符串轉換爲「DateTime」,並讓ADO.NET和SQL Server處理它。 –

+0

是的..我做到了,但insertt不會接受日期時間值,我需要將它轉換爲字符串並添加它? – Jax

+0

*否*,你想*避免*把它當作一個字符串。 –

回答

4

檢索數據在數據庫格式無關的日期類型(除非你把它存儲爲一個字符串)。

您可能首先嚐試使用DateTime.ParseExactDateTime.Parse來獲得有效的System.DateTime對象。

然後,用這個值設置SqlParameter。

DateTime dateValue = DateTime.Parse(date.Text); // try to make this working first. 
SqlDataSource2.InsertCommand= "Insert into test (Name,Date) VALUES (@Name,@Date)"; 
    SqlDataSource2.InsertParameters.Add("Name", nameText); 
    SqlDataSource2.InsertParameters.Add("Date", DbType.DateTime, dateValue); 
+0

Ups我的壞...我用Selectcommand代替插入命令:D – Jax

+1

建議在應用程序級別準備正確的對象類型仍然有效。它將更易於維護,並讓數據庫驅動程序爲其構建。 –

2

首先,你應該使用DateTime對象,而不是Date.Text,首先你的文本轉換爲DateTime

第二你不需要格式化日期時間,而如果插入的數據類型是DATATIME在SQLServer的表只是使用。

"Insert into test (Name,Date) VALUES (@Name, @Date)"; 

你應該格式化日期時間,而在select

+0

是的,但它不會插入例如30/02/2012,因爲它只允許mm/dd/yyyy – Jax

+0

@Jax這不是T-SQL DateTime類型的工作方式。 – tomfanning

相關問題