无法在vb.net中使用sql显示当前用户详细信息

时间:2012-09-20 01:39:27

标签: asp.net sql sql-server vb.net

我使用了一个sql语句,我想显示当前用户登录的详细信息。但是当我运行此命令时

ConnectionString = "<%$ ConnectionStrings:Details %>" 

SelectCommand = "SELECT *  FROM member WHERE username = 'User.Identity.Name'"

它没有显示任何细节,但是当我运行时

SelectCommand = "SELECT *  FROM member WHERE username = 'david'" 

用户名david存在于数据库中,并在Web表单中仅显示david的详细信息。我甚至在Response.Write上做了User.Identity.Name,该语句显示了页面中记录的当前用户。

1 个答案:

答案 0 :(得分:2)

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