MySQLを使用した内側結合とSQLDATASOURCEを使用した構文エラー
-
26-10-2019 - |
質問
私は、2つのテーブルを使用して2つのテーブルを結合するアップデートコマンドを書き込もうとしています SqlDataSource
. 。私はそれを1つのテーブルで作業していますが、私が私を置くとき INNER JOIN
構文では、エラーがスローされます。それは言う」私の構文は間違っています。正しい構文については、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 IndividualID=@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>
アップデート
私は今2つのテーブルを使用しています。ただし、テーブル内のすべての個人を更新します。たとえば、1人を更新しようとしているので、名をマークに変更します。 [更新]をクリックすると、データベースのファーストネーム内のすべてのものが変更されてマークされます。
これが私の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>
解決
あなたにはあなたがいます JOIN
後に SET
, 、そして、各フィールドが参照しているテーブルについて具体的ではありません。使用すると思います JOIN
で UPDATE
, 、このような構文が必要です:
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
i.IndividualID=@IndividualID" >
編集: あなたの質問の更新に基づいて、それはあなたが持っているように見えます(あなたの中に WHERE
句)
i.IndividualID=i.IndividualID
これは、すべてのレコードを更新する原因です(そのステートメントは常に真実であるため)。私の上記の例のように、あなたは持っている必要があります
i.IndividualID=@IndividualID
これにより、パラメーターと一致するIDが更新される行のみが更新されます(おそらく1つだけ)。
所属していません StackOverflow