【问题标题】:Convert date type in c# to match sql server 2008 date type在 c# 中转换日期类型以匹配 sql server 2008 日期类型
【发布时间】:2015-07-18 18:45:37
【问题描述】:

我从应用程序中检索了一个日期并将其存储在一个 DateTime 变量中。日期格式为dd/mm/yyyy。

我现在想用这个日期更新 sql server 2008 数据库中的列(数据类型为日期 (yyyy/mm/dd)) 我已经尝试了下面的代码,但它给了我一个异常“字符串未被识别为有效日期时间”。请帮忙解决这个问题。

DateTime date = calExpirydate.SelectedDate;
DateTime date1 = DateTime.ParseExact(date.ToString(), "YYYY/MM/DD", CultureInfo.InvariantCulture);

【问题讨论】:

  • 为什么要将datetime 转换为字符串,然后解析它以创建新的日期时间?
  • 如果将日期作为参数值传递,则会隐式转换。
  • DateTime 值本身没有格式。仅当您转换为字符串以进行用户可视化时,格式化才重要。

标签: c# sql


【解决方案1】:

如果你使用参数,你根本不需要转换它(你应该这样做)。

一个粗略的例子:

DateTime date = DateTime.Now;

SqlCommand command = new SqlCommand();

command.CommandText = "INSERT INTO table (date) VALUES (@date)";   
command.Parameters.Add("@date",SqlDbType.DateTime).Value = date;

我在这里使用的是 SQL Server,但是这个概念在大多数 ADO.NET 提供程序中都是相似的。

【讨论】:

  • 我没有看到 a overload of Add 需要 String, object, SqlDbType。我想你想要Add("@date", SqlDbType.DateTime).Value = date
【解决方案2】:

框架中的 DateTime 变量以一种基本格式存储。它出现的方式只是格式化.ToString。它是说给我你的日期位让它看起来像这样。 Sql server 类似,它理解日期时间变量,无论它如何出现。

如果您将 DateTime 准确地传递到框架中,它将正确保存它。日期和时间并没有改变它的显示方式。您的尝试解析不起作用,因为它无法识别您提供的部分字符串。

您甚至不需要一个新的日期时间变量来以您想要的方式查看它。即使你成功了,你也会有相同的日期时间变量。

【讨论】:

    【解决方案3】:

    yyyy/MM/dd 应该是正确的

    DateTime string format

    【讨论】:

    • 不,不是,这完全取决于date.ToString() 为他当前的文化输出了什么。但是,他根本不应该将日期转换为字符串来完成他想要的!只需通过参数将 DateTime 传递给 SQL 查询。
    • SQL Server 明确识别的唯一字符串格式是yyyyMMdd(不带斜杠),所有其他字符串格式都有可能被误解,具体取决于服务器设置(切换日期和月份是一个典型的错误),因此,在极少数情况下,您应该使用唯一的插值参数数据是最佳选择。在 99% 的情况下,使用参数化查询是可行的方法,这也消除了格式问题。
    猜你喜欢
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2012-09-09
    相关资源
    最近更新 更多