C# 在WHERE子句中使用datetime执行查询
我使用SQLServer2008R2作为数据存储 到目前为止,在测试机上,我拥有该软件的英文版本,并用于将datetime字段格式化为C# 在WHERE子句中使用datetime执行查询,c#,sql-server,sql-server-2008,.nettiers,C#,Sql Server,Sql Server 2008,.nettiers,我使用SQLServer2008R2作为数据存储 到目前为止,在测试机上,我拥有该软件的英文版本,并用于将datetime字段格式化为 fromDate.ToString("MM/dd/yyyy"); 现在,我已经在另一台用意大利语编写的服务器上部署了数据库。我将把代码中的格式更改为 fromDate.ToString("dd/MM/yyyy"); 有没有一种方法可以使查询以中性格式进行 谢谢 编辑: 我忘了提到我正在使用CodeSmith的NetTiers。这是一个完整的样品 Appoin
fromDate.ToString("MM/dd/yyyy");
现在,我已经在另一台用意大利语编写的服务器上部署了数据库。我将把代码中的格式更改为
fromDate.ToString("dd/MM/yyyy");
有没有一种方法可以使查询以中性格式进行
谢谢
编辑:
我忘了提到我正在使用CodeSmith的NetTiers。这是一个完整的样品
AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
AppointQueryAQ=新任命查询(true,true);
aq.附录大于(任命列.任命日期,fromDate.至字符串(“MM/dd/yyyy”);
aq.附录(任命栏.任命日期,toDate.ToString(“MM/dd/yyyy”);
AppointmentService aSvc=新的AppointmentService();
TList appointmentsList=aSvc.Find(aq);
就我个人而言,我总是使用yyyy-MM-dd
。这也使得它可以作为字符串进行排序
但是,日期就是日期,日期就是日期。没有必要将日期更改为字符串。在.NET中,用户DateTime
您应该共享用于执行查询的代码,但我猜您正在使用字符串concats动态构建SQL查询,以构建查询和参数。您应该使用参数化查询,这样就可以将数据作为日期对象传递,而无需转换为字符串
例如,如果您的查询可能是这样的
DateTime fromDate = DateTime.Now;
SqlCommand cmd = new SqlCommand(
"select * from Orders where fromDT = @fromDate", con);
cmd.Parameters.AddWithValue("@fromDate", fromDate);
...
作为一个好的副作用,这将减少你的风险。
更新:在您的编辑之后,它确实显著地改变了问题的上下文,我必须承认我对.netTiers项目一无所知。但是出于好奇,您是否尝试过像下面那样直接传递日期实例
AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate);
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate);
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
AppointQueryAQ=新任命查询(true,true);
aq.附录大于(任命栏.任命日期,起始日期);
aq.附录(任命栏.任命日期,toDate);
AppointmentService aSvc=新的AppointmentService();
TList appointmentsList=aSvc.Find(aq);
同时允许YYYY-MM-DD和YYYYMMDD。SQL Server识别ISO规范
虽然标准允许
用于的YYYY-MM-DD和YYYYMMDD格式
完整日历日期
陈述,如果日期[DD]为
仅省略YYYY-MM格式
是允许的。通过禁止
格式YYYYMM,标准避免
与被截断的
年/月/日(仍然经常
使用)
我更喜欢YYYYMMDD格式,但我认为这是因为我只知道它是从一开始的,而且对我来说,它似乎更通用,因为它去掉了可能被视为特定于语言环境的字符。我认为
yyyy-MM-dd
(以及其他)是通用的。正如其他人所说,但值得重复,你真的不应该这么做。@ProfK:为什么我不应该?公平地说,@ProfK,他在你的编辑之前评论了这一点,这确实大大改变了问题的上下文。不,我没有使用字符串concats。有关更多详细信息,请参阅我的编辑。我忘了提到我使用的是来自NetTiers的强类型查询对象。thanks@Lorenzo,我更新了我的回复,以解决您在问题中提供的新信息,但这将问题带入了一种我没有使用过的技术,对此我在这里所说的话,恕我直言。不,我无法传递到各种append methods日期实例,因为它们只接受字符串参数。:)