System.Data.OleDb.OleDbException没有为一个或多个必需参数提供值吗?

时间:2018-07-03 13:01:44

标签: vb.net

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

  

类型为'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

1 个答案:

答案 0 :(得分:0)

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

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

OleDb数据提供者不喜欢@name之类的命名参数。他们需要简单的?占位符来显示参数。

将您的CommandText更改为:

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

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

注意。如果您要连接到MS Sql Server数据库并使用SqlClient数据提供程序,则您的代码可以正常工作。