[英]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.