C# “nvarchar”附近的语法不正确。必须声明标量变量“@RegID”

C# “nvarchar”附近的语法不正确。必须声明标量变量“@RegID”,c#,asp.net,sql-server,visual-studio,sql-update,C#,Asp.net,Sql Server,Visual Studio,Sql Update,我正试图更新/编辑更新查询中的用户详细信息,但我得到的错误是必须声明一个标量变量@RegID。我试着处理这个查询,但仍然出现同样的错误 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:rm3558nConnectionString2 %>" DeleteCommand="DELETE FROM [Registration] WHERE [R

我正试图更新/编辑更新查询中的用户详细信息,但我得到的错误是必须声明一个标量变量@RegID。我试着处理这个查询,但仍然出现同样的错误

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:rm3558nConnectionString2 %>" DeleteCommand="DELETE FROM [Registration] WHERE [RegID] = @original_RegID" InsertCommand="INSERT INTO [Registration] ([First Name], [Last Name], [Email ID], [Password], [Confirm Password], [DOB], [Gender]) VALUES (@First_Name, @Last_Name, @Email_ID, @Password, @Confirm_Password, @DOB, @Gender)" SelectCommand="SELECT * FROM [Registration] WHERE ([Email ID] = @Email_ID)" UpdateCommand="UPDATE [Registration] SET [First Name] = @First_Name, [Last Name] = @Last_Name, [Email ID] = @Email_ID, [Password] = @Password, [Confirm Password] = @Confirm_Password, [DOB] = @DOB, [Gender] = @Gender WHERE [RegID] = @original_RegID" OldValuesParameterFormatString="original_{0}">
                <DeleteParameters>
                    <asp:Parameter Name="original_RegID" Type="Int32" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="First_Name" Type="String" />
                    <asp:Parameter Name="Last_Name" Type="String" />
                    <asp:Parameter Name="Email_ID" Type="String" />
                    <asp:Parameter Name="Password" Type="String" />
                    <asp:Parameter Name="Confirm_Password" Type="String" />
                    <asp:Parameter DbType="Date" Name="DOB" />
                    <asp:Parameter Name="Gender" Type="String" />
                </InsertParameters>
                <SelectParameters>
                    <asp:ControlParameter ControlID="Namelbl" Name="Email_ID" PropertyName="Text" Type="String" />
                </SelectParameters>
                <UpdateParameters>
                    <asp:Parameter Name="First_Name" Type="String" />
                    <asp:Parameter Name="Last_Name" Type="String" />
                    <asp:Parameter Name="Email_ID" Type="String" />
                    <asp:Parameter Name="Password" Type="String" />
                    <asp:Parameter Name="Confirm_Password" Type="String" />
                    <asp:Parameter DbType="Date" Name="DOB" />
                    <asp:Parameter Name="Gender" Type="String" />
                    <asp:Parameter Name="original_RegID" Type="Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>
网格视图

当在SqlDataSource中使用带有空格的字段名并用SELECT*…标记SelectCommand output时,会出现此问题。。。它选择所有列而不使用别名,而GridView控件中的BoundField不接受使用空格的字段/列名

因此,您需要在SelectCommand中使用SELECT语句,提及GridView中用于DataField属性的所有字段名,并且只对所有带有空格的列进行别名,如下所示:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ...
SelectCommand="SELECT [RegID], [First Name] AS First_Name, [Last Name] AS Last_Name, [Email ID] AS Email_ID, [Password], [Confirm Password] AS Confirm_Password, DOB, Gender FROM [Registration] WHERE ([Email ID] = @Email_ID)" 
...>
...
</asp:SqlDataSource>
通过上述设置,BoundField上的绑定应该能够正常工作,而不会更改数据库中的字段名

注:。。。为简洁起见,在代码示例上标记删除的部分

类似问题:


从这篇文章得出的结论

可能重复的@Div没有帮助您的查询看起来可以运行,您是否将SqlDataSource绑定到另一个控件,例如GridView?请确保您的Bind命令不包含这样的括号:@TetsuyaYamamoto我也编辑并添加了网格视图代码,请查看上面的内容。我发现您的问题并非真正来自UpdateCommand,而是来自您的SelectCommand。SelectCommand=SELECT*FROM[Registration],其中[Email ID]=@Email\u ID返回所有字段名而不使用别名,并且绑定到GridView时,列名上不能有空格。尝试在SelectCommand中使用下划线为每个列名添加别名,并使用下划线更改所有边界字段名。
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ...
SelectCommand="SELECT [RegID], [First Name] AS First_Name, [Last Name] AS Last_Name, [Email ID] AS Email_ID, [Password], [Confirm Password] AS Confirm_Password, DOB, Gender FROM [Registration] WHERE ([Email ID] = @Email_ID)" 
...>
...
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" DataKeyNames="RegID" DataSourceID="SqlDataSource1" ForeColor="Black" GridLines="Horizontal">
    <Columns>
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
        <asp:BoundField DataField="RegID" HeaderText="RegID" InsertVisible="False" ReadOnly="True" SortExpression="RegID" />
        <asp:BoundField DataField="First_Name" HeaderText="First Name" SortExpression="First_Name" />
        <asp:BoundField DataField="Last_Name" HeaderText="Last Name" SortExpression="Last_Name" />
        <asp:BoundField DataField="Email_ID" HeaderText="Email ID" SortExpression="Email_ID" />
        <asp:BoundField DataField="Password" HeaderText="Password" SortExpression="Password" />
        <asp:BoundField DataField="Confirm_Password" HeaderText="Confirm Password" SortExpression="Confirm_Password" />
        <asp:BoundField DataField="DOB" HeaderText="DOB" SortExpression="DOB" />
        <asp:BoundField DataField="Gender" HeaderText="Gender" SortExpression="Gender" />
    </Columns>
    ...
</asp:GridView>