代码之家  ›  专栏  ›  技术社区  ›  Kolten

数据集更新查询如何工作?

  •  0
  • Kolten  · 技术社区  · 16 年前

    我有一个数据集指向我的SQL数据库中的一个视图,还有一个网格视图使用这个数据集填充自己。 我当然希望行可以编辑,所以我在GridView中添加了编辑和删除功能-标准方法(而不是自定义按钮)

    正在使用更新查询…出于某种原因,它没有自动生成update语句(可能是因为数据集指向一个视图,而不是我猜测的表),所以我必须自己创建它。没问题-我选择数据集,选择属性,然后选择更新查询。

    这是我的问题:

    UPDATE dbo.tblHardware SET TypeID = @TypeID, Name = @Name, Description = @Description, Cost = @Cost, Weight = @Weight, Image = @Image WHERE (HardwareID = @HardwareID)
    

    参数源设置为“Form”,我列出了每个参数的名称。

    以下是ASPX页面中的相关代码:

            <asp:SqlDataSource ID="dsHardware" runat="server"
            ConnectionString="<%$ ConnectionStrings:RequestFormsConnectionString %>"
            OldValuesParameterFormatString="original_{0}" 
            SelectCommand="SELECT * FROM [vHardware]" 
            UpdateCommand="UPDATE dbo.tblHardware SET TypeID = @TypeID, Name = @Name, Description = @Description, Cost = @Cost, Weight = @Weight, Image = @Image WHERE (HardwareID = @HardwareID)" 
            InsertCommand="INSERT INTO [vHardware] ([HardwareID], [TypeID], [Description], [Name], [Cost], [Weight], [Image], [TypeDesc], [TypeName], [TypeTypeID]) VALUES (@HardwareID, @TypeID, @Description, @Name, @Cost, @Weight, @Image, @TypeDesc, @TypeName, @TypeTypeID)" 
            DeleteCommand="DELETE From tblHardware WHERE HardwareID = @HardwareID">
            <UpdateParameters>
                <asp:FormParameter FormField="TypeID" Name="TypeID" />
                <asp:FormParameter FormField="Name" Name="Name" />
                <asp:FormParameter FormField="Description" Name="Description" />
                <asp:FormParameter FormField="Cost" Name="Cost" />
                <asp:FormParameter FormField="Weight" Name="Weight" />
                <asp:FormParameter FormField="Image" Name="Image" />
                <asp:FormParameter FormField="HardwareID" Name="HardwareID" />
            </UpdateParameters>
            <asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False"
            AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" DataKeyNames="HardwareID,TypeTypeID"
            DataSourceID="dsHardware">
            <Columns>
                <asp:BoundField DataField="HardwareID" HeaderText="HardwareID" InsertVisible="False"
                    ReadOnly="True" SortExpression="HardwareID" />
                <asp:BoundField DataField="TypeID" HeaderText="TypeID" SortExpression="TypeID" />
                <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
                <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                <asp:BoundField DataField="Cost" HeaderText="Cost" SortExpression="Cost" />
                <asp:BoundField DataField="Weight" HeaderText="Weight" SortExpression="Weight" />
                <asp:BoundField DataField="Image" HeaderText="Image" SortExpression="Image" />
                <asp:BoundField DataField="TypeDesc" HeaderText="TypeDesc" SortExpression="TypeDesc" />
                <asp:BoundField DataField="TypeName" HeaderText="TypeName" SortExpression="TypeName" />
                <asp:BoundField DataField="TypeTypeID" HeaderText="TypeTypeID" InsertVisible="False"
                    ReadOnly="True" SortExpression="TypeTypeID" />
            </Columns>
        </asp:GridView>
    

    那么,这一切该如何运作呢?抱歉,我是新来的ASP.NET-以前的经典ASP开发人员。

    编辑: 对不起,我应该更清楚一点。尝试更新时,我收到错误“ @Hardware needs to be defined “。我不知道为什么它看起来很明确。 另外,我的.cs文件中没有代码-我想我需要一些东西,但不确定具体是什么。

    3 回复  |  直到 13 年前
        1
  •  0
  •   Olivier Tremblay    16 年前

    这只是一个疯狂的猜测,可能是我做错了,但它起作用了-尝试将hardwareid参数绑定到gridview?

    <asp:ControlParameter> should help you out.
    
    <asp:ControlParameter ControlID="GridView1" Name="HardwareID" 
    
                            PropertyName="SelectedValue" Type="Int32" />
    

    有点。

    但可能会抱怨其他事情。

    [编辑]哦,应该放在“updateParameters”和“deleteParameters”中。

    [再次编辑]如果您计划检查数据,您只需要在.cs中输入代码。

        2
  •  0
  •   Mista_Twist    16 年前

    上面的代码没有关闭asp:sqldatasource?

    或者只是剪掉了复制粘贴?

        3
  •  0
  •   Kolten    16 年前

    好吧,我猜有些错误的条目(我不知道它们是做什么的)以某种方式输入了我的代码。 也就是说,这条线:

    OldValuesParameterFormatString="original_{0}"
    

    …重新生成了网格视图以使用标准方法。真是魅力四射!

    如果有人在读这个,我如何验证数据?