Asp.net 无法在vb.net中使用sql显示当前用户详细信息
我使用了一个sql语句来显示当前登录用户的详细信息。但是当我运行这个命令时Asp.net 无法在vb.net中使用sql显示当前用户详细信息,asp.net,sql,sql-server,vb.net,Asp.net,Sql,Sql Server,Vb.net,我使用了一个sql语句来显示当前登录用户的详细信息。但是当我运行这个命令时 ConnectionString = "<%$ ConnectionStrings:Details %>" SelectCommand = "SELECT * FROM member WHERE username = 'User.Identity.Name'" 数据库中存在用户名david,并且在web表单中仅显示david的详细信息。我甚至做了响应。在User.Identity.Name上写入,该语
ConnectionString = "<%$ ConnectionStrings:Details %>"
SelectCommand = "SELECT * FROM member WHERE username = 'User.Identity.Name'"
数据库中存在用户名david,并且在web表单中仅显示david的详细信息。我甚至做了
响应。在User.Identity.Name
上写入,该语句将显示登录页面的当前用户。问题是您将实际的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>
更简单的方法是使用配置数据源
向导,在设计视图中单击SqlDataSource对象旁边的右箭头即可使用该向导。当我在visual studio System.Web.Security.FormsIdentity |{System.Web.Security.FormsIdentity}name=“David”中运行调试器时,它会显示名称“David”authenticationtype=“forms”isAuthenticated=“true”带有SelectCommand.Parameters.AddWithValue的语句给出了错误,并指出此属性后面必须跟一个等号和一个值。如果值在引号中,则引号必须与第一条语句匹配。不显示任何错误。我还有错误3。不允许使用类似“”的文字表达式。改为使用.191这是错误上面不是错误好的,所以你在你的页面中定义它。请看我的最新答案。
<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>
SqlDataSource1.SelectParameters.Item(0).DefaultValue = User.Identity.Name