【问题标题】:MS SQL query parameter passed, but not recognized in VB.netMS SQL 查询参数已通过,但在 VB.net 中无法识别
【发布时间】:2013-03-04 22:15:21
【问题描述】:

我已经为此苦苦思索了一段时间。

我有一个从表中检索字段并填充输入的函数,但是当我尝试执行该函数时,我收到一条错误消息,提示“过程或函数‘Quad_GetAllFields’需要参数‘@subWeek’,但未提供该参数”。

我知道我正在提供参数,因为我可以从函数中的任何位置访问它。

函数是:

Protected Sub setAllFields(ByVal myConnection As SqlConnection, ByVal subWeek As String, ByVal site As String)
    Dim myCommand = New SqlCommand("Quad_GetAllFields", myConnection)
    myCommand.Parameters.AddWithValue("@subWeek", subWeek)
    myCommand.Parameters.AddWithValue("@site", site)
    Dim myDataReader As SqlDataReader = myCommand.ExecuteReader()
    If myDataReader.Read() Then
        'populate fields
    End If
End Sub

而存储过程是:

ALTER PROCEDURE dbo.Quad_GetAllFields
(
@subWeek VARCHAR(50),
@site VARCHAR(20)   
)
AS
BEGIN
SELECT TOP (1) ID, Priority1, Priority2, Priority3, Priority4, Highlight1, Highlight2, Highlight3, Highlight4, Update1, Update2, Update3, Ahead1, Ahead2, Ahead3, Outlook1, Outlook2, Comments, Site, Week, Submitted FROM Charts WHERE Week = @subWeek AND Site = @site ORDER BY ID DESC
END

对我做错了什么有帮助吗?

我在使用存储过程方面还很陌生,但我仍然找不到问题。

谢谢

【问题讨论】:

  • 我怀疑这是原始代码,因为您必须将 SqlCommand's CommandType 属性设置为 StoredProcedure
  • @TimSchmelter,这正是问题所在。我在代码中的每个其他存储过程调用中都有这一行,但错过了一次。谢谢!

标签: asp.net vb.net visual-studio-2010 sql-server-2008


【解决方案1】:

您必须将SqlCommand's CommandType 属性设置为StoredProcedure,默认为Text

Protected Sub setAllFields(ByVal myConnection As SqlConnection, ByVal subWeek As String, ByVal site As String)
    Dim myCommand = New SqlCommand("Quad_GetAllFields", myConnection)
    myCommand.CommandType = CommandType.StoredProcedure
    myCommand.Parameters.AddWithValue("@subWeek", subWeek)
    myCommand.Parameters.AddWithValue("@site", site)
    Dim myDataReader As SqlDataReader = myCommand.ExecuteReader()
    If myDataReader.Read() Then
        'populate fields'
    End If
End Sub

【讨论】:

    【解决方案2】:

    如果您的字符串参数@subWeek 为空,您可能会收到此错误。

    如果您的字符串为空,则需要为@subWeek 传递 DBNull.Value。

    尝试硬编码@subWeek 值

    myCommand.Parameters.AddWithValue("@subWeek", "Myvalue")
    

    这应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 2018-03-05
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      相关资源
      最近更新 更多