Синтаксическая ошибка с использованием внутреннего соединения и SQLDataSource с MySQL

StackOverflow https://stackoverflow.com/questions/9318785

Вопрос

Я пытаюсь написать команду обновления, которая присоединяется к 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 человека и меняю первое имя на 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>
Это было полезно?

Решение

У тебя есть 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

Таким образом, только строка (ы), чей идентификатор соответствует вашему параметру, обновляется (предположительно только один).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top