使用C#asp.net将datetime保存到MS SQL时出错

使用C#asp.net将datetime保存到MS SQL时出错,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我在将数据从日期选择器保存到ms sql数据库时遇到问题。MSSQL中的我的列设置为[日期时间]。我有这段代码,但在保存时出错,因为它无法将日期/时间转换为正确的格式。你能帮助我吗。多谢各位 错误是:从字符串转换日期和/或时间时,转换失败 protected void RadButton1_Click(object sender, EventArgs e) { string CS = ConfigurationManager.ConnectionStrings["MyCo

我在将数据从日期选择器保存到ms sql数据库时遇到问题。MSSQL中的我的列设置为[日期时间]。我有这段代码,但在保存时出错,因为它无法将日期/时间转换为正确的格式。你能帮助我吗。多谢各位

错误是:从字符串转换日期和/或时间时,转换失败

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();

 }
}

原因可能是mysql和C#中的日期格式不同。
将值发送到函数时需要相同的格式

您可以使用以下格式

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

DateTime.Now.ToString("yyyyMMddHHmmss");
就你而言

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

我猜您传递的日期时间的区域设置格式不正确。调试代码以查看sqlserver期望的内容与您提供的内容可能是值得的。通常,我发现这通常是一种情况,即所传递日期的日和月部分是备用格式

您还可以对输入尝试ToString()格式,将其放入预期的区域性/区域设置中

您也可以从客户端尝试:

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


(或任何您喜欢的日期格式)

首先删除convert.todatetime,然后选中。因为在sql中,它已经是datetime了。所以这里不需要转换。

一个解决方案可以是传递mysql日期时间格式

i、 e


我认为您也应该在insert查询中添加列名,因为如果序列不正确,则可能会发生向date time列传递错误值的情况。

这一定是因为MSSQL server和C#中的datetime格式不同。当我尝试在不同版本的SQL server上运行应用程序时,我在EF中也看到了这种情况

由于您没有提到sql server的版本,我建议您在运行insert命令时运行sql server探查器

然后从SQL server探查器中获取SQL语句,并将SQL查询中的日期格式与SQL server日期格式进行比较


我相信在那之后你会找到解决办法的

您应该调试代码,查看
SelectedDate
值是否不为null,是否与预期格式匹配。作为附带说明,最好在insert查询中命名字段。如果在表中添加或删除字段,则当前查询将被中断。可能是因为Time\u From和Time\u to?或者它们也是[datetime]格式的?你能分享一下你得到的错误吗?我想他是在转换他的输入字符串,而不是sql server columnRadDatePicker1。SelectedDate仅表示其日期时间。那么为什么他再次转换..Prasad谢谢你,但是我仍然得到了这个cmd.Parameters.AddWithValue的相同错误(“@Date\u From”,RadDatePicker1.SelectedDate);使用此代码Convert.ToDateTime(RadDatePicker1.SelectedDate).ToString(“yyyy-MM-dd HH:MM:ss”);那个似乎起作用了。无线电时间选择器呢?转换是多少,因为我在那个问题上出错了。谢谢。我收到这个错误---从字符串转换日期和/或时间时转换失败。请参阅prasads的答案,这可能会有所帮助
cmd.Parameters.AddWithValue("@Time_From",
"date_format(" +  (RadTimePicker1.SelectedDate.ToString("yyyy-MM-dd HH:mm:ss") 
+ ",'%Y-%m-%d %h:%i:%s')" ));