SearchMaster と SearchDetails の 2 つのプロシージャは、Sql Management Studio で実行すると機能し、SearchMaster は、ストアド プロシージャをデザイン ビューで設定するときにクエリをテストしているときにも正常に動作しますが、実行すると行が作成されません。 frn またはビジネスの情報のみを入力します。両方を入力すると、一致すればデータが取得されます。パラメータは正しく設定されていますか? また、プロシージャでパラメーターを null に初期化する場合、ConvertEmptyStringToNull を使用する必要がありますか?
SearchMaster StoredProcedure は次のとおりです。
CREAETE PROCEDURE SearchMaster
@business nvarchar(300) = NULL,
@frn nvarchar(10) = NULL
AS
SELECT h.Business,
hrl.frn
FROM registration hrl
INNER JOIN holder h on h.call = hrl.call
WHERE (@business IS NULL OR h.Business like '%' + @business + '%')
AND (@frn IS NULL OR hrl.frn = @frn)
SearchDetails StoredProcedure は次のとおりです。
CREATE PROCEDURE SearchDetails
@business nvarchar(300) = NULL,
@frn nvarchar(10) = NULL
AS
SELECT hrl.call
FROM registration hrl
INNER JOIN holder h ON h.call = hrl.call
WHERE (@business IS NULL OR h.Business LIKE '%' + @business + '%')
AND (@frn IS NULL OR hrl.frn = @frn)
SearchMaster プロシージャの SqlDataSource は次のとおりです。
<asp:SqlDataSource ID="sqlDsDetails"
runat="server"
ConnectionString="<%$ ConnectionStrings:cnxString %>
SelectCommandType="StoredProcedure"
SelectCommand="SearchMaster">
<SelectParameters>
<asp:ControlParameter Name="business" ControlID="txtBusiness"
Type="String" PropertyName="Text"
ConvertEmptyStringToNull="true" />
<asp:ControlParameter Name="frn" ControlID="txtFRN"
Type="String" PropertyName="Text"
ConvertEmptyStringToNull="true"/>
</SelectParameters>
</asp:SqlDataSource>
SearchDetails プロシージャの SqlDataSource は次のとおりです。
<asp:SqlDataSource ID="sqlDsDetails"
runat="server"
ConnectionString="<%$ ConnectionStrings:cnxString %>
SelectCommandType="StoredProcedure"
SelectCommand="SearchDetails">
<SelectParameters>
<asp:Parameter Name="frn" Type="String" DefaultValue=""
ConvertEmptyStringToNull="true" />
<asp:Parameter Name="business" Type="String" DefaultValue=""
ConvertEmptyStringToNull="true" />
</SelectParameters>
</asp:SqlDataSource>
SqlDsMaster をバインドするボタン クリックは次のとおりです。
protected void btnSearch_Click(object sender, EventArgs e)
{
sqlDsMaster.DataBind();
}
詳細の行を作成する gvMaster_RowCreated は次のとおりです。
protected void gvMaster_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
SqlDataSource ctrl =
e.Row.FindControl("sqlDsDetails") as SqlDataSource;
if (ctrl != null && e.Row.DataItem != null)
{
ctrl.SelectParameters["frn"].DefaultValue =
((DataRowView)e.Row.DataItem)["frn"].ToString();
ctrl.SelectParameters["business"].DefaultValue =
((DataRowView)e.Row.DataItem)["business"].ToString();
}
}
}
SQL プロファイラーを実行しましたが、パラメーターを 1 つだけ入力すると、プロファイラーは実行中のプロシージャーを表示しませんでした。両方のパラメーターを入力すると、プロファイラーで実行中のプロシージャーが表示されました。