我簡短的是實現其中有看起來像下面「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