【问题标题】:sql datetime parameter problemsql datetime参数问题
【发布时间】:2010-12-31 05:34:56
【问题描述】:

大家好,

我这样传递日期参数:

 DateTime date = DateTime.Now;
  date.ToString("YYYY-MM-DD 00:00:00:000");

但是得到这个例外:

System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753        12:00:00 AM and 12/31/9999 11:59:59 PM. at System.Data.SqlTypes.SqlDateTime.FromTimeSpan(TimeSpan value) at System.Data.SqlTypes.SqlDateTime.FromDateTime(DateTime value)

【问题讨论】:

  • 如何传递参数;使用命令对象的查询字符串?
  • 您能否发布用于将日期时间持久化到数据库的代码,因为那是错误所在。如果您实际上还可以告诉我们您发布的代码的哪一行有错误,我们将能够尽快解决此问题
  • 您发布的“代码”没有任何作用。请发布与数据库对话的实际代码(或合理的替代品)。 .ToString() 方法不会产生 SQL 异常。
  • 你的 .ToString() 格式都是错误的——你需要更加小心你的格式字符串!这些字符区分大小写!您需要使用.ToString("yyyy-MM-dd") - 小yd 和大写M

标签: c# sql datetime


【解决方案1】:

秒和毫秒之间应该有一个小数点。格式字符串区分大小写。试试:

date.ToString("yyyy-MM-dd")

date.ToString("yyyy-MM-dd HH:mm:ss.fff")

还要问问自己是否真的需要将参数转换为字符串。它闻起来很奇怪,可能没有必要。如果您只想传递日期而不传递时间,则将 DateTime 对象的 Date 属性作为参数值传递。保持强类型以避免 SQL 注入、性能和类型转换问题。

【讨论】:

    【解决方案2】:

    这里没有传入参数,通过查看生成的SqlTypeException,您发布的代码示例不完整

    日期格式也应该是:

    date.ToString("yyyy-MM-dd HH:mm:ss:fff")
    

    【讨论】:

    • Philip Fourie->您好,仍然遇到这个异常
    【解决方案3】:

    如果你试图忽略时间部分(因此你的零)尝试

    date.ToString("yyyy-MMM-dd");
    

    如果你也想要时间部分...

    date.ToString("yyyy-MMM-dd hh:mm:ss.fff tt");
    

    请注意,这两个月都有 3 Ms,这使它们成为 SQL 应该能够解析并且不能误解的明确字符串。

    但是,为什么不直接将值作为日期对象传递而不是转换为字符串呢?

    【讨论】:

    • 这个答案与已经发布的答案基本相同。为什么要在 2 年后发布这个?
    • 没有检查日期!其实不一样。每个人都坚持将月份作为字符串中的 2 个字符。使用 3 个字符,这样就很明确了,当然如果你必须有字符串的话。
    • 在你的回答中提到为什么你添加了一个额外的“M”会很重要......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多