從我的程序到SQL中的存儲過程的日期有問題。從VB.NET將Nvarchar數據類型轉換爲datetime時出錯
我的程序從Excel電子表格需要一個日期並分析它是這樣:
tempDate = Date.FromOADate(exWS.Cells(exRow, myMatchedColumns(2)).value)
Dim format() = {"dd/MM/yyyy", "dd-MM-yyyy", "yyyy-MM-dd"}
dueDate = Date.ParseExact(tempDate, format,
System.Globalization.DateTimeFormatInfo.InvariantInfo,
Globalization.DateTimeStyles.None)
的dueDate爲「DATE」變量,因此我假設在這一點上「的dueDate」是一個普遍的Date對象。我認爲這是分析英語區域日期和波蘭語日期的最佳方式,因爲這將在波蘭機器上使用。
然而,發送值時我的存儲過程:
mySQLString = "EXEC bsp.PartPrice_sp " & _
"'" & dueDate & "', " & _
"'" & myPartID & "', " & _
"'" & currency & "'"
英語發送EXEC bsp.PartPrice_sp '01/09/2015', 'L555', 'USD'
返回的價格。
波蘭發送EXEC bsp.PartPrice_sp '2015-09-01', 'L555', 'USD'
這將產生錯誤:
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
我理解錯誤,但存儲過程的下一次執行,波蘭機發送2015-09-10
其返回的價格罰款。我猜測自2015-10-09
仍然在範圍內,但有趣的是,它返回了2015年9月10日的正確價格。
儘管如此,我仍在努力尋找以英語和波蘭語執行存儲過程的通用方式。任何幫助你正確地解析日期,這也使SQL開心會很棒。
謝謝。
用VB.NET編寫的程序。
P.S如果我更改了存儲過程中@duedate從nvarchar的爲datetime,我得到一個:
Error converting data type varchar to datetime.
錯誤,我猜是從英文格式。非常感謝。
嘗試'交貨期= duedate.ToString( 「d」,System.Globalization.CultureInfo.CreateSpecificCulture( 「EN-US」))' –
感謝您的評論,它看起來不錯,除了ToString函數需要一個整數字符串,不接受第二個參數?我得到一個太多的參數錯誤。謝謝。 – MikeS
我沒有得到你.. !!(_ToString函數接受一個不是字符串的整數並且不接受第二個參數?_澄清這一點),並且該方法在沒有任何錯誤的情況下工作,參見[this](https://dotnetfiddle.net/QMakBO)並嘗試這個'duedate =格式(duedate,「dd/MM/yyyy」)' –