我必须创建一个存储过程,它将搜索数据库中的匹配行并在Gridview中显示它们。用户可以搜索选择多个选项的表单,某些选项不是必需的。
我创建了一个存储过程,但只有当我在SQL Server Management Studio控制台中执行它时才会显示结果。存储过程未在aspx页面的gridview中显示任何记录。
请帮我看看我在这里做错了什么。
我创建的存储过程是这样的:
ALTER PROCEDURE dbo.ProcName
@abc varchar(50) = null,
@def varchar(50) = null,
@ghi Int = null,
@jkl varchar(50) = null,
@mno varchar(50) = null
As
Begin
SELECT abc,def,ghi,jkl,mno,rst from TableName
where(@abc IS NULL OR abc= @abc)
AND (@def IS NULL OR def = @def)
AND (@ghi IS NULL OR ghi = @ghi)
AND (@jkl IS NULL OR jkl = @jkl)
AND (@mno IS NULL OR mno = @mno)
End
Go
以下是我在asp.net页面中使用的代码,用于显示gridview中的记录:
Sub showResult(Source as Object, E as EventArgs)
Dim oConn As SQLConnection
Dim oComm As SQLCommand
Dim da As SqlDataAdapter
Dim ds As DataSet
Dim sSQL As String
Dim sConn As String
Dim strloc, listtype, roomno, furnishing, spec, forrent, price, area, email
strloc=List_Location.SelectedItem.Text
listtype=List_Type.SelectedItem.Text
roomno=List_RoomNo.SelectedItem.Value
furnishing=List_Furnishing.SelectedItem.Text
forrent=List_RentSale.SelectedItem.Value
sConn = ConfigurationManager.ConnectionStrings("xyz").ConnectionString
oConn = New SQLConnection(sConn)
oComm = New SQLCommand("SearchP",oConn)
oConn.Open()
oComm.CommandType = CommandType.StoredProcedure
oComm.Parameters.Add(New SqlParameter("@abc", SqlDbType.VarChar, 50))
oComm.Parameters("@abc").Value = strloc
oComm.Parameters.Add(New SqlParameter("@def", SqlDbType.VarChar, 50))
oComm.Parameters("@def").Value = listtype
oComm.Parameters.Add(New SqlParameter("@ghi", SqlDbType.Int))
oComm.Parameters("@ghi").Value = roomno
oComm.Parameters.Add(New SqlParameter("@jkl", SqlDbType.VarChar, 50))
oComm.Parameters("@jkl").Value = furnishing
oComm.Parameters.Add(New SqlParameter("@mno", SqlDbType.VarChar, 50))
oComm.Parameters("@mno").Value = forrent
da = New SqlDataAdapter(oComm)
ds = New DataSet()
Try
panel1.visible="true"
da.Fill(ds,"TableName")
myGridView.DataSource=ds.Tables("TableName").DefaultView
myGridView.EmptyDataText = "No records found"
myGridView.DataBind()
Catch ex As Exception
lblResults.text = ex.Message
Finally
oComm.Dispose()
oConn.Dispose()
oConn.Close()
End Try
End Sub
答案 0 :(得分:0)
您的存储过程将参数评估为@abc is null or abc = @abc
。这意味着如果用户没有提供自己的值,则必须将null
值绑定到ASPX页面中的params。绑定ASPX页面中的空白值不会将null
传递给存储过程,因此它将始终评估column = [blank value]
或abc = [blank value]
。
假设网页中的列表在列表顶部(位置“0”)有一个项目,表示从列表中选择某些内容,那么ASPX代码应该如下所示:
If List_Location.ItemIndex = 0 Then
oComm.Parameters.AddWithValue("@abc", DBNull.Value)
Else
oComm.Parameters.AddWithValue("@abc", List_Location.SelectedItem.Text)
这样,当用户没有选择值时传递null
,或者当它们执行时传递值。然后,您的存储过程应该能够正确使用@abc is null or abc = @abc
语法。