<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="SqlDataSource1" DataTextField="RoleName" DataValueField="RoleKey">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:LOADBConnectionString %>"
SelectCommandType="StoredProcedure"
SelectCommand="PR_GetRoles">
<SelectParameters>
<asp:Parameter Name="IsPublicReg" Type="Boolean" />
</SelectParameters>
</asp:SqlDataSource>
PR_GetRoles是这样的:
ALTER PROCEDURE [dbo].[PR_GetRoles]
(
@IsPublicReg bit
)
AS
SELECT * FROM [RoleInfo]
WHERE IsPublicReg=@IsPublicReg OR @IsPublicReg IS NULL
我希望的结果是,当不指定DefaultValue时,SqlDataSource传给PR_GetRoles的参数@IsPublicReg是NULL,得到所有结果;当指定IsPublicReg时,按其值得到数据。但实际情况是不指定DefaultValue得不到任何数据,指定则按其值得到结果。
如果不使用Parameter,即去除<asp:Parameter Name="IsPublicReg" Type="Boolean" />则能得到所有数据。
如果使用sql management studio执行此存储过程时传入空值,则能得到所有数据。(即,在sql management studio中测试正常)
不知道我能否表述清楚,如果您不明白我的意思请留言,我的疑点就在:当不指定Parameter.DefaultValue时应该传给PR_GetRoles的值应该为null,(MSDN上这么说的)怎么不是呢?非得删除此查询参数才传null。
(注1:有些地方说bit不能为null,我的测试结果是可以,sql2005.)