2013-05-10 41 views
-2

一個錯誤,而使用C# 我正在使用DB(SQL服務器2005)存儲日期存儲 '日期' 在SQL Server 2005中,我如何使用C#查詢

DateTime mydate = DateTime.Now; 

insert into mytablename (appdate) values('"+mydate.ToShortDateString()+"'); 

BT的顯示錯誤,當我運行查詢

也試過,

mydate.ToShortDateString().ToString("dd-MMM-yyyy HH:mm:ss")在C#中,仍然顯示只有編輯錯誤。

我如何使用C#查詢

+3

使用[SqlParameter](http://msdn.microsoft.com/library/system.data.sqlclient.sqlparameter.aspx)!不要簡單地連接SQL語句和值! – Corak 2013-05-10 09:46:54

+0

你有什麼錯誤?你也應該考慮使用參數化查詢。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx – 2013-05-10 09:46:59

回答

3

使用參數化的SQL,並將其值設置爲參數:

string sql = "insert into tablename (appdate) values (@appdate)"; 
using (var connection = new SqlConnection(...)) 
{ 
    connection.Open(); 
    using (var command = new SqlCommand(sql, connection)) 
    { 
     command.Parameters.Add("@appdate", SqlDbType.DateTime).Value 
      = DateTime.Now; 
     int rowsInserted = command.ExecuteNonQuery(); 
     // TODO: Validation of result (you'd expect it to be 1) 
    } 
} 

你應該總是當你有數據包含在數據庫的請求中時,使用參數化的SQL。這可以避免SQL injection attacks和數據轉換問題,並保持代碼更清潔。

你也應該考慮是否真的希望它是本地日期/時間或UTC日期/時間。例如,您可能需要改用DateTime.UtcNow

3

您所查詢的存儲「日期」在SQL Server 2005中嘗試插入日期時間字段的字符串。當然,這是行不通的。
插入正確的方法是通過這樣的

string insertSQL = "insert into mytablename (appdate) values(@dt)"; 
SqlCommand cmd = new SqlCommand(insertSQL, con); 
cmd.Parameters.AddWithValue("@dt", mydate); 
cmd.ExecuteNonQuery(); 

這裏一個參數化查詢我假設連接已經初始化並打開

+0

你錯了,在查詢中編寫日期文字的方式與字符串的語法相同,所以只要日期格式是數據庫所期望的,工作得很好。 – Guffa 2013-05-10 09:49:09

+0

謝謝大家的回覆,但是我的查詢在我使用SQL Server 2008時有效,但在SQL Server 2005中不能使用 – Nils 2013-05-10 09:50:47

+1

@Guffa,關鍵是'數據庫期望值',一個參數可以避免這種情況。對?這可能是新數據庫失敗的原因。 – Steve 2013-05-10 09:54:10