【问题标题】:Search database returning results to gridview via sqldatareader通过 sqldatareader 搜索数据库返回结果到 gridview
【发布时间】:2010-02-23 12:33:05
【问题描述】:

我正在尝试创建一个搜索页面,这允许管理员通过某些条件搜索数据库中的条目,例如省(如州但不同的国家)

这是我到目前为止的代码。问题是我没有收到任何错误。但我也没有得到任何结果。该页面只是回发并返回到空白搜索页面。 GridView 不显示任何结果。

这是我的代码:

Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Configuration
Partial Class administration_Search
    Inherits System.Web.UI.Page

    Protected Sub ProvinceButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ProvinceButton.Click
        'get the search string from text box
        Dim Search As String
        Search = ("%" & ProvinceButton.Text & "%")
        'if the string has value then continue with search
        If Len(Trim(Search)) > 0 Then
            Dim con As String = WebConfigurationManager.ConnectionStrings("fubar").ToString()
            'build sql string 
            Dim s As String
            s = ("SELECT id, surname, name FROM orders WHERE province like @strSearch")
            'declar connection
            Dim c As SqlConnection = New SqlConnection(con)
            'add command
            Dim x As New SqlCommand(s, c)
            'add parameter
            x.Parameters.AddWithValue("@strSearch", strSearch)
            c.Open()
            Dim r As SqlDataReader = x.ExecuteReader
            GV.DataSource = r
            GV.DataBind()
            c.Close()
        Else
            Province.Text = ("Please enter search terms")
        End If
    End Sub
End Class

在 .aspx 页面上,我有一个文本框(id:province)和一个按钮(id:submit)

谁能发现我哪里出错了。当你没有得到错误或结果时,它非常令人沮丧:0)

谢谢!

【问题讨论】:

    标签: asp.net search ado.net syntax sqldatareader


    【解决方案1】:

    您的变量名称不匹配(SearchstrSearch),但我怀疑这是一个错字。更大的问题是通过将匹配的字符放入参数中,它们被引用了。将它们放在 SQL 语句本身中。

    Dim strSearch As String
    strSearch = ProvinceButton.Text.Trim()
    
    ...
    
    s = ("SELECT id, surname, name FROM orders WHERE province like '%' + @strSearch + '%'")
    

    【讨论】:

    • 我的错误是 search / strsearch 实际上是拼写错误。我将尝试将匹配的字符移至 SQL。非常感谢您的帮助
    • 你可能想要修剪你的输入(正如我在示例中添加的那样,虽然你可能需要先检查 null ,如果一个空文本框不要记得我的头顶返回 null 或 string.Empty)。
    • 非常感谢,您的解决方案非常有帮助,代码现在可以运行了!
    【解决方案2】:

    1) 我建议您检查正在执行的 SQL

    在 c.Open() 行上放置一个断点。当你到达那里时,检查 SqlCommand x。查看 SELECT 语句的最终版本是什么。复制粘贴到Management Studio,然后运行看看是否有语法问题。

    2) 您也可以尝试填充一些 SqlCommand 属性。设置x.CommandType = CommandType.Text

    3) 我还建议您在结束连接之前关闭并处置 SqlDataReader。这不会解决这个特定问题,但这是一个很好的做法。

    【讨论】:

    • 非常感谢您的帮助,以后我会修改并开始Dispose。
    【解决方案3】:

    好的

    一旦我做了 tvanfosson 善意指出的修正,我仍然遇到问题;

    我不小心输入了:strSearch = ProvinceButton.Text.Trim() 当我应该输入:strSearch = Province.Text.Trim()

    非常感谢:0)

    【讨论】:

      【解决方案4】:

      这是在黑暗中的狂野射击,但是这个变量是否需要在第一个 % 之前和最后一个 % 之后有刻度线,因为它是一个字符串值?

      原文:

      Search = ("%" & ProvinceButton.Text & "%") 
      

      修订:

      Search = ("'%" & ProvinceButton.Text & "%'") 
      

      【讨论】:

      • 我设法用上面的答案解决了这个问题,但无论如何感谢 Yoav 的帮助,非常感谢。
      猜你喜欢
      • 2015-05-16
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 2011-03-21
      • 2011-10-27
      • 2017-08-21
      相关资源
      最近更新 更多