简体   繁体   English

在MySQL中使用INNER JOIN和SqlDataSource的语法错误

[英]Syntax error using INNER JOIN and SqlDataSource with MySQL

I am trying to write an update command that joins 2 tables using an SqlDataSource . 我正在尝试编写一个使用SqlDataSource连接2个表的更新命令。 I have it working with 1 table, but when I put my INNER JOIN syntax in I get thrown an error. 我在1个表上使用它,但是当我使用INNER JOIN语法时,会抛出错误。 It says " My syntax is wrong. Check MySql manual for correct syntax " 它说:“ 我的语法错误。请检查MySql手册以获取正确的语法

Here is my Code from my ASPX page.: 这是我的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>

UPDATE 更新

I have it working with 2 tables now. 我现在有2张桌子。 However it updates every Individual in the Table. 但是,它将更新表中的每个个人。 For example: I am trying to update 1 person and I change the first name to Mark. 例如:我正在尝试更新1个人,并且将名字更改为Mark。 When I click update , it changes everyone in the Database First Name to Mark. 当我单击update时,它将数据库名中的每个人都更改为Mark。

Here is my new Code from my ASPX page.: 这是我的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>

You have your JOIN after the SET , and you're not being specific about which table each field is referencing. 您可以在SET之后加上JOIN ,而不必具体说明每个字段所引用的表。 I think, to use JOIN in an UPDATE , you need syntax more like this: 我认为,要在UPDATE使用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 
                    i.IndividualID=@IndividualID" >

Edit: Based on the update to your question, it looks like you have (in your WHERE clause) 编辑:根据对问题的更新,看起来您已经有了(在WHERE子句中)

i.IndividualID=i.IndividualID

This is what's causing all your records to be updated (because that statement is always true). 这就是导致您的所有记录都被更新的原因(因为该语句始终为true)。 As in my above example, you need to have 如上例所示,您需要

i.IndividualID=@IndividualID

This way only the row(s) whose ID matches your parameter gets updated (presumably just one). 这样,只有ID与您的参数匹配的行才会更新(大概只有一个)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM