尽管命令正确,表仍未更新

时间:2012-04-11 09:52:27

标签: c# asp.net linq

我使用存储过程来插入,更新和删除记录,我使用LINQ来执行或调用过程。 单击提交按钮后,更新过程已执行,但表中没有变化! 如果我传递一个像“杰克”而不是fname_txt.text的值,它会工作并更新。 我不知道文本框对象和引号中的值有什么不同?! 这是代码:

    protected void submit_Click(object sender, EventArgs e)
    {

        try
        {
            ZobLinqDataContext db = new ZobLinqDataContext();
            string pasword = CryptorEngine.Encrypt(pass_txt.Text, true);
            long uid = Convert.ToInt64(Request["uid"]);
            db.pUpZDBUser(uid,
                uname_txt.Text,
                pasword,
                fname_txt.Text.Trim(),
                lname_txt.Text.Trim(),
                modir.Checked,
                voting.Checked,
                Convert.ToInt32(Zarib_txt.Text),
                false
                );
            db.SubmitChanges();
            Response.Write(uname_txt);
        }
        finally
        {
            Session["sub"] = "1";
        }

    }

这是更新过程:

    USE [ZOBDB]
GO
/****** Object:  StoredProcedure [dbo].[pUpZDBUser]    Script Date: 04/11/2012 15:17:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[pUpZDBUser] 
    @UID bigint,
    @Uname  nvarchar(100),
    @Pass   nvarchar(100),
    @fname  nvarchar(50),
    @lname  nvarchar(50),
    @KU bit,
    @KV bit,
    @ZribV  int,
    @del bit
As
BEGIN TRANSACTION UpUser    
    Set NOCOUNT ON

    UPDATE Users SET 
        Uname=@Uname, 
        Pass=@Pass, 
        fname=@fname, 
        lname=@lname, 
        KU=@KU, 
        KV=@KV, 
        ZribV=@ZribV,
        del=@del
    where (UID=@UID)

    --RollBack if Err
    IF @@ERROR != 0 and @@ROWCOUNT != 1
    BEGIN
        declare @msg nvarchar(30)
        set @msg = ' error '+@Uname
        ROLLBACK
        RAISERROR(@msg,16,1)
        RETURN
    END
COMMIT TRANSACTION UpUser
RETURN

2 个答案:

答案 0 :(得分:1)

如果您将SPROC更改为

,我认为您会有更多的运气
--RollBack if Err     
IF @@ERROR != 0 **OR** @@ROWCOUNT != 1 

这样你就可以得到错误,你可以看到问题所在。 可能UID不存在?

答案 1 :(得分:0)

最好的猜测是你的proc会抛出一个你没有捕获的异常,也许是因为列上有一个长度约束,并且你的fname_txt.Text.Trim()值是零长度,而“Jack”当然是不

在您的代码中添加一个catch块,以证明您的proc中没有发生任何不幸事件。您的问题中的更多细节也会有所帮助。