2

我在将数据从 datepicker 保存到我的 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();

 }
}
4

6 回答 6

1

原因可能是 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");
于 2013-07-04T11:38:53.763 回答
0

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

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

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

我相信您将能够在此之后找到解决方案。

于 2013-07-04T14:30:38.180 回答
0

一种解决方案也可能是传递 mysql 日期时间格式

IE

cmd.Parameters.AddWithValue("@Time_From",
"date_format(" +  (RadTimePicker1.SelectedDate.ToString("yyyy-MM-dd HH:mm:ss") 
+ ",'%Y-%m-%d %h:%i:%s')" ));
于 2013-07-04T12:05:14.577 回答
0

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

于 2013-07-04T13:35:06.637 回答
0

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

您还可以在输入上尝试 ToString() 格式,将其放入您期望的预期文化/语言环境中。

您也可以从客户端尝试它:

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

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

于 2013-07-04T11:40:15.870 回答
0

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

于 2013-07-04T11:41:44.860 回答