2013-05-18 49 views
-1

,當我嘗試插入datetime值到SQL Server數據庫中,我得到這個錯誤:插入日期時間從C#爲SQL Server數據庫

Conversion failed when converting date and/or time from character string

代碼:

connection.Open(); 
SqlCommand command = new SqlCommand("insert into table values(@time)", connection); 
command.Parameters.AddWithValue("@time", DateTime.Now); 
command.ExecuteNonQuery(); 
connection.Close(); 

table有1個datetime列稱爲time

編輯:
我的表在MSSQL 2012創建:http://i.imgur.com/TJ3t3y7.png
我真正的代碼是:

public void vytvorDotaz(String uzivatel, DateTime cas, String nazev, String dotaz) 
    { 
     int id = getMaxID() + 1; 
     connection.Open(); 
     SqlCommand command = new SqlCommand("insert into otazky values('" + id + "', '" + uzivatel + "', '0','0','0','@cas','" + nazev + "','" + dotaz + "')", connection); 
     command.Parameters.AddWithValue("@cas", DateTime.Now); 
     command.ExecuteNonQuery(); 
     connection.Close(); 
    } 
+2

你的插入語句是否真的有**一個**單引號或者是一個錯誤類型? –

+0

備註:從SQL Server ** 2008 **開始,有一個名爲'TIME'的新數據類型 - 僅僅調用'time'列是非常糟糕的想法 - 使用更有意義,更有表現力的東西! –

+0

請寫出實際的SQL,而不是該問題的dummy-sql。另外,你試圖存儲DateTime的列的類型是什麼? –

回答

2

這裏的實際問題是,你寫引號內的參數:

... ,'0','@cas',' ... 
     ^^

這不會使用@cas作爲參數,你實際上是試圖插入字符串「@cas」成該列,而不是參數@cas的內容。

刪除引號,該部分應該工作。

此外,不要使用字符串連接來構建SQL,爲所有事情使用參數,從SQL注入攻擊或引號或什麼都不需要頭疼。這與你正在使用的「id」,「uzivatel」,「nazev」和「dotav」參數有關(方法參數是)。

2

看起來像你需要:

insert into table values(@time) 

沒有單個字符的報價。

+0

啊我很抱歉,這個錯誤是我在清除代碼時(通常我有超過1個參數)所做的......我的問題是將asp日期轉換爲SQL日期時間....我編輯了代碼,但thnx – Eleer

0

嘗試System.Data.SqlTypes.SqlDateTime另外,當存儲日期時,請考慮將它們存儲爲UTC以防止混淆。

+0

我錯過了@Darren所提到的單引號,這很可能是問題所在。 –

相關問題