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

本文关键字:MS SQL 出错 保存 时间 C#asp net 日期 使用 | 更新日期: 2023-09-27 18:21:05

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

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

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

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

原因可能是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");

首先删除convert.todatetime,然后进行检查。因为在sql中它已经是日期时间了。所以这里不需要转换。

我的猜测是您传递的日期时间的语言环境格式不正确。调试代码可能是值得的,以查看sqlserver所期望的内容与您所提供的内容。通常,我发现这通常是一种将过去日期的日期和月份部分作为备用格式的情况。

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

你也可以从客户端尝试:

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

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

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

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

我认为您也应该在插入查询中添加列名,因为如果序列不正确,那么可能会发生将错误值传递给日期-时间列的情况。

这一定是由于MSSQL服务器和C#中的日期时间格式不同。当我尝试在不同版本的SQL server上运行应用程序时,我在EF中也看到过这种情况。

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

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

我相信在那之后你一定能找到解决办法。