Я создаю веб-сайт с использованием vb.net и пытаюсь заполнить CheckBoxList названиями фильмов. Пользователь будет вводить заголовок фильма, а я буду использовать функцию для поиска 10 самых близких названий фильмов. Функция использует алгоритм расстояния Лененштейна, который сравнивает две строки и возвращает, сколько разных символов нужно поменять местами, чтобы сделать их одной строкой. Пример: searchValue = "Interstellar" по сравнению с результатом "Золушка" 5 изменений символа, чтобы они соответствовали.
Я хочу вернуть результирующий набор и вставить movie_title в текст списка флажков и movieID в значении.
Мой код 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 нормально.
Я не нашел конкретного решения для этого онлайн, и я надеюсь, что кто-то здесь может помочь