【问题标题】:Date comparison format in stored procedure存储过程中的日期比较格式
【发布时间】:2010-11-02 16:22:23
【问题描述】:

我有一个 sql server 2005 数据库和一个存储过程,它接受两个日期并对数据 @start_date_from 和 @start_date_to 进行一些比较,这两个数据都是 DATETIME 类型。

我们正在使用 LINQ 从我们的代码中调用存储过程,并将存储过程拖到 LINQ 表面上会生成一个方法调用,该方法调用接受可为空的日期时间。

我面临的问题是我们从用户界面输入的日期为 dd/MM/yyyy(我们在澳大利亚)并被解析为 C# DateTime。

一旦对存储过程的调用发生,它似乎会将其转换为美式日期。我正在寻找一种方法来防止这种情况发生,希望不必更改 proc 中参数的数据类型。

我曾尝试在 proc 中使用 SET DATEFORMAT dmy 但它似乎没有任何影响,我认为它必须需要 GO 或其他东西才能生效。

我正在考虑在存储过程中尝试一些时髦的格式化/转换/转换,但这似乎是最后的手段。

我想我也可以将输入参数更改为 varchars 并将日期设置为明确的格式。

在 proc 本身中,日期与 BETWEEN 关键字一起使用(如果这有什么不同的话)。

那么我应该选择哪些其他选项(或我已经概述的哪些选项)?

【问题讨论】:

    标签: c# linq datetime stored-procedures formatting


    【解决方案1】:

    我猜用户输入被隐式转换为日期时间?我会说您需要在调用 SP 之前将用户输入解析为有效的 DateTime。

    DateTime.Parse("11/12/1981", new CultureInfo("en-US"));
    

    如果用户之间的文化不同,您可能希望使用当前线程的文化:

    DateTime.Parse("11/12/1981", System.Threading.Thread.CurrentThread.CurrentUICulture);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多