从我的程序到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”)' –