2012-09-20 32 views
0

我已经使用了一个sql语句,我要显示当前登录的用户的详细信息。但是当我运行此命令时,它无法在vb.net中使用sql显示当前用户详细信息

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

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

它不显示任何细节,但是当我运行

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

的用户名大卫存在于数据库中,并显示在Web表单只是大卫的细节。我甚至在User.Identity.Name上做了Response.Write,该语句显示当前登录页面的用户。

+0

它说的名字 “大卫” 当我跑在Visual Studio System.Web.Security.FormsIdentity调试器| {} System.Web.Security.FormsIdentity名 = “大卫” – user1625271

+0

authenticationtype = “形式” isAuthenticated =“ true“ – user1625271

回答

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对象旁边的右箭头可用。

+0

带有SelectCommand.Parameters.AddWithValue的语句给我提供了错误,并说此属性必须后跟一个等号和一个值。如果值在引号内,引号必须匹配 第一条语句不显示任何错误我也有” – user1625271

+0

错误不允许使用文字表达式,例如'<%$ ConnectionStrings:Details%>'。改为使用”/>。 \t \t 191那是错误以上是不是错误 – user1625271

+0

” SelectCommand =“SELECT * FROM member”它与此语句我的程序 – user1625271

相关问题