我正在使用 Visual Web Developer 2008 EE 使用数据集 (.xsd) 来开发发票应用程序,但在创建自定义搜索查询时遇到了麻烦。我有一个需要 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 个参数中的任何一个(如果它们为空)并返回所有行。
问题是这个查询不返回任何行,除非我为 4 个参数中的每一个指定一个值,基本上揭穿了这个自定义搜索的全部目的。
关于为什么这不起作用的任何想法?提前致谢!