在SQL语句中使用user.identity.Name
在我的ASP.NET应用程序中,我使用了以下SQL:在SQL语句中使用user.identity.Name,sql,asp.net,Sql,Asp.net,在我的ASP.NET应用程序中,我使用了以下SQL: <asp:SqlDataSource ID="ISESDatabase" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [id], [Word], [Definition], [Example] FROM [gridData] WHERE [Strategy]='Vocabul
<asp:SqlDataSource ID="ISESDatabase" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [id], [Word], [Definition], [Example] FROM [gridData] WHERE [Strategy]='Vocabulary'">
但是,我需要在Where子句中添加一个用户id检查,我希望使用user.identity.Name来执行检查。我尝试了以下方法,但无效:
<asp:SqlDataSource ID="ISESDatabase" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [id], [Word], [Definition], [Example] FROM [gridData] WHERE [userid]= /'" + user.identity.Name + "/' AND [Strategy]='Vocabulary'">
以下是错误:
分析器错误
描述:解析服务此请求所需的资源时出错。请查看以下特定的解析错误详细信息,并适当修改源文件
分析器错误消息:服务器标记的格式不正确
源错误:
Line 46: <asp:SqlDataSource ID="ISESDatabase" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [id], [Word], [Definition], [Example] FROM [gridData] WHERE [userid]=/'" + User.Identity.Name + "/' AND [Strategy]='Vocabulary'">
第46行:
我做错了什么?要转义字符串中的特殊字符,请使用反斜杠“\”而不是正斜杠“/”。试试这个,看看它是否有效:
<asp:SqlDataSource ID="ISESDatabase" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [id], [Word], [Definition], [Example] FROM [gridData] WHERE [userid]= \'" + user.identity.Name + "\' AND [Strategy]='Vocabulary'">
我认为你需要重新考虑你的方法。与其尝试对asp:SqlDataSource元素中的“user.Identity.Name”属性进行“硬编码”,不如尝试创建一个参数来保存此值:
1) 将SelectCommand中的“user.Identity.Name”替换为参数的标记,例如“@Name”
2) 然后为asp:SqlDataSource定义一个SelectParameter元素,该元素的Name属性为'Name'。将参数的Type属性设置为“user.Identity.Name”的数据类型
Private Sub myDataSource_Selecting(sender As Object, e As SqlDataSourceSelectingEventArgs) Handles myDataSource.Selecting
e.Command.Parameters("@Name").Value = 2
End Sub
3) 然后,可以在事件处理程序中为SqlDataSource的Selecting事件定义要以编程方式选择的值
下面是一个有效的例子。以下代码段来自aspx页面:
<asp:GridView ID="myGridView" runat="server" DataSourceID="myDataSource" DataKeyNames="ID"></asp:GridView>
<asp:SqlDataSource ID="myDataSource" runat="server"
SelectCommand="SELECT * FROM [Users] WHERE [Name] = @Name"
ConnectionString='Data Source=(LocalDB)\v11.0;AttachDbFilename="c:\users\windowsLogin\documents\visual studio 2012\Projects\WebApplication1\WebApplication1\App_Data\Database1.mdf";Integrated Security=True'>
<SelectParameters>
<asp:Parameter Name="Name" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
我希望这是清楚的。。。如果没有,请参阅MSDN上的文档。这里有几页可以让您开始学习:
更一般地说
为什么要用/
s包围usename?已删除并获得以下错误:解析器错误描述:解析服务此请求所需的资源时出错。请查看以下特定的解析错误详细信息,并适当修改源文件。分析器错误消息:服务器标记的格式不正确。第46行:来自[gridData],其中[userid]=“+User.Identity.Name+”,[Strategy]=“词汇”“>进行了建议的更改,现在获取:解析器错误描述:解析服务此请求所需的资源时出错。请查看以下特定的解析错误详细信息,并适当修改源文件。分析器错误消息:服务器标记的格式不正确。第46行:从[gridData],其中[userid]=“\'”+User.Identity.Name+“\'和[Strategy]=“词汇表””>好的,我做了一些研究,问题并不是那么简单。基本上,你不能在SelectCommand属性中进行字符串连接,根据这个链接()。你可能想尝试的是跟随这篇文章:使用参数化查询。谢谢,詹姆斯。你太棒了!经过深思熟虑的答案。谢谢。