【问题标题】:C# - Must declare the scalar variable "@ms_id" - ErrorC# - 必须声明标量变量“@ms_id” - 错误
【发布时间】:2011-12-01 09:40:42
【问题描述】:

我正在编写一个跟踪截止日期的网络应用程序。使用此应用程序,您必须能够更新保存在 SQL DB 中的记录。 但是我在我的 aspx 文件中的更新遇到了一些问题。

    <asp:GridView ID="gv_editMilestones" runat="server" DataSourceID="sql_ds_milestones" 
    CellPadding="4" ForeColor="#333333" GridLines="None" Font-Size="Small" 
    AutoGenerateColumns="False" DataKeyNames="id" Visible="false"
    onrowupdated="gv_editMilestones_RowUpdated" 
    onrowupdating="gv_editMilestones_RowUpdating" 
    onrowediting="gv_editMilestones_RowEditing">
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <Columns>
        <asp:CommandField ShowEditButton="True" />
        <asp:BoundField DataField="id" HeaderText="id" SortExpression="id" 
            ReadOnly="True" Visible="false"/>
        <asp:BoundField DataField="ms_id" HeaderText="ms_id" 
            SortExpression="ms_id" ReadOnly="True"/>
        <asp:BoundField DataField="ms_description" HeaderText="ms_description" 
            SortExpression="ms_description"/>  
<%--        <asp:BoundField DataField="ms_resp_team" HeaderText="ms_resp_team" 
            SortExpression="ms_resp_team"/>--%>
        <asp:TemplateField HeaderText="ms_resp_team" SortExpression="ms_resp_team">
            <ItemTemplate>
                <%# Eval("ms_resp_team") %>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList ID="DDL_ms_resp_team" runat="server"
                    DataSourceID="sql_ds_ms_resp_team" DataTextField="team_name"
                    DataValueField="id">
                    <%--SelectedValue='<%# Bind("ms_resp_team") %>'--%>
                </asp:DropDownList>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="ms_focal_point" HeaderText="ms_focal_point" 
            SortExpression="ms_focal_point" />
        <asp:BoundField DataField="ms_exp_date" HeaderText="ms_exp_date" 
            SortExpression="ms_exp_date" DataFormatString="{0:d}"/>
        <asp:BoundField DataField="ms_deal" HeaderText="ms_deal" 
            SortExpression="ms_deal" ReadOnly="True"/>
        <asp:CheckBoxField DataField="ms_active" HeaderText="ms_active" 
            SortExpression="ms_active"/>
    </Columns>
    <FooterStyle BackColor="#CCCC99" />
    <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
    <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <AlternatingRowStyle BackColor="White" />
    <EditRowStyle BackColor="#999999" />
</asp:GridView>
<asp:SqlDataSource ID="sql_ds_milestones" runat="server" 
    ConnectionString="<%$ ConnectionStrings:testServer %>" 
    SelectCommand="SELECT [id]
                          ,[ms_id]
                          ,[ms_description]
                          ,(SELECT [team_name] FROM [NSBP].[dbo].[tbl_teams] as teams
                            WHERE milestones.[ms_resp_team] = teams.[id]) as 'ms_resp_team'
                          ,[ms_focal_point]
                          ,[ms_exp_date]
                          ,(SELECT [deal] FROM [NSBP].[dbo].[tbl_deals] as deals
                            WHERE milestones.[ms_deal] = deals.[id]) as 'ms_deal'
                          ,[ms_active]
                          FROM [NSBP].[dbo].[tbl_milestones] as milestones"
    UpdateCommand="UPDATE [NSBP].[dbo].[tbl_milestones]
                   SET [ms_description] = @ms_description
                   ,[ms_focal_point] = @ms_focal_point
                   ,[ms_active] = @ms_active
                   WHERE [ms_id] = @ms_id">
    <UpdateParameters>
        <asp:Parameter Name="ms_description" Type="String" />
<%--            <asp:Parameter Name="ms_resp_team" Type="String" />--%>
        <asp:Parameter Name="ms_focal_point" Type="String" />
        <asp:Parameter Name="ms_exp_date" Type="DateTime" />
        <asp:Parameter Name="ms_active" Type="Boolean" />
<%--            <asp:Parameter Name="ms_id" Type="String" />--%>
    </UpdateParameters>
</asp:SqlDataSource>

您可以看到我的完整 GridView 结构 + 我的数据源绑定到此 GridView。 我的代码隐藏文件中的 onrowupdating-function 中没有任何内容。

提前谢谢

【问题讨论】:

    标签: c# variables declare scalar


    【解决方案1】:

    您在 SQL 语句的where 子句中使用了@ms_id,但设置&lt;asp:Parameter ... /&gt; 的行已被注释掉。尝试取消注释:

    <%-- <asp:Parameter Name="ms_id" Type="String" /> --%>
    

    然后再试一次

    【讨论】:

    • 好吧,这确实是问题所在:)谢谢!此外,更新没有做它应该做的事情。基本上我希望他更新以下字段:ms_description、ms_focal_point、ms_exp_date 和 ms_active!在我的其他 2 个编辑页面中,我或多或少地进行了相同的操作,但在此操作中没有执行更新。有什么想法吗?
    【解决方案2】:

    这一行;

    <%--            <asp:Parameter Name="ms_id" Type="String" />--%>
    

    似乎被注释掉了,用在 SQL where 子句中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多