我想讓一個程序在SQL Server上執行一些查詢,出於某種原因代碼有奇怪的行爲,因爲它會在我的計算機上創建不同的日期值。在不同的計算機上扮演奇怪的日期時間
這是代碼行爲怪異的一部分。
Query += " dbo.MensajesProcesados.SentDateTime BETWEEN CONVERT(VARCHAR, '" + FechaInicio.Value.ToUniversalTime().ToShortDateString() + "', 103) AND CONVERT(VARCHAR, '" + FechaFin.Value.ToUniversalTime().ToShortDateString() + "', 103)";
在第一個計算機(工作)
給我:
BETWEEN CONVERT(VARCHAR, '5/18/2015', 103) AND CONVERT(VARCHAR, '5/19/2015', 103)
和第二計算機,它不工作:
BETWEEN CONVERT(VARCHAR, '17/05/2015',103) AND CONVERT(VARCHAR, '19/05/2015',103)
這一個不能正常工作,並會輸出我下面錯誤
將varchar數據類型導致日期時間數據類型導致超出範圍值。
請,任何幫助將是偉大的!
如果停止串聯您的SQL,而使用的參數,這些各種各樣的問題也就不存在了。而且,作爲一項額外功能,您的代碼不會爲SQL注入而廣泛開放。 –
您在問題中顯示了2種不同的日期格式,但您無法向轉換器指定使用何種格式(在提供的示例代碼中)。 convert函數應該如何知道第一個數字是否代表日期時間的月份或日期?您可以更改轉換器使用的格式或日期時間使用的格式(用於字符串輸出),但正確的解決方案是使用params正確執行SQL。 SQL庫可能非常有用,並且提供的不僅僅是執行字符串SQL語句的簡單方法。 – gnomed
@KenWhite問題是,我不知道另一種方法來做我所需要的,如果我不使用連接,因爲我有各種搜索參數,如果文本框中有東西,它會在where子句中使用它,否則它不會,你怎麼能用params來實現呢? –