2015-06-21 110 views
0

我不知道我需要做什麼。我搜索了兩天,沒有找到有用的東西。將一個varchar數據類型的asp轉換爲datetime錯誤SQL aspx

fieldValue = row.Cells[0].Text; 
DateTime timeNow = DateTime.Now; 

string constring = System.Configuration.ConfigurationManager.ConnectionStrings["ITCConnectionString"].ConnectionString; 
using (SqlConnection connection = new SqlConnection(constring)) { 
    timeNow = Convert.ToDateTime(timeNow); 
    using (SqlCommand cmd = new SqlCommand("UPDATE AktywneZgloszenia SET Data_przyjecia_do_realizacji='" + timeNow + "' WHERE Nr_zgloszenia ='"+fieldValue+"';", connection)) { 
     using (SqlDataAdapter da = new SqlDataAdapter(cmd)) { 
      connection.Open(); 
      cmd.ExecuteNonQuery(); // <--executeNon 
      connection.Close(); 
      GridView1.DataBind(); 
     } 
    } 
} 

當我試圖保存/更新變量timeNow我有一個錯誤:在兩個數據庫類型

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. The statement has been terminated.

柱=日期時間 變量戴恩[]類型=字符串(未英寸這個片段) 我清除了數據庫中的所有數據。 我做錯了什麼?

+0

假設這是SQL Server中,這會是區域設置?例如。你試圖存儲21/06/2015而不是2015/6/21?如果您使用字符串YYYYMMDD是唯一安全的格式。 –

+1

使用正確數據類型的參數化查詢。 –

+0

我做了:DateTime timeNow = DateTime.Now.ToString(「yyy-MM-dd HH:mm:ss」); - 不能隱式地將type'string轉換爲System.DateTime。我嘗試了這樣的事情:DateTime timeNow = DateTime.Now; string format =「yyyy-MM-dd HH:mm:ss」; format = timeNow.ToString(format);但仍然像第一個一樣的錯誤。 – Kafus

回答

3

正如Martin Smith所暗示的,您希望使用SQL命令參數,而不是通過串聯構建命令。

喜歡的東西:

fieldValue = row.Cells[0].Text; 
DateTime timeNow = DateTime.Now; 

string constring = System.Configuration.ConfigurationManager.ConnectionStrings["ITCConnectionString"].ConnectionString; 
using (SqlConnection connection = new SqlConnection(constring)) { 
// timeNow = Convert.ToDateTime(timeNow); (not needed) 
using (SqlCommand cmd = new SqlCommand("UPDATE AktywneZgloszenia SET Data_przyjecia_do_realizacji= @pTimeNow WHERE Nr_zgloszenia = @pFieldValue;", connection)) { 
    using (SqlDataAdapter da = new SqlDataAdapter(cmd)) { 
     connection.Open(); 
    cmd.Parameters.AddWithValue("@pTimeNow", timeNow); // <-- 'pass' timenow 
    cmd.Parameters.AddWithValue("@pFieldValue", fieldValue); // <-- 'pass' fieldValue 
     cmd.ExecuteNonQuery(); // <--executeNon 
     connection.Close(); 
     GridView1.DataBind(); 
    } 
} 

}

+0

使用SQL參數的做法性能更好,可以防止SQL注入攻擊。 – Stan

+1

刪除此行:'timeNow = Convert.ToDateTime(timeNow);'。它已經是DateTime了,不需要再次轉換它。 –

+0

Good catch @Zohad Peled - 來自OP的代碼,與答案無關,我完全應該刪除它。上面評論的連續性和清晰度。 – Stan

相關問題