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

时间:2009-04-23 17:29:28

标签: c# asp.net sql sql-update

我有一个指向我的SQL数据库中的View的数据集,以及一个使用此数据集填充自身的gridview。 我当然希望行可编辑,所以我在gridview中添加了编辑和删除功能 - 标准方法(不是自定义按钮)

现在使用Update Query ...由于某种原因,它没有自动生成更新语句(可能导致数据集指向视图而不是我正在猜测的表)所以我必须自己创建它。没问题 - 我选择数据集,选择属性,然后选择UpdateQuery。

这是我的问题:

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 个答案:

答案 0 :(得分:0)

这里只是一个疯狂的猜测,可能是我做错了但它确实有效 - 尝试将HardwareID参数绑定到gridview?

<asp:ControlParameter> should help you out.

<asp:ControlParameter ControlID="GridView1" Name="HardwareID" 

                        PropertyName="SelectedValue" Type="Int32" />

Kindof。

可能会抱怨别的东西。

[编辑]哦,那应该进入你的“UpdateParameters”和“DeleteParameters”。

[再次编辑]如果您打算检查数据,则只需要.cs中的代码。

答案 1 :(得分:0)

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

或者那只是在复制粘贴中被剪掉了?

答案 2 :(得分:0)

好吧,我想有些错误的条目(我不知道他们做了什么)以某种方式进入我的代码。 即,这一行:

OldValuesParameterFormatString="original_{0}"

...重新制作gridview以使用标准方法。像魅力一样工作!

如果有人正在阅读此内容,我该如何验证数据?