【问题标题】:Must declare the scalar variable "@chkBeg1"必须声明标量变量“@chkBeg1”
【发布时间】:2026-01-21 01:50:02
【问题描述】:

我有一个带有标签和 3 个带有编辑按钮的复选框的 gridview,但是当我尝试在我的 gridview 中编辑其中一行时出现此错误。 System.Data.SqlClient.SqlException:必须声明标量变量“@chkBeg1”。 这是我的代码:

<asp:GridView class="gridview" ID="GridView1" runat="server" AutoGenerateColumns="false"
         DataKeyNames="id" SkinID="Professional" Font-Name="Verdana"
                Font-Size="10pt" Cellpadding="4"
            HeaderStyle-BackColor="#109a50"
            HeaderStyle-ForeColor="White"
                AlternatingRowStyle-BackColor="#dddddd" DataSourceID="SqlDataSource1" >
            <Columns>

                <asp:BoundField DataField="language" HeaderText="language" 
                    SortExpression="language" />
                <asp:TemplateField HeaderText="Beginner">
                <ItemTemplate>
                    <asp:CheckBox ID="chkBeg" runat="server" Checked ='<%# GetStatus(Eval("Beginner")) %>' Enabled="False" onclick="CheckBoxCheck(this);" />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:CheckBox ID="chkBeg1" runat="server" Checked='<%# GetStatus(Eval("Beginner")) %>' Enabled="True" onclick="CheckBoxCheck(this);" />
                </EditItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Intermediate">
                <ItemTemplate>
                    <asp:CheckBox ID="chkIn" runat="server" Checked ='<%# GetStatus(Eval("Intermediate")) %>' Enabled="False" onclick="CheckBoxCheck(this);" />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:CheckBox ID="chkIn1" runat="server" Checked='<%# GetStatus(Eval("Intermediate")) %>' Enabled="True" onclick="CheckBoxCheck(this);" />
                </EditItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Advance">
                <ItemTemplate>
                    <asp:CheckBox ID="chkAd" runat="server" Checked ='<%# GetStatus(Eval("Advance")) %>' Enabled="False" onclick="CheckBoxCheck(this);" />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:CheckBox ID="chkAd1" runat="server" Checked='<%# GetStatus(Eval("Advance")) %>' Enabled="True" onclick="CheckBoxCheck(this);" />
                </EditItemTemplate>
                </asp:TemplateField>
                <asp:CommandField ShowEditButton="True" />
</Columns>
        </asp:GridView>

这是我的编辑按钮的代码:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="Data Source=db2.sescor.net;Initial Catalog=SDMS_PORTAL;User ID=sdmsusr;Password=@sdmsusr" 
        ProviderName="System.Data.SqlClient"
        SelectCommand="SELECT id, Idno, language, beginner, intermediate, advance FROM [sample_skills]" FilterExpression="Idno = '{0}'"
        UpdateCommand="UPDATE [sample_skills] SET 
                      [beginner] = @chkBeg1, [intermediate] = @chkIn1,[advance] = @chkAd1
                      WHERE [id] = @id"> 
        <FilterParameters>
        <asp:ControlParameter Name="skills" ControlID="label9" PropertyName="Text" />
        </FilterParameters>
    </asp:SqlDataSource>

谢谢。

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    你必须像这样添加SqlDataSource UpdateParameters:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="Data Source=db2.sescor.net;Initial Catalog=SDMS_PORTAL;User ID=sdmsusr;Password=@sdmsusr" 
            ProviderName="System.Data.SqlClient"
            SelectCommand="SELECT id, Idno, language, beginner, intermediate, advance FROM [sample_skills]" FilterExpression="Idno = '{0}'"
            UpdateCommand="UPDATE [sample_skills] SET 
                          [beginner] = @chkBeg1, [intermediate] = @chkIn1,[advance] = @chkAd1
                          WHERE [id] = @id"> 
    
              <UpdateParameters>
                  <asp:ControlParameter Name="chkBeg1" ControlId="CheckBox1" PropertyName="Checked"/>
              </UpdateParameters>
    
    
            <FilterParameters>
            <asp:ControlParameter Name="skills" ControlID="label9" PropertyName="Text" />
            </FilterParameters>
        </asp:SqlDataSource>
    

    有关 SqlDataSource UpdateParameters 的更多信息,请查看此链接:

    https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.updateparameters(v=vs.110).aspx

    【讨论】:

    • 为什么它的 PropertyName 是“Text”.. 它必须只包含 True 或 False,因为它是一个复选框。
    • 好的,再次检查答案。我更新了。