存储过程中的日期比较格式

时间:2010-11-01 13:10:16

标签: c# linq datetime stored-procedures formatting

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

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

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

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

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

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

我想我也可以将输入参数更改为varchars并将日期置于不显眼的格式中。

在proc本身中,日期与BETWEEN关键字一起使用(如果这有任何区别)。

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

1 个答案:

答案 0 :(得分:1)

我猜用户输入是否隐式转换为DateTime?我会说你需要在调用SP之前将用户输入解析为有效的DateTime。

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

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

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