Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL语句中使用user.identity.Name_Sql_Asp.net - Fatal编程技术网

在SQL语句中使用user.identity.Name

在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.NET应用程序中,我使用了以下SQL:

<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属性中进行字符串连接,根据这个链接()。你可能想尝试的是跟随这篇文章:使用参数化查询。谢谢,詹姆斯。你太棒了!经过深思熟虑的答案。谢谢。