我简短的是实现其中有看起来像下面“GetValuesSqlStatement”的方法的接口的最佳实践:现在什么是查询日期的SQL时,参数化查询是不可能
public string SqlPattern { get { ... } }
//this varies; eg. "SELECT name FROM someTable WHERE startDate < {0}"
public string DatabaseType { get { ... } }
//this varies; eg. "SqlServer"
public string GetValuesSqlStatement(List<object> paramValues)
{
//...desired logic here, using DatabaseType, SqlPattern and paramValues
}
,因为这必须产生一个可执行的SQL语句,我不能在执行查询时使用参数。我必须实现的接口是不可协商的。继续确保结果中的日期由数据库查询引擎正确解释的最佳方法是什么?假设paramValues包含.NET DateTime对象,在插入SQL模式字符串之前,这些对象应该如何格式化为字符串?必须数据库中最常用的通用日期格式是什么? (比如'dd-mmm-yyyy')。
注:我只需要真正担心从2005年开始的SQL Server和Oracle 10g以上。所以SQL必须是有效的T SQL和PL SQL,并且在这两种口味中意味着相同的东西。
那么我有DatabaseType字符串来帮助我构建这个查询。如果你说'yyyy-mm-dd'适用于除SQL Server之外的所有应用程序,那么我可以使用条件逻辑。如果'yyyy-mon-dd'同时适用于SQL Server和Oracle,那当然会满足我的需求,但这并不一定是我猜的最佳实践。 – Lisa
@Lisa,你必须尝试。我从来没有法国服务器,我总是使用YYYY-MM-DD。您会在Aaron的文章中看到该连接项,它不适用于新的date和datetime2数据类型。在SQL Server中。根据我在Oracle中的经验,文字总是要求DATE限定词将它们与字符串区分开来。你可能需要将你的日期字符串生成封装在特定于数据库的东西中。 –
我突然有了一个更好的主意,哪种让这个问题没那么有用。即使不是严格回答问题,我也可以将其作为第三个答案添加。 – Lisa