データセット (.xsd) を使用して Visual Web Developer 2008 EE を使用して請求アプリケーションを開発していますが、カスタム検索クエリの作成に問題があります。次のように、4 つの ControlParameters を期待する ObjectDataSource があります。
<asp:ObjectDataSource ID="odsInvoices" runat="server" SelectMethod="getInvoices" TypeName="bllInvoice">
<SelectParameters>
<asp:ControlParameter ControlID="drpProjectsFilter" Type="Int32" Name="intProject" PropertyName="SelectedValue" ConvertEmptyStringToNull="True" />
<asp:ControlParameter ControlID="drpMonthsFilter" Type="Int32" Name="intMonth" PropertyName="SelectedValue" ConvertEmptyStringToNull="True" />
<asp:ControlParameter ControlID="drpYearFilter" Type="Int32" Name="intYear" PropertyName="SelectedValue" ConvertEmptyStringToNull="True" />
<asp:ControlParameter ControlID="drpStatusFilter" Type="Int32" Name="intStatus" PropertyName="SelectedValue" ConvertEmptyStringToNull="True" />
</SelectParameters>
これらの各コントロール (ドロップダウン) には、デフォルト値の "" (=空の文字列) があり、各パラメーターにオプション ConvertEmptyStringToNull="True" を追加しました。ObjectDataSource の背後にあるクエリは次のとおりです。
SELECT ... FROM ...
WHERE (YEAR(invoices.invoice_date) = COALESCE (@year, YEAR(invoices.invoice_date)))
AND (invoices.fk_project_id = COALESCE (@projectID, invoices.fk_project_id))
AND (MONTH(invoices.invoice_date) = COALESCE (@month, MONTH(invoices.invoice_date)))
AND (invoices.invoice_status = COALESCE (@statusID, invoices.invoice_status))
COALESCE を使用して、基本的に、4 つのパラメーターが null の場合は無視し、すべての行を返すように言っています。
問題は、4 つのパラメーターのそれぞれに値を指定しない限り、このクエリが行を返さないことです。これは、本質的に、このカスタム検索の目的全体を暴くものです。
これが機能しない理由について何か考えはありますか? 前もって感謝します!