在VB.NET中使用函数运行SQL查询

在VB.NET中使用函数运行SQL查询,vb.net,Vb.net,我正在使用vb.net创建一个网站,并尝试用电影标题填充一个复选框列表。用户将输入一个电影标题,我将使用一个函数查找最接近的10个电影标题。该函数使用Lenenshtein距离算法,该算法比较两个字符串,并返回需要交换多少不同字符才能使它们成为同一字符串。示例:searchValue=“Interstellar”与“灰姑娘”相比,结果是5个字符发生了变化,使它们匹配 我想返回结果集,并将电影标题插入复选框文本中,并在值中插入电影ID 我用于运行此查询的vb.net代码是: Dim con

我正在使用vb.net创建一个网站,并尝试用电影标题填充一个复选框列表。用户将输入一个电影标题,我将使用一个函数查找最接近的10个电影标题。该函数使用Lenenshtein距离算法,该算法比较两个字符串,并返回需要交换多少不同字符才能使它们成为同一字符串。示例:searchValue=“Interstellar”与“灰姑娘”相比,结果是5个字符发生了变化,使它们匹配

我想返回结果集,并将电影标题插入复选框文本中,并在值中插入电影ID

我用于运行此查询的vb.net代码是:

    Dim con As New SqlConnection("MyConnectionString")
    Dim dtMovieSearchResults As New DataTable


    Dim daSearchDiff As New SqlDataAdapter("SELECT TOP 10 *, [dbo].[FN_Levenshtein_Distance](movie_title, @searchValue) diff FROM ML_Movie ORDER BY diff", con)

    With daSearchDiff.SelectCommand.Parameters
        .Clear()
        .AddWithValue("@searchValue", Convert.ToString(txtSearchMovie.Text))
    End With
    Try
        If ConnectionState.Closed Then con.Open()
        daSearchDiff.Fill(dtMovieSearchResults)

        With cblFoundMovies
            .DataSource = dtMovieSearchResults
            .DataTextField = "movie_title"
            .DataValueField = "movie_id"
            .DataBind()
        End With
    Catch ex As Exception
        Response.Write(ex.Message)
    Finally
        con.Close()
    End Try
此操作失败,并表示连接仅在几秒钟后就超时。其他数据库查询也可以工作,问题似乎与在查询中运行函数有关。然而,查询在SSMS中运行良好


我还没有找到一个具体的在线解决方案,我希望这里的人能帮助我添加一点使用…End Using Block来关闭和处理连接和命令。我不得不猜测数据类型和字段大小,因此,检查数据库并添加实际的类型和大小

我真的不认为您的代码有问题,因为查询是在SSMS中运行的。我暂时删除了Try…End Try,这样你就可以确切地看到哪里断了

Private Sub OpCode()
    Dim dtMovieSearchResults As New DataTable
    Using con As New SqlConnection("MyConnectionString"),
            cmd As New SqlCommand("SELECT TOP 10 *, [dbo].[FN_Levenshtein_Distance](movie_title, @searchValue) diff FROM ML_Movie ORDER BY diff", con)
        cmd.Parameters.Add("@searchValue", SqlDbType.VarChar, 200).Value = txtSearchMovie.Text
        con.Open()
        dtMovieSearchResults.Load(cmd.ExecuteReader)
    End Using
    With cblFoundMovies
        .DataSource = dtMovieSearchResults
        .DataTextField = "movie_title"
        .DataValueField = "movie_id"
        .DataBind()
    End With
End Sub

我增加了一点使用…End使用块来关闭和处理连接和命令。我不得不猜测数据类型和字段大小,因此,检查数据库并添加实际的类型和大小

我真的不认为您的代码有问题,因为查询是在SSMS中运行的。我暂时删除了Try…End Try,这样你就可以确切地看到哪里断了

Private Sub OpCode()
    Dim dtMovieSearchResults As New DataTable
    Using con As New SqlConnection("MyConnectionString"),
            cmd As New SqlCommand("SELECT TOP 10 *, [dbo].[FN_Levenshtein_Distance](movie_title, @searchValue) diff FROM ML_Movie ORDER BY diff", con)
        cmd.Parameters.Add("@searchValue", SqlDbType.VarChar, 200).Value = txtSearchMovie.Text
        con.Open()
        dtMovieSearchResults.Load(cmd.ExecuteReader)
    End Using
    With cblFoundMovies
        .DataSource = dtMovieSearchResults
        .DataTextField = "movie_title"
        .DataValueField = "movie_id"
        .DataBind()
    End With
End Sub

记录在案,这是一个比你以前的尝试更合适的问题。我现在没有答案,也没有时间解决问题,但我想说清楚,我以前并不是想变得刻薄。按照SO标准,这个问题确实不好,我感谢你的澄清。我一定会在将来添加有问题的代码,这样我的问题就不会像开放式的一样了。为了记录在案,这是一个比您以前的尝试更合适的问题。我现在没有答案,也没有时间解决问题,但我想说清楚,我以前并不是想变得刻薄。按照SO标准,这个问题确实不好,我感谢你的澄清。我一定会在将来添加有问题的代码,这样我的问题就不会像开放式的一样了!非常感谢。我现在已经准备好删除此功能。我还找到了一种方法,可以节省几秒钟的时间。但我认为我的问题可能是我添加参数的方式。你的回答非常有帮助,非常感谢你抽出时间来做这件事!非常感谢。我现在已经准备好删除此功能。我还找到了一种方法,可以节省几秒钟的时间。但我认为我的问题可能是我添加参数的方式。你的回答非常有帮助,非常感谢你抽出时间