问题是您将实际的User.Identity.Name
作为字符串而不是其值。
SelectCommand = String.Format("SELECT * FROM member WHERE username = '{0}'", User.Identity.Name)
但更好(更安全)的做法是像
SelectCommand = "SELECT * FROM member WHERE username = @UserName"
SelectCommand.Parameters.AddWithValue("@UserName", User.Identity.Name)
这将防止SQL注入。
编辑: 既然你在你的页面定义这一点,你可以用下面的模板:
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:Details %>" SelectCommand="SELECT * FROM members WHERE ([username] = @UserName)">
<SelectParameters>
<asp:Parameter Name="UserName" Type="String" DefaultValue="" />
</SelectParameters>
</asp:SqlDataSource>
,则默认值设置为User.Identity.Name
在服务器端:
SqlDataSource1.SelectParameters.Item(0).DefaultValue = User.Identity.Name
更简单的方法是使用Configure Data Source
向导,该向导通过在设计视图中单击SqlDataSource对象旁边的右箭头可用。
它说的名字 “大卫” 当我跑在Visual Studio System.Web.Security.FormsIdentity调试器| {} System.Web.Security.FormsIdentity名 = “大卫” – user1625271
authenticationtype = “形式” isAuthenticated =“ true“ – user1625271