【发布时间】:2016-01-28 10:12:08
【问题描述】:
我对从我的程序到 SQL 中的存储过程的日期有疑问。
我的程序从 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',返回价格。
Polish 发送 EXEC bsp.PartPrice_sp '2015-09-01', 'L555', 'USD' 会导致错误:
将 nvarchar 数据类型转换为 datetime 数据类型 导致超出范围的值。
我理解错误,但是在下一次执行存储过程时,波兰机器发送了2015-09-10,它返回了一个罚款。我猜是因为2015-10-09 仍在范围内,但有趣的是它返回了 2015 年 9 月 10 日的正确价格。
尽管如此,我仍在努力寻找一种以英语和波兰语执行存储过程的通用方法。您可以为正确解析日期而提供的任何帮助也让 SQL 高兴,这将是非常棒的。
谢谢。
用 VB .NET 编写的程序。
P.S 如果我将存储过程中的 @duedate 从 nvarchar 更改为 datetime,我会得到:
将数据类型 varchar 转换为 datetime 时出错。
错误,我猜是英文格式的。非常感谢。
【问题讨论】:
-
试试
duedate = duedate.ToString("d", System.Globalization.CultureInfo.CreateSpecificCulture("en-US")) -
感谢您的评论,它看起来不错,除了 ToString 函数采用整数而不是字符串并且不接受第二个参数?我收到了太多参数错误。谢谢。
-
我没有得到你..!!(ToString 函数接受一个整数而不是字符串并且不接受第二个参数? 澄清这一点)并且该方法正在工作/o 任何错误请参阅this 并尝试此操作
duedate = Format(duedate, "dd/MM/yyyy")
标签: sql .net sql-server vb.net