加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

如何编写更新查询以使用SQL数据源更新两个表?

发布时间:2020-12-25 22:19:15 所属栏目:编程 来源:网络整理
导读:是否可以使用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 Ex

是否可以使用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数据源中编写更新和删除语句

UPDATE

所以我写了商店程序.

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

但我得到过程或函数UpdateTwoTable指定了太多参数.

UPDATE

我按照本指南,现在问题解决了.感谢所有帮助过的人!

http://www.whitworth.org/2006/01/16/how-to-troubleshoot-procedure-or-function-has-too-many-arguments-specified-in-aspnet-20/

下面是我的SQL数据源.

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ConnectionStrings:DBConnString %>" 
        SelectCommand="SELECT tbl_user_login.ID,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>

解决方法

是的,这是可能的.以下是如何以安全的方式进行操作:
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

通过这种方式,您不必担心任何更新引起的错误.这意味着:如果其中任何一个失败,整个操作将被取消,您的数据库中不会有不一致的数据.

有关交易使用的更多信息,请访问:http://www.4guysfromrolla.com/webtech/080305-1.shtml

基本的DELETE statement是:DELETE FROM< tablename> WHERE< condition>

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读