2012-02-16 41 views
0

我想寫一個更新命令,使用SqlDataSource連接兩個表。我有它與1表工作,但是當我把我的INNER JOIN語法在我得到一個錯誤。它說: 「我語法是錯誤的。檢查MySQL手冊的語法是否正確語法錯誤使用INNER JOIN和SqlDataSource與MySQL

這裏是我的代碼從我的ASPX頁面:

<asp:SqlDataSource ID="AdminSalesmanDetailDS" runat="server" 
     ConnectionString="<%$ ConnectionStrings:intelliairConnectionString %>" 
     ProviderName="<%$ ConnectionStrings:intelliairConnectionString.ProviderName %>" 
     SelectCommand="individual_AddressByIndividualID" 
     SelectCommandType="StoredProcedure" 
     UpdateCommand="UPDATE individual SET 
      FarmName = @FarmName, 
      FirstName = @FirstName, 
      MiddleName = @MiddleName, 
      Address1 = @Address1, 
      City = @City 
      INNER JOIN address a ON i.IndividualID = a.IndividualID, 
     WHERE [email protected]"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="gvSalesman" Name="oIndividualID" 
       PropertyName="SelectedValue" Type="Int32" /> 
     </SelectParameters> 
      <UpdateParameters> 

      <asp:ControlParameter Name="FarmName" ControlId="fvAdminSalesmanDetail$CompanyTextBox" PropertyName="Text"/> 
      <asp:ControlParameter Name="FirstName" ControlId="fvAdminSalesmanDetail$FirstNameTextBox" PropertyName="Text"/> 
      <asp:ControlParameter Name="MiddleName" ControlId="fvAdminSalesmanDetail$MiddleNameTextBox" PropertyName="Text"/> 
      <asp:ControlParameter Name="Address1" ControlId="fvAdminSalesmanDetail$Address1TextBox" PropertyName="Text"/> 
      <asp:ControlParameter Name="City" ControlId="fvAdminSalesmanDetail$cityTextBox" PropertyName="Text"/> 
     </UpdateParameters> 


    </asp:SqlDataSource> 

UPDATE

我有它現在與2張桌子一起工作。但它會更新表中的每個人。例如:我正在嘗試更新1個人,並將第一個名稱更改爲Mark。當我點擊更新時,它會將數據庫名字中的每個人都更改爲標記。

這是我的新代碼從我的ASPX頁面:

<asp:SqlDataSource ID="AdminSalesmanDetailDS" runat="server" 
     ConnectionString="<%$ ConnectionStrings:intelliairConnectionString %>" 
     ProviderName="<%$ ConnectionStrings:intelliairConnectionString.ProviderName %>" 
     SelectCommand="individual_AddressByIndividualID" 
     SelectCommandType="StoredProcedure" 
    UpdateCommand="UPDATE individual i 
     inner join address a 
     on a.individualID = i.individualID 
     set 

     i.FarmName = @FarmName, 
     i.FirstName = @FirstName, 
     i.LastName = @LastName, 
     i.MiddleName = @MiddleName, 
     i.Phone = @Phone, 
     i.PhoneExtention = @PhoneExtention, 
     i.MobilPhone = @MobilPhone, 
     i.Fax = @Fax, 
     i.Email = @Email, 

     a.Address1 = @Address1, 
     a.Address2 = @Address2, 
     a.City = @City, 
     a.State = @State, 
     a.Zip = @Zip, 
     a.Country = @Country 
     where 
     i.IndividualID = i.IndividualID"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="gvSalesman" Name="oIndividualID" 
       PropertyName="SelectedValue" Type="Int32" /> 
     </SelectParameters> 
      <UpdateParameters> 

      <asp:ControlParameter Name="FarmName" ControlId="fvAdminSalesmanDetail$CompanyTextBox" PropertyName="Text"/> 
      <asp:ControlParameter Name="FirstName" ControlId="fvAdminSalesmanDetail$FirstNameTextBox" PropertyName="Text"/> 
      <asp:ControlParameter Name="MiddleName" ControlId="fvAdminSalesmanDetail$MiddleNameTextBox" PropertyName="Text"/> 
      <asp:ControlParameter Name="Address1" ControlId="fvAdminSalesmanDetail$Address1TextBox" PropertyName="Text"/> 
      <asp:ControlParameter Name="City" ControlId="fvAdminSalesmanDetail$cityTextBox" PropertyName="Text"/> 
     </UpdateParameters> 


    </asp:SqlDataSource> 
+0

只是一個提示。當你更新你的問題時,不要抹掉原來的代碼或問題。當人們現在來看問題時,他們會問爲什麼@jadarnel的回答幾乎與您所擁有的相同。 – 2012-02-16 22:15:10

+0

更新了您的問題(恢復原始版本)。 – 2012-02-16 22:19:07

回答

3

你有你的JOINSET,而你不是具體哪個表中的每個字段被引用。我認爲,在UPDATE使用JOIN,你需要語法的更多是這樣的:

UpdateCommand=" UPDATE 
        individual i 
       INNER JOIN 
        address a 
         ON i.IndividualID = a.IndividualID 
       SET 
        i.FarmName = @FarmName, 
        i.FirstName = @FirstName, 
        i.MiddleName = @MiddleName, 
        a.Address1 = @Address1, 
        a.City = @City 
       WHERE 
        [email protected]" > 

編輯:基礎上更新你的問題,它看起來像你(在你的WHERE條款)

i.IndividualID=i.IndividualID 

這是導致所有記錄更新的原因(因爲該語句始終爲真)。正如我在上面的例子中,你需要有

[email protected] 

這種方式僅行(S),其ID相匹配的參數被更新(可能只有一個)。

+0

好的。謝謝。這有助於我現在可以更新兩個表。但是,它將更新應用於數據庫中的每個人。它只需要更新1個人。換一種說法。我更新了個人名字:馬克。數據庫中的每個人現在都有名字Mark。我將重新發布我的新查詢。我的where子句不正確? – 2012-02-16 22:05:03

+0

我猜想名稱是在'個人'表和地址和地址'表中的地址:) – 2012-02-16 22:06:42

+0

@ypercube哈哈,好點= P我會稍微更新答案。 – jadarnel27 2012-02-16 22:08:10