【问题标题】:How to pass datetime input paramter to stored procedure from vb.net application?如何将日期时间输入参数从 vb.net 应用程序传递给存储过程?
【发布时间】:2026-01-18 07:05:02
【问题描述】:

我正在尝试将字符串格式的 datetime 参数传递给我的存储过程,但它抛出“字符串到日期时间覆盖无效”错误

Vb。网络代码

Dim dt As DateTime = DateTime.ParseExact(Trim(RecordDate),"mm/dd/yyyy",CultureInfo.InvariantCulture)
cmd.Parameters.Add("@recdate", Asedbtype.DateTime).Value = dt

存储过程

Create Procedure sec_edit (
    @recdate datetime
)

请告诉我应该怎么做才能避免这个错误

【问题讨论】:

  • 请发布完整的异常堆栈跟踪。 Asedbtype 来自哪个库?
  • 根据您的错误,这与您将值发送到存储过程的方式无关......它与您如何将字符串 RecordDate 解析为 DateTime.ParseExtract 函数有关。您还需要指定日期旁边的时间格式(这只是我的假设)
  • 很确定这个.Add(@recdate,...应该是这个:.Add("@recdate",...

标签: database vb.net datetime stored-procedures


【解决方案1】:

基于错误“String to DateTime 覆盖无效”,无法将字符串格式化为有效的 DataTime。月份格式的小写“mm”应大写:“MM”。日期时间格式有多种变体,示例代码如下。

Dim dateFormat As String() = New String() {"MM/dd/yyyy", "M/dd/yyyy", "M/d/yyyy", "MM/d/yyyy"}
Dim dt As DateTime = DateTime.ParseExact(Trim(RecordDate),dateFormat ,CultureInfo.InvariantCulture)

请参阅日期时间格式的帮助文档https://docs.microsoft.com/en-us/dotnet/api/system.datetime.parseexact?view=net-6.0#System_DateTime_ParseExact_System_String_System_String___System_IFormatProvider_System_Globalization_DateTimeStyles_

【讨论】:

    【解决方案2】:

    试试这个:

    Dim myDateTime = DateTime.Parse(myDTP.Text)
    cmd.Parameters.AddWithValue("@date",myDateTime)
    

    【讨论】: