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



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

类型为"System.Data.OleDb.OleDbException"的未处理异常 发生在系统数据中.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

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

但是,要直接解决您的问题,请执行以下操作:

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

将您的命令文本更改为:

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

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

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

最新更新