您需要确保 SqlDataSource 上的 CancelSelectOnNullParameter 设置为 false,并且 ConvertEmptyStringToNull 对所需参数设置为 true。它在标记中应该看起来像这样:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" CancelSelectOnNullParameter="false" SelectCommand="...">
<SelectParameters>
<asp:ControlParameter Name="..." ControlID="..." PropertyName="..." DbType="..." ConvertEmptyStringToNull="true"/>
...
</SelectParameters>
</asp:SqlDataSource>
如果您有多个可以提供空值的控件并且您希望仅允许其中一个为空,则问题将开始。在这种情况下,您必须将 CancelSelectOnNullParameter 设置为 true 并使用 Selecting 事件添加 DBNull.Value:
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
if (String.IsNullOrEmpty(textBox.Text))
((IDbDataParameter)e.Command.Parameters["@name"]).Value = DBNull.Value;
}
这应该可以让你解决你的问题。