2

データベース内の一致する行を検索して 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ページで使用しているコードです:

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
4

1 に答える 1

0

ストアド プロシージャは、パラメーターをいずれかとして評価します@abc is null or abc = @abcnullこれは、ユーザーが独自の値を指定しない場合、ASPX ページからパラメーターに値をバインドする必要があることを意味します。ASPX ページから空白の値をバインドしても、ストアド プロシージャに a が渡されないため、常に, またはnullが評価されます。column = [blank value]abc = [blank value]

Web ページのリストの一番上 ('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構文を正しく使用できるようになります。

于 2012-07-10T13:43:11.370 に答える