2012-02-16 20 views
0

SqlDataSourceを使用して2つのテーブルを結合する更新コマンドを書き込もうとしています。私はそれが1つのテーブルで動作しているが、私はINNER JOINの構文を置くときにエラーがスローされます。それは "私の構文が間違っている。正しい構文用のMySQLのマニュアルを確認してください" と言う。ここ INNER JOINとSqlDataSource with 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があなたのものとほぼ同じように答えた理由が不思議に思うでしょう。 –

+0

あなたの質問が更新されました(元のバージョンに戻す) –

答えて

3

あなたはSET後に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句で)あなたが持っているように見えます

私はあなたがより多くのこのような構文を必要とし、 UPDATEJOINを使用するために、だと思います
i.IndividualID=i.IndividualID 

これは、すべてのレコードが更新される原因です(このステートメントは常に真であるためです)。私の上記の例のように、あなたは

[email protected]ndividualID 

この方法を持っている必要がある唯一のIDがあなたのパラメータが更新されると一致した行(複数可)(おそらくちょうど1)。

+0

ありがとう。これは、両方のテーブルを更新できるようになりました。しかし、それはデータベース内のすべての人に更新を適用しています。それはちょうど1人を更新する必要があります。言い換えると。私は個人のFirst Name:Markを更新しました。データベース内の全員が今すぐ名マークを持っています。私は新しいクエリを再投稿します。私のwhere句が正しくないですか? –

+0

名前は 'Individual'テーブルにあり、AddressとCityのAddressテーブルにあると思います:) –

+0

@ypercube Haha、good point = P少し答えを更新します。 – jadarnel27