2016-10-03 63 views
0

我一直在ASP.NET上处理webforms和每个用户的数据,如果用户登录,他们会获取他们的数据。如何设置SelectCommand以更改'WHERE'登录用户

我有它采取的SqlDataSource从ASP标记代码表:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
    ProviderName="<%$ ConnectionStrings:DefaultConnection.ProviderName %>" 
    SelectCommand="SELECT [first_name], [last_name], [weight_data] FROM [userData] 
     WHERE [email]='[email protected]';"> 
</asp:SqlDataSource> 

我可以得到当前登录的邮件串通过<%: Context.User.Identity.GetUserName() %>

如何将它放入WHERE电子邮件语句,以便我可以取当前登录的用户电子邮件并用'[email protected]'替换它以使其与SQL表匹配以获取其他数据?

非常感谢!

+0

possible dupe http://stackoverflow.com/questions/10540470/dynamic-query-in-asp-net-where-clause-in-sqldatasource – MikeM

+0

感谢您的格式。仍然不确定我是如何将它从看待可能的欺骗中取代的。我在做与使用<%:Context.User.Identity.GetUserName()%>的selectparameters做同样的事吗?相当新的asp.net,所以替换变量是令人困惑的。感谢芽。 – Anj

回答

1

不同的方法,如: 您可以使用内置的ASP的OnSelecting参数:SqlDataSource的

<asp:SqlDataSource ID="SqldsExample" runat="server" 
    SelectCommand="SELECT [first_name], [last_name], [weight_data] FROM [userData] 
      WHERE [email][email protected]" 
    OnSelecting="SqldsExample_Selecting"> 
    <SelectParameters> 
     <asp:Parameter Name="UserEmail" Type="String"/> 
</SelectParameters> 

在代码隐藏

protected void SqldsExample_Selecting(object sender, SqlDataSourceCommandEventArgs e) 
{ 
     e.Command.Parameters["UserEmail"].Value = Context.User.Identity.GetUserName(); 
} 

另一种方式:

SqlDataSource1.SelectParameters.Add("@UserEmail", Context.User.Identity.GetUserName()); 

希望这有助于!

+0

非常感谢。出于某种原因,它显示为。 '必须声明标量变量“@UserEmail”。 – Anj

+0

你尝试过两种方法吗? – Sami

+0

排除“@”即SqlDataSource1.SelectParameters.Add(“UserEmail”,Context.User.Identity.GetUserName()); – Sami