是否可以使用SQL数据源和ASP.NET网格视图更新两个表?我有Select语句的以下SQL查询。
SELECT
tbl_user_login.ID, tbl_user_login.UserID,
tbl_user_login.Pass, tbl_user_login.Enabled,
tbl_user_login.Permission, tbl_user_login.Rank,
tbl_user_profile.ID AS Expr1, tbl_user_profile.FName,
tbl_user_profile.LName, tbl_user_profile.Phone,
tbl_user_profile.Email1, tbl_user_profile.Email2
FROM
tbl_user_login
INNER JOIN
tbl_user_profile ON tbl_user_login.ID = tbl_user_profile.ID
但我不知道如何在SQL数据源中编写更新和删除语句
更新
所以我写了商店程序。
CREATE PROCEDURE UpdateTwoTable
(
@ID int,
@UserID varchar(10),
@Pass varchar(50),
@Enabled int,
@Permission int,
@Rank int,
@FName varchar(50),
@LName varchar(50),
@Phone varchar(50),
@Email1 varchar(50),
@Email2 varchar(50)
) AS
BEGIN TRANSACTION
UPDATE tbl_user_login SET UserID = @UserID, Pass = @Pass, Enabled = @Enabled, Permission = @Permission, Rank = @Rank WHERE ID = @ID
IF @@ERROR <> 0
BEGIN
ROLLBACK
RETURN
END
UPDATE tbl_user_profile SET FName = @FName, LName = @LName, Phone = @Phone, Email1 = @Email1, Email2 = @Email2 WHERE ID = @ID
IF @@ERROR <> 0
BEGIN
ROLLBACK
RETURN
END
COMMIT
但我得到了Procedure or function UpdateTwoTable has too many arguments specified.
更新
我遵循了本指南,现在问题解决了。感谢所有帮助过的人!
下面是我的SQL数据源。
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DBConnString %>"
SelectCommand="SELECT tbl_user_login.ID, tbl_user_login.UserID, tbl_user_login.Pass, tbl_user_login.Enabled, tbl_user_login.Permission, tbl_user_login.Rank, tbl_user_profile.ID AS Expr1, tbl_user_profile.FName,
tbl_user_profile.LName, tbl_user_profile.Phone, tbl_user_profile.Email1, tbl_user_profile.Email2 FROM tbl_user_login INNER JOIN tbl_user_profile ON tbl_user_login.ID = tbl_user_profile.ID"
UpdateCommand="UpdateTwoTable" UpdateCommandType="StoredProcedure"
OldValuesParameterFormatString="Original_{0}">
<UpdateParameters>
<asp:Parameter Name="ID" />
<asp:Parameter Name="UserID"/>
<asp:Parameter Name="Pass"/>
<asp:Parameter Name="Enabled"/>
<asp:Parameter Name="Permission"/>
<asp:Parameter Name="Rank"/>
<asp:Parameter Name="FName"/>
<asp:Parameter Name="LName"/>
<asp:Parameter Name="Phone"/>
<asp:Parameter Name="Email1"/>
<asp:Parameter Name="Email2"/>
</UpdateParameters>
</asp:SqlDataSource>
答案 0 :(得分:5)
是的,这是可能的。以下是如何以安全的方式进行的操作:
CREATE PROCEDURE UpdateUser (@ID int, @Pass varchar(15), @Email varchar(75)) AS
BEGIN TRANSACTION
UPDATE tbl_user_login SET Pass = @Pass WHERE ID = @ID
IF @@ERROR <> 0
BEGIN
ROLLBACK
RETURN
END
UPDATE tbl_user_profile SET Email1 = @Email WHERE ID = @ID
IF @@ERROR <> 0
BEGIN
ROLLBACK
RETURN
END
COMMIT
通过这种方式,您不必担心任何更新引起的错误。这意味着:如果其中任何一个失败,整个操作将被取消,您的数据库中不会有不一致的数据。
有关Transactions
的使用的更多信息,请访问:http://www.4guysfromrolla.com/webtech/080305-1.shtml
基本DELETE statement为:DELETE FROM <tablename> WHERE <condition>
答案 1 :(得分:1)
CREATE PROC UpdateUser
(
@ID int
,@Pass varchar(15)
,@Email varchar(75)
) AS
BEGIN
Update
tbl_user_login
Set
Pass = @Pass
Where
ID = @ID
Update
tbl_user_profile
Set
Email1 = @Email
Where
ID = @ID
END
如上所述,您可以将多个sql命令写入单个sproc中。根据需要展开更新。删除工作方式相同......
答案 2 :(得分:0)
<asp:SqlDataSource runat="server":
SelectCommand="SELECT ... "
UpdateCommand="UPDATE a; UPDATE b;"
DeleteCommand="DELETE FROM a; DELETE FROM b;" />
不起作用吗?