Gridview没有在aspx页面中正确返回行

时间:2012-07-10 09:23:26

标签: sql-server stored-procedures

我必须创建一个存储过程,它将搜索数据库中的匹配行并在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

1 个答案:

答案 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语法。