【问题标题】:Sending precise datetime to SqlDataSource as parameter将精确的日期时间作为参数发送到 SqlDataSource
【发布时间】:2011-09-21 11:54:20
【问题描述】:

我想将 .Net DateTime 作为参数添加到 SqlDataSource。我知道如何添加参数,但我需要尽可能精确地添加 DateTime。它需要非常精确,因为有些表使用日期时间列作为键,如果发送的日期时间不够精确,连接将无法正常工作。

旧的方式(没有 SqlDataSource)是这样的:

SqlCommand cmd = new SqlCommand();
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "PosT2sNwu.RPT_GetFundTransactions";
cmd.Parameters.Add(new SqlParameter("@FromDate", fromDate));

似乎SqlDataSource 的参数只带字符串。

所以问题是:如何格式化字符串(从 .Net DateTime 生成),以便它在存储过程中尽可能精确(精确到毫秒,甚至微秒)?

【问题讨论】:

  • 试用 fromDate.ToString("yyyy/MM/dd HH:mm:ss fffffffzz"),
  • 格式化日期是万恶之源。
  • 是的。我不明白为什么微软决定退后一步,只允许您将参数设置为字符串。为什么不允许我直接设置 DateTime 对象?
  • fromDate.ToString("yyyy/MM/dd HH:mm:ss fffffffzz") 不起作用,但是 fromDate.ToString("yyyy/MM/dd HH:mm:ss fffffff") (没有 zz)似乎有效。

标签: .net asp.net sql-server


【解决方案1】:

使用使用SqlDbType作为参数的重载SqlParameter构造函数

SqlParameter(String, SqlDbType, Int32) 
SqlParameter(String, SqlDbType, Int32, String) 

然后使用 MSDN 页面上描述的 SqlDbType.DateTime 作为“日期和时间数据,范围从 1753 年 1 月 1 日到 9999 年 12 月 31 日,精度为 3.33 毫秒”。

【讨论】:

  • 我不认为真正回答了这个问题
  • Bertus 必须做出决定。根据这个论坛帖子progtown.com/…,存在精度损失:“数值四舍五入到 0.003 或 0.007 秒的增量,如表中所示。”
  • 我将再次标记这一点,只是为了将 .003 和 .007 精度信息引入讨论。
【解决方案2】:

这有用吗?

http://msdn.microsoft.com/en-us/library/z72eefad.aspx

您应该能够在日期时间调用 tostring,结果将包括所有部分,精确到毫秒。

【讨论】:

  • 格式化日期是万恶之源。
  • 为什么要标记这个?我们将不胜感激。
  • 在 OP 中我已经声明我知道如何添加参数。这不是问题。问题在于日期时间参数的精度以及随之而来的包袱。
【解决方案3】:

您可以在文件后面的代码中指定参数的类型(如 Karel 建议的,指定 DateTime)或通过设置 Type 属性 Type="DateTime" 来声明性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多