问题是您将实际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 对象旁边的右箭头即可使用该向导。