2012-10-26 45 views
0

當我剛開始學習這些東西時,請耐心等待。VS 2010用於SQL語句的SQL更新

我有一個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 

其中,相較於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 

我怎麼會更新辦法一列,說 「MainAsset.site」 如果這是在GridView DDL改變了嗎?任何幫助建設性的幫助,將不勝感激。謝謝。

+3

我認爲你錯過了你的問題。你只是要求使用連接的更新命令的語法,還是你問如何爲像Entity Framework這樣的數據訪問API創建一個'UpdateCommand'覆蓋? – Guvante

+0

感謝您的回覆。我想我理解標記中的UpdateCommand部分。我在詢問語法應該如何查找UpdateCommand。我已經嘗試了一些東西,但我不明白如何「連接點」,我猜:/ –

回答

2

我認爲你想使用UpdateCommand與SqlDataSource和GridView。

更新命令uses SQL

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

example from msdn數據庫列(字段)被綁定到gridview1。 BoundField的值可以通過使用帶有@的DataField的值來傳遞。該數據庫coulmn名字將被綁定到一個網格列<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 
     [email protected],[email protected], 
     [email protected] WHERE [email protected]" 
     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 ...加載數據和將它們顯示爲一張大桌子。這被稱爲連接。你的選擇使用old join syntax instead of the newer syntax

我不確定我是否理解你的評論:「我問的語法應該如何查找UpdateCommand。」在更新中,是否要更新所有3個表(MainAsset,Model和Hardware)中的值? 如果是這種情況,我們需要知道網格中顯示的單個列。您可以查看this question或此update join explanation以更好地瞭解使用連接的更新。

更新2語法的UpdateCommand

  1. 我怎樣才能讓一個自定義的UpdateCommand?
  2. 如何更新一列,如「MainAsset.site」
  3. 如何更新記錄,如果下拉列表更改?

首先,你需要知道如何normal update statement in SQL Server樣子:

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

要創建你寫的,你需要和分配/它傳遞給SqlDataSource的財產UpdateCommand的SQL自定義更新命令。 你可以做以下(假設PK代表主鍵和標識一行):

<asp:SqlDataSource 
     id="SqlDataSource1" 
     // ... see above   
     UpdateCommand="Update MainAsset SET 
     [email protected] 
     ,[email protected], 
     WHERE [email protected]" 
     OnUpdated="OnDSUpdatedHandler"> 
    </asp:SqlDataSource> 

關於你提到的第三個問題,我想在this question指向你:

<asp:DropDownList ID="ddlSite" runat="server" 
    AutoPostBack="True" 
    OnSelectedIndexChanged="SelectionHasChanged" 
    DataSourceID="SqlDataSource1" DataTextField="site" 
    DataValueField="pk" AppendDataBoundItems="true"> 
+0

嗨,三個。感謝你的信息。我會給出一些建議。在我的回答中,我的意思是,在VS 2010中,當您手動輸入自己的SQL Update命令時,需要使用我提供的信息來看看它的樣子?我認爲你給了我足夠的信息來看看,所以我會給你一個鏡頭,看看我結束了。如果我能夠弄清楚,我會發布我的結果,以防其他人遇到類似的情況。再次感謝! –

-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數據源。所以,我想出了更新命令=「UPDATE MainAsset ...」語句不得不尋找類似的東西:

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

我有一個不同的問題了,但它是一個單獨的問題,所以我將張貼在本網站不同的問題。

感謝您的幫助。