vb.net - 在数据库中搜索与用户输入内容相匹配的记录

标签 vb.net

我正在尝试编写一个函数,用于在数据库中搜索记录以查找与 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/

相关文章:

VB.NET 2010 和 MS Access 2010 - 从字符串 ""到类型 'Double' 的转换无效

vb.net - 遍历特定数据表的行

vb.net - 检测互联网是否已连接

vb.net - .NET 日期常量(带全局化)

vb.net - XCode Cocoa 问题(VB.NET 到 Cocoa)

vb.net - 如何使用 Visual Studio 2010 将项目从 .Net 2.0 升级到 .Net 4.0?

vb.net - 如何检查应用程序是否以管理员身份运行 VB.NET

vb.net - 如何在 Visual Basic 中实现类构造函数?

vb.net - 不要使用数组列表!

mysql - 如何使用asp.net(vb.net)将文本框中的数据保存到mysql数据库