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>
War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top