我正在尝试编写一个函数,用于在数据库中搜索记录以查找与 SearchCriteria 匹配的对象。函数参数如下所示:
RetrieveObject(SearchCriteria) As String(SearchCritera 也是一个字符串)
现在出于测试目的,我正在使用一个控制台应用程序,要求用户按名字进行搜索。
Console.Writeline("按名字搜索:")
昏暗的名字 = Console.Readline()
然后我使用我的函数:RetrieveObject(firstName)
我希望我的函数显示传递给 RetrieveObject
函数的特定人员的所有值(姓氏、职称、州、邮政编码)。
我遇到的问题是我似乎无法理解如何将用户输入的内容与数据库中的值相匹配。
如果有人能给我正确的方向来帮助我理解如何实现这一目标,我将非常感激!
这是迄今为止我的代码:
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'
当然,我们可以对运算符和字段数据类型有很多变化,但这个答案仅限于您的实际情况。
需要注意的是,您的查询可能会返回多个记录(特别是如果您添加通配符运算符 LIKE,因此您不能简单地使用此查询返回单个值,而是返回一个可以在其中循环的 DataTable通过 Rows 集合查看查询返回的所有记录
所以你的代码应该更改为
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
如果您确实需要返回所有 FirstName 都匹配的 json 字符串,那么您可以将其添加到上面代码的最后几行
.....
da.Fill(dt)
Dim names = dt.AsEnumerable().Select(Function(x) x.Field(Of String)("strFirstName")).ToArray()
string output = JsonConvert.SerializeObject(names);
return output;
当然,再次将返回值更改为字符串。
关于vb.net - 在数据库中搜索与用户输入内容相匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37185933/