2013-07-04 17 views
2

我遇到了將數據從datepicker保存到我的ms sql數據庫的問題。我的MSSQL列設置爲[日期時間]。我有這個代碼,但我在保存時出錯,因爲它無法將日期/時間轉換爲正確的格式。你可以幫我嗎。謝謝。使用C#asp.net將日期時間保存到MS SQL時出錯

錯誤是:轉換日期和/或時間從字符串轉換失敗。

protected void RadButton1_Click(object sender, EventArgs e) 
{ 
      string CS = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; 
      using (SqlConnection con = new SqlConnection(CS)) 
      { 

       string str = "insert into Leave_Application values(@Badge_Number, @Name, @Section, @Position, @Date_Hired, @Leave_Type, @Date_From, @Date_To, @Time_From, @Time_To, @Reason, '0', getdate(), 'NULL', ' ')"; 
       con.Open(); 
       cmd = new SqlCommand(str, con); 

       cmd.Parameters.AddWithValue("@Badge_Number", lblBadgeNo.Text); 
       cmd.Parameters.AddWithValue("@Name", lblName.Text); 
       cmd.Parameters.AddWithValue("@Section", lblSect.Text); 
       cmd.Parameters.AddWithValue("@Position", lblPos.Text); 
       cmd.Parameters.AddWithValue("@Date_Hired", lblDateEmp.Text); 
       cmd.Parameters.AddWithValue("@Leave_Type", RadioButtonList1.SelectedValue); 
       cmd.Parameters.AddWithValue("@Date_From", Convert.ToDateTime(RadDatePicker1.SelectedDate)); 
       cmd.Parameters.AddWithValue("@Date_To", Convert.ToDateTime(RadDatePicker2.SelectedDate)); 
       cmd.Parameters.AddWithValue("@Time_From", Convert.ToDateTime(RadTimePicker1.SelectedDate)); 
       cmd.Parameters.AddWithValue("@Time_To", Convert.ToDateTime(RadTimePicker1.SelectedDate); 
       cmd.Parameters.AddWithValue("@Reason", txtReason.Text); 

       cmd.ExecuteNonQuery(); 
       con.Close(); 

} 
} 
+0

您應該通過代碼進行調試,看看「SelectedDate」值是否爲空並且與預期格式匹配。 –

+1

作爲一個側面的說法,最好是在插入查詢中命名這些字段。如果你添加或刪除一個字段到你的表中,你當前的查詢將被打破。 –

+0

也許是因爲Time_From和Time_To?或者它們是否也是[datetime]格式? –

回答

1

原因可能是mysql和C#中date的格式不同。
您需要使用相同的格式將值發送到函數。

您可以使用以下格式

DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 

DateTime.Now.ToString("yyyyMMddHHmmss"); 

在你的情況

Convert.ToDateTime(RadDatePicker1.SelectedDate).ToString("yyyy-MM-dd HH:mm:ss"); 
0

我的猜測是要傳遞的日期時間不正確的本地格式。可能值得調試代碼,以查看sqlserver所期待的與您提供的內容。通常,我發現這通常是通過日期的日期和月份部分是替代格式。

您還可以在輸入上嘗試ToString()格式,將其放入預期的期望文化/區域設置中。

你也可以從事物的客戶端嘗試:

<telerik:RadDatePicker ID="RadDatePicker1" DateInput-DateFormat="MM/dd/yyyy"> 
</telerik:RadDatePicker> 

(或其他日期格式逗你的幻想)

+0

我得到這個錯誤---轉換日期和/或時間從字符串轉換失敗。 –

+0

看到prasads的答案,這可能是幫助 –

0

先刪除然後convert.todatetime檢查。因爲在sql中它已經是datetime了。所以在這裏不需要轉換。

+0

我認爲他正在轉換他的輸入字符串,而不是sql服務器列 –

+0

RadDatePicker1.SelectedDate意味着它的日期時間只。那麼他爲什麼再次轉換.. – Prasad

+0

嘿,我認爲你是正確的,我的壞! –

0

一種解決方案可能是通過mysql的日期時間格式以及

cmd.Parameters.AddWithValue("@Time_From", 
"date_format(" + (RadTimePicker1.SelectedDate.ToString("yyyy-MM-dd HH:mm:ss") 
+ ",'%Y-%m-%d %h:%i:%s')")); 
0

我想你應該在插入查詢過添加的列名,因爲如果序列是不正確的,那麼這可能發生錯誤的值到日期時間列。

0

這必須是由於MSSQL服務器和C#中的日期時間格式不同所致。當我嘗試在不同版本的SQL Server上運行應用程序時,我也看到了這種情況。

由於您尚未提及您的SQL Server版本,因此我建議您在運行insert命令時運行SQL Server Profiler。

然後從SQL Server事件探查得到的SQL語句和比較DATEFORMAT在您的SQL查詢對您的SQL服務器的日期格式。

我相信你會在那之後找到解決方案。