【问题标题】:System.Data.OleDb.OleDbException No value given for one or more required parameters?System.Data.OleDb.OleDbException 没有为一个或多个必需参数指定值?
【发布时间】:2018-07-03 13:01:44
【问题描述】:

这是我的代码,不确定它有什么问题。我已经检查了数据库中的所有内容都拼写正确。我得到了这个确切的错误:

“System.Data.OleDb.OleDbException”类型的未处理异常 发生在 System.Data.dll

附加信息:没有给出一个或多个必填项的值 参数。

Private Sub SearchSurname(Secondname As String)
    If DbConnect() Then
        lstCustomers_Customerform.Items.Clear()
        Dim SQLCmd As New OleDbCommand
        With SQLCmd
            .Connection = cn
            .CommandText = "Select * From [Tbl_Customer] Where [Secondname] Like @SurnameSearch"
            .Parameters.AddWithValue("@SurnameSearch", "%" & txtLastname_Search.Text & "%")

            Dim rs As OleDbDataReader = .ExecuteReader
            While rs.Read
                Dim DisplayValue As String = rs("[Firstname]") & " " & rs("[Secondname]") & " (" & rs("[DOB]") & ")"
                Dim CustItem As New Listboxdata(DisplayValue, rs("[CustomerID]"))
                lstCustomers_Customerform.Items.Add(CustItem)

            End While
            rs.Close()

            If lstCustomers_Customerform.Items.Count > 1 Then
                'Show list 
                PanSearchList.Visible = True

            Else
                PanSearchList.Visible = False

            End If
        End With
    End If
End Sub

【问题讨论】:

  • 我投了赞成票,因为您使用的是Parameters,这让我很高兴

标签: vb.net


【解决方案1】:

您还没有说您实际连接到哪个数据库服务器,这很重要,因为如果它的 MS Sql Server、MySQL 或 Oracle 有自定义版本的数据访问类,您最好使用它们。

但是,要直接解决您的问题:

OleDb 数据提供者不喜欢像 @name 这样的命名参数。它们需要简单的? 占位符来显示参数的出现位置。

将您的 CommandText 更改为:

.CommandText = "Select * From [Tbl_Customer] Where [Secondname] Like ?"

如果您继续使用OleDb 提供程序,则需要确保无论何时使用参数(每次都应如此),然后按照预期的正确顺序将参数添加到命令对象中sql语句。

注意。如果您连接到 MS Sql Server 数据库并使用 SqlClient 数据提供程序,您的代码将毫无问题地工作。

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多