这是我的代码,不确定是什么问题,我还检查了数据库中的所有拼写是否正确。我得到这个确切的错误:
类型为'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
答案 0 :(得分:0)
您没有说出您实际上要连接到哪个数据库服务器,这很重要,因为如果它的MS Sql Server,MySQL或Oracle具有自定义版本的数据访问类,那么最好使用。 >
但是,直接解决您的问题:
OleDb
数据提供者不喜欢@name
之类的命名参数。他们需要简单的?
占位符来显示参数。
将您的CommandText更改为:
.CommandText = "Select * From [Tbl_Customer] Where [Secondname] Like ?"
如果继续使用OleDb
提供程序,则需要确保无论何时使用参数(应该每次),然后按预期的正确顺序将参数添加到命令对象中在Sql语句中。
注意。如果您要连接到MS Sql Server数据库并使用SqlClient
数据提供程序,则您的代码可以正常工作。