【问题标题】:Error converting Nvarchar data type to datetime from VB.NET从 VB.NET 将 Nvarchar 数据类型转换为日期时间时出错
【发布时间】: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


【解决方案1】:

根据我的经验,内联非参数化查询中的日期格式是可以让您省心的事情之一。

所以-

  1. 如果可能发出带有 SqlParameters 集合的 SqlCommand,您可以在其中添加实际的 Date 类型的 .Net 变量。更安全。
  2. 如果出于某种原因确实必须保留内联 SQL,永远不要传递区域化日期格式。由于奇怪的原因,它们可靠地断裂。理想情况下发送服务器 YYYY-MM-DD hh:mm:ss.ms,但为了安全起见,通过集中式函数运行它 - 部分比确保在所有地方正确调用正确的 .ToString() 格式更容易,部分原因是,即使在这种格式下,我也偶尔会遇到服务器抱怨。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 2018-04-20
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2013-01-15
    • 2015-12-16
    • 2015-03-14
    相关资源
    最近更新 更多