Syntaxfehler unter Verwendung des inneren Join und Sqldatasource mit MySQL
-
26-10-2019 - |
Frage
Ich versuche einen Update -Befehl zu schreiben, der 2 Tabellen mit einem verbindet SqlDataSource
. Ich habe es mit 1 Tisch arbeiten, aber wenn ich meine lege INNER JOIN
Syntax in Ich werde einen Fehler geworfen. Es sagt "Meine Syntax ist falsch. Überprüfen Sie das MySQL -Handbuch für die korrekte Syntax"
Hier ist mein Code von meiner ASPX -Seite .:
<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>
AKTUALISIEREN
Ich habe jetzt mit 2 Tischen arbeiten. Es aktualisiert jedoch jede Person in der Tabelle. Zum Beispiel: Ich versuche 1 Person zu aktualisieren und ändere den Vornamen in Marke. Wenn ich auf Update klicke, ändert sich alle im Vornamen der Datenbank zum Markieren.
Hier ist mein neuer Code von meiner ASPX -Seite .:
<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>
Lösung
Du hast dein JOIN
nach dem SET
, und Sie sind nicht spezifisch darüber, auf welche Tabelle sich auf jedes Feld bezieht. Ich denke, zu benutzen JOIN
in einem (n UPDATE
, Sie brauchen Syntax mehr wie folgt:
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" >
Bearbeiten: Basierend auf dem Update Ihrer Frage sieht es so aus, als hätten Sie (in Ihrem WHERE
Klausel)
i.IndividualID=i.IndividualID
Dies ist, was dazu führt, dass alle Ihre Datensätze aktualisiert werden (da diese Aussage immer wahr ist). Wie in meinem obigen Beispiel müssen Sie haben
i.IndividualID=@IndividualID
Auf diese Weise wird nur die Zeile (n), deren ID mit Ihrem Parameter übereinstimmt, aktualisiert (vermutlich nur eine).