Vb.net 在数据库中搜索与用户输入内容匹配的记录
我正在尝试编写一个函数,在数据库中搜索符合搜索条件的记录的对象。函数参数如下所示:Vb.net 在数据库中搜索与用户输入内容匹配的记录,vb.net,Vb.net,我正在尝试编写一个函数,在数据库中搜索符合搜索条件的记录的对象。函数参数如下所示: RetrieveObject(SearchCriteria)作为字符串(SearchCritera也是字符串) 现在出于测试目的,我正在使用一个控制台应用程序,要求用户按名字搜索 Console.Writeline(“按名字搜索:”) Dim firstName=Console.Readline() 然后我使用我的函数:RetrieveObject(firstName) 我希望我的函数显示传递给RetrieveO
RetrieveObject(SearchCriteria)作为字符串(SearchCritera也是字符串)
现在出于测试目的,我正在使用一个控制台应用程序,要求用户按名字搜索
Console.Writeline(“按名字搜索:”)
Dim firstName=Console.Readline()
然后我使用我的函数:RetrieveObject(firstName)
我希望我的函数显示传递给RetrieveObject
函数的特定人员的所有值(lastname、titlename、state、zip)
我遇到的问题是,我似乎无法理解如何将用户输入的内容与数据库中的值相匹配
如果有人能帮我找到正确的方向,帮助我理解如何做到这一点,我将不胜感激
以下是我目前的代码:
Private Function RetrieveObject(SearchCriteria As String) As String
Dim cn As OdbcConnection = New OdbcConnection(myCon)
Dim myQuery = "SELECT * FROM Applicant WHERE [strFirstName] LIKE '%son'"
Using com As New OdbcCommand(myQuery)
cn.Open()
com.Connection = cn
com.CommandType = CommandType.Text
com.CommandText = myQuery
com.Parameters.AddWithValue("@strFirstName", SearchCriteria)
Try
com.ExecuteReader()
Catch ex As Exception
MsgBox(ex.Message.ToString())
End Try
End Using
Return SearchCriteria
End Function
再次感谢 要创建WHERE条件,您需要(在最基本的级别上)向数据库引擎提供三个信息。第一位是要搜索的列名,第二位是要用于匹配记录的运算符,最后是要搜索的值
SELECT * FROM table WHERE FieldName = 'AStringValue'
当然,运算符和字段数据类型可能会有很多变化,但这个答案仅限于您的实际情况
请务必注意,您的查询可能返回多个记录(特别是如果您像这样添加通配符运算符,那么您不能简单地使用此查询返回单个值,而是返回一个DataTable,您可以在其中循环行集合以查看查询返回的所有记录)
所以你的代码应该改成
Private Function RetrieveObject(SearchCriteria As String) As DataTable
Dim myQuery = "SELECT * FROM Applicant WHERE [strFirstName] LIKE ?"
Try
Using cn = New OdbcConnection(myCon)
Using da = new OdbcDataAdapter(myQuery, cn)
da.SelectCommand.Parameters.Add("?", OdbcType.VarChar).Value = SearchCriteria
Dim dt = new DataTable()
da.Fill(dt)
return dt
End Using
End Using
Catch ex As Exception
MsgBox(ex.Message.ToString())
return Nothing
End Try
End Function
现在,您可以通过以下方式调用此方法
Dim table = RetrieveObject("John%")
if table IsNot Nothing Then
For Each row in table.Rows
Console.WriteLine(row["strFirstName"].ToString())
Next
End If
如果您确实需要返回一个名匹配的json字符串,那么可以将其添加到上面代码的最后几行
.....
da.Fill(dt)
Dim names = dt.AsEnumerable().Select(Function(x) x.Field(Of String)("strFirstName")).ToArray()
string output = JsonConvert.SerializeObject(names);
return output;
当然,再次将返回值更改为字符串。您还可以将搜索条件传递到返回
数据集的函数中,如下所示,还有一件事,您可以在表单中使用textboxtextchange
事件中的函数
此外,在搜索时还包括LIKE
asLIKE“%”和@strFirstName&“%”
,这可以帮助您缩小搜索结果范围(如果需要)
Public Function Search(ByVal Criteria As String) As DataSet
Try
Dim ds As New DataSet
Using sqlCon As New SqlConnection(connStr)
stQuery="SELECT * FROM Applicant WHERE [strFirstName]
LIKE '%" & @strFirstName & "%'"
Dim sqlCmd As New SqlCommand(stQuery, sqlCon)
Dim sqlAda As New SqlDataAdapter(sqlCmd)
sqlCmd.CommandType = CommandType.Text
sqlCmd .Parameters.AddWithValue("@strFirstName", Criteria )
sqlAda.Fill(ds)
End Using
Return ds
Catch ex As Exception
MsgBox(ex.Message.ToString())
End Try
End Function
strFirstName似乎不是表申请者的字段。包含firstName searched的列的真实名称是什么?strFirstName是申请者表中一个字段的名称。此外,用于存储控制台用户输入的firstName变量实际上是公共的。Steve,这一切看起来棒极了!我注意到的第一件事是se是函数返回一个DataTable。我想我没能澄清它需要返回一个“字符串”。不过我还是会玩弄这段代码!:)再次感谢!!你不能以字符串的形式返回一组记录——无论如何都没有任何意义。很抱歉,我需要进一步澄清!Lol.我需要返回一个JSON字符串,其中包含一个符合条件的对象数组。如果需要更多帮助,我将稍后再讨论这个问题。@SearchCriteria
是参数的名称,但我猜Odbc无法处理命名参数。如果是这种情况,则需要将@SearchCriteria
字符串替换为一个问号(?)Dim输出,即string=New JavaScriptSerializer()。Serialize(names)