Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在数据库中搜索与用户输入内容匹配的记录_Vb.net - Fatal编程技术网

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;

当然,再次将返回值更改为字符串。

您还可以将搜索条件传递到返回
数据集的函数中,如下所示,还有一件事,您可以在表单中使用textbox
textchange
事件中的函数

此外,在搜索时还包括
LIKE
as
LIKE“%”和@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)