2017-06-19 45 views
0
<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="true" DataSourceID="dataSource1"> 

</asp:GridView> 

<asp:SqlDataSource runat="server" ID="dataSource1" SelectCommand="select UserName from aspnet_Users where UserName = COALESCE(@userName,UserName)" ConnectionString="<%$ ConnectionStrings:MySqlProviderConnection %>"> 
    <SelectParameters> 

     <asp:QueryStringParameter Name="userName" DbType="String" Direction="Input" QueryStringField="userName" DefaultValue="" ConvertEmptyStringToNull="true" /> 

    </SelectParameters> 

</asp:SqlDataSource> 

以上是我的代码。我想列出所有的用户名,如果默认是一个空字符串。但它不会给我所有用户名的结果。尝试列出所有用户名,如果没有提供userName值。

我在这里错过了什么吗?
如果我在sql server management studio中运行下面的查询,我会得到我期望的结果。

select UserName from aspnet_Users where UserName = COALESCE(null,UserName) 

我在这里错过了什么?

+1

Nope NULL未定义。没有什么等于空。所以你的查询永远不会返回。 – Namphibian

+2

NULL与空字符串不同。这是不是很清楚你在这里做什么。您的查询和说明似乎彼此非常不同。 –

+0

那么ConvertEmptyStingToNull = true会在这里做什么?如果我传入一个空字符串,我希望它被视为空.. – psj01

回答

2

改为使用它。

WHERE UserName = @userName or @userName is null

或者,如果你传递一个空字符串转化@userName

WHERE UserName = @userName or @userName =''

你的最后一个查询,select UserName from aspnet_Users where UserName = COALESCE(null,UserName),将返回所有行用户名不为空这可能是不你认为它会做什么。

+0

我想返回所有的用户名,如果我传入一个空字符串。否则,jst一行,其中用户名等于传入的值。 – psj01

+0

这正是我提供的代码将执行的操作 – scsimon

+0

@ psj01您是否尝试用这个子句替代您的子句? – scsimon

相关问题