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

C# 存储过程中的日期比较格式,c#,linq,datetime,stored-procedures,formatting,C#,Linq,Datetime,Stored Procedures,Formatting,我有一个sql server 2005数据库和一个存储过程,它接受两个日期,并对数据@start_date_from和@start_date_to进行比较,这两个数据的类型都是DATETIME 我们使用LINQ从代码中调用存储过程,并将存储过程拖到LINQ表面上生成一个方法调用,该调用接受可为null的日期时间 我面临的问题是,用户界面中的日期输入为dd/MM/yyyy(我们在澳大利亚),并解析为C#DateTime 一旦调用存储的proc,它似乎会将其转换为美式日期。我正在寻找一种防止这种情况

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

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

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

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

我曾尝试在proc中使用SET-DATEFORMAT-dmy,但似乎没有任何影响,我认为它必须经过一次尝试或采取一些措施才能生效

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

我想我还可以将输入参数更改为varchars,并以明确的格式输入日期

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


那么,我还应该使用哪些其他选项(或者我列出的选项中的哪一个?

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

DateTime.Parse("11/12/1981", new CultureInfo("en-US"));
如果用户之间的区域性不同,您可能希望使用当前线程的区域性:

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