我使用sql server 2008 R2作为数据存储。
到目前为止,在测试机上我使用了该软件的英文版,并用于将日期时间字段格式化为
fromDate.ToString("MM/dd/yyyy");
现在我已将数据库部署在另一台意大利语服务器上。我将把代码中的格式更改为
fromDate.ToString("dd/MM/yyyy");
有没有办法以中性格式进行查询?
谢谢!
修改:
我忘了提到我正在使用NetTiers和CodeSmith。这是一个完整的样本
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);
答案 0 :(得分:4)
<击> 您应该共享用于执行查询的代码,但我猜您正在使用字符串连接动态构建SQL查询来构建查询和参数。您应该使用参数化查询,然后您可以将数据作为日期对象传递,而无需转换字符串。
例如,如果您的查询可能是这样的
DateTime fromDate = DateTime.Now;
SqlCommand cmd = new SqlCommand(
"select * from Orders where fromDT = @fromDate", con);
cmd.Parameters.AddWithValue("@fromDate", fromDate);
...
作为良好的副作用,这将降低您SQL injection的风险。
击>
更新:您的编辑确实会显着改变问题背景,我不得不承认我对.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);
答案 1 :(得分:2)
ISO 8601 Data elements and interchange formats — Information interchange — Representation of dates and times同时允许YYYY-MM-DD和YYYYMMDD。 SQL Server识别ISO规范。
虽然标准允许两者兼而有之 YYYY-MM-DD和YYYYMMDD格式 完整的日历日期 表示,如果[DD]是 省略然后只有YYYY-MM格式 被允许。禁止日期 形式YYYYMM,标准避免 与截断的混淆 代表YYMMDD(仍然经常 使用)。
我更喜欢YYYYMMDD格式,但我认为这是因为我只知道这一点,并且对我而言似乎更具普遍性,已经废除了可能被认为是特定于语言环境的字符。
答案 2 :(得分:1)
就个人而言,我总是使用yyyy-MM-dd
。这也使它可以作为字符串排序。
但是,日期是日期是日期。无需将日期更改为字符串。在.NET中,用户DateTime
。