0

请耐心等待,因为我刚刚开始学习这些东西。

我有一个 VS 2010 Web 项目,我正在尝试了解如何进行自定义UpdateCommand(因为我选择编写自己的 SQL 语句,所以我没有 VS 2010 自动为我生成更新命令的选项。 ) 问题是:我不知道UpdateCommand应该是什么样子。这是我的选择:

SELECT * FROM Dbo.MainAsset, dbo.Model, dbo.Hardware WHERE MainAsset.device = Hardware.DeviceID AND MainAsset.model = Model.DeviceID

其中,VS 2010 变成:

SELECT MainAsset.pk, MainAsset.img, MainAsset.device, MainAsset.model, MainAsset.os, MainAsset.asset, MainAsset.serial, MainAsset.inyear, MainAsset.expyear, MainAsset.site, MainAsset.room, MainAsset.teacher, MainAsset.FirstName, MainAsset.LastName, MainAsset.Notes, MainAsset.Dept, MainAsset.AccountingCode, Model.Model AS Hardware, Model.pk AS Model, Model.DeviceID, Hardware.Computer, Hardware.pk AS Expr3, Hardware.DeviceID AS Expr4 FROM MainAsset INNER JOIN Hardware ON MainAsset.device = Hardware.DeviceID INNER JOIN Model ON MainAsset.model = Model.DeviceID

如果在 Gridview DDL 中发生更改,我将如何更新一列,例如“MainAsset.site”?任何帮助建设性的帮助将不胜感激。谢谢你。

4

2 回答 2

2

我假设您希望将 UpdateCommand 与 SqlDataSource 和 GridView 一起使用。

更新命令使用 SQL

Update yourTable SET columnName = 'yourValue';
Update MainAsset Set site ='http://stackoverflow.com';

msdn 的示例中,数据库列(字段)绑定到 gridview1。BoundField 的值可以通过使用带有@ 的DataField 的值来传递。数据库列 LastName 将绑定到网格列<asp:BoundField HeaderText="Last Name" DataField="LastName" />,并在更新命令中使用 @LastName 传递值:

 <asp:SqlDataSource
      id="SqlDataSource1"
      runat="server"
      DataSourceMode="DataSet"
      ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
      SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees"
      UpdateCommand="Update Employees SET   
         FirstName=@FirstName,LastName=@LastName,
         Title=@Title WHERE EmployeeID=@EmployeeID"
      OnUpdated="OnDSUpdatedHandler">
  </asp:SqlDataSource>

  <asp:GridView
      id="GridView1"
      runat="server"
      AutoGenerateColumns="False"
      DataKeyNames="EmployeeID"
      AutoGenerateEditButton="True"
      DataSourceID="SqlDataSource1">
      <columns>
          <asp:BoundField HeaderText="First Name" DataField="FirstName" />
          <asp:BoundField HeaderText="Last Name" DataField="LastName" />
          <asp:BoundField HeaderText="Title" DataField="Title" />
      </columns>
  </asp:GridView>

更新以解决您的评论

Select * from Dbo.MainAsset, dbo.Model ...从不同的表中加载数据并将它们显示为一个大表。这称为联接。您的 Select 使用旧的连接语法而不是新的语法

我不确定我是否理解您的评论:“我在询问语法应该如何查找 UpdateCommand。” 在您的更新中,您想更新所有 3 个表(MainAsset、Model 和 Hardware)中的值吗?如果是这种情况,我们需要知道网格中显示的单列。您可以查看此问题或此更新加入说明,以更好地了解加入更新。

UpdateCommand 的更新 2 语法

  1. 如何制作自定义 UpdateCommand?
  2. 我将如何更新一列,比如“MainAsset.site”
  3. 如果下拉列表更改,如何更新记录?

首先,您需要知道SQL Server 中正常的更新语句是怎样的:

UPDATE MainAsset
    SET site= NewValueForSite
        ,teacher = 'Dr. Seuss'
    WHERE rowId = FilterValue

要创建自定义更新命令,您需要编写所需的 sql 并将其分配/传递给 SqlDataSource 的属性UpdateCommand。您可以执行以下操作(假设 pk 代表主键并标识一行):

 <asp:SqlDataSource
      id="SqlDataSource1"
      // ... see above          
      UpdateCommand="Update MainAsset SET   
         site=@site
         ,teacher=@teacher,
         WHERE pk=@pk"
      OnUpdated="OnDSUpdatedHandler">
  </asp:SqlDataSource>

关于您的第三个问题,我想向您指出这个问题

<asp:DropDownList ID="ddlSite" runat="server"  
   AutoPostBack="True" 
   OnSelectedIndexChanged="SelectionHasChanged"
   DataSourceID="SqlDataSource1" DataTextField="site"
   DataValueField="pk" AppendDataBoundItems="true">
于 2012-10-26T23:04:13.347 回答
-1

长话短说,这就是我所做的:

有问题的 DDL:

            <asp:TemplateField HeaderText="site" SortExpression="site">
                <EditItemTemplate>
                    <asp:DropDownList ID="ddlSites" runat="server" AutoPostBack="True" 
                        DataSourceID="RetrieveSiteSQL" DataTextField="Sites" DataValueField="Sites" 
                        SelectedValue='<%# Bind("site") %>'>
                    </asp:DropDownList>
                </EditItemTemplate>

我发现我的 RetrieveSiteSQL 不是需要更新命令的那个,而是当我单击“更新”(在编辑模板中)时更新的“主”SQL 数据源。所以,我发现UpdateCommand="UPDATE MainAsset ..." 语句必须类似于:

UpdateCommand="UPDATE MainAsset SET [site] = @Site WHERE [pk] = @pk">

我现在有一个不同的问题,但这是一个单独的问题,所以我会在这个网站上发布一个不同的问题。

谢谢大家的帮助。

于 2012-11-07T16:12:18.647 回答