将日期和/或时间从字符转换为数值时转换失败

4

在将数据添加到数据库中时,日期范围 (date_to 和 date_from) 出现错误。在 SQL Server 数据库中,date_to 和 date_from 的数据类型为 date。请提供一些解决方案。

try
{
   cmd = new SqlCommand("insert into license1 values(@l_id,@customer_id,@d_id,@device_name,@from,@to)", cn);

   cmd.Parameters.AddWithValue("@l_id", license_id.Text);
   cmd.Parameters.AddWithValue("@customer_id", c_comboBox4.Text);
   cmd.Parameters.AddWithValue("@d_id", d_id_comboBox4.Text);
   cmd.Parameters.AddWithValue("@device_name", d_name_comboBox5.Text);
   cmd.Parameters.AddWithValue("@to", date_to.Text);
   cmd.Parameters.AddWithValue("@from", date_from.Text);

   cn.Open();
   a = cmd.ExecuteNonQuery();
   if (a > 0)
   {
      MessageBox.Show("Data Submitted");
   }

 }
 catch (Exception ex)
 {
      MessageBox.Show(ex.Message);
 }

4
请始终发布准确的错误信息。 - H H
1
用户在文本框中输入的日期格式是什么? - Sudhakar Tillapudi
5个回答

11

掌握转换的主动权:

cmd.Parameters.AddWithValue("@to", DateTime.Parse( date_to.Text));
cmd.Parameters.AddWithValue("@from", DateTime.Parse( date_from.Text));

当以上方法仍然失败时,可以使用适当的格式和CultureInfo版本的DateTime.ParseExact()

您可能需要考虑添加更强大和广泛的验证层。日期和数字非常敏感于打字错误、用户设置和用户假设。

始终假定TextBox.Text充满错误。


4
如果用户输入日期格式为:yyyy-MM-dd,则请尝试以下操作:
String strDateFormat= "yyyy-MM-dd";//change accordingly if format is something different
DateTime to=DateTime.ParseExact(date_to.Text,strDateFormat, CultureInfo.InvariantCulture);    
DateTime from=DateTime.ParseExact(date_from.Text, strDateFormat, CultureInfo.InvariantCulture);

cmd.Parameters.AddWithValue("@to", to);
cmd.Parameters.AddWithValue("@from", from);

3

试试这个

 cmd.Parameters.AddWithValue("@to",Convert.ToDateTime(date_to.Text));
 cmd.Parameters.AddWithValue("@from",Convert.ToDateTime( date_from.Text});

0

如果在执行代码时问题仍然存在,可能有两个重要原因:

  1. 您使用了 DateTime.Now.ToShortString 或类似的自动转换方法,
  2. 您更改了计算机默认的日期时间格式设置。

更改计算机的日期时间格式或将自动转换更改为“解析”方法。


0

我认为你的日期格式可能导致了问题。你必须使用SQL提供程序支持的日期格式。大多数SQL使用MM-dd-yyyy格式。因此,如果你传递21-1-2014,SQL服务器不会接受它,因为第21个月不存在。


在SQL Server中,DATETIME的唯一真正文化不变格式是yyyyMMdd。 - GarethD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接