2012-04-11 58 views
0

我使用存储过程来插入,更新和删除记录,并使用LINQ执行或调用过程。 点击提交按钮后,更新过程已经执行,但表中没有变化! 如果我传递一个像“Jack”而不是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"; 
     } 

    } 

这是更新PROC:

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 
     [email protected], 
     [email protected], 
     [email protected], 
     [email protected], 
     [email protected], 
     [email protected], 
     [email protected], 
     [email protected] 
    where ([email protected]) 

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

你能否也请在上下文中发布与pUpZDBUser方法相关的SQL PROC? – StuartLC 2012-04-11 09:58:10

+0

这是.NET不ASP经典。 – 2012-04-11 10:14:02

+0

我已经添加了用于回答的proc,tnx,@nonnb – Behzad 2012-04-11 10:53:00

回答

0

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

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

+0

不,没有例外。我试过了,没有例外。 关于fname_txt,问题是关于这个的所有参数。例如uname_txt.Text或lname_txt也包含这个问题。 @Ralph Shilington – Behzad 2012-04-11 11:06:05

1

我想,如果你改变了存储过程来

--RollBack if Err  
IF @@ERROR != 0 **OR** @@ROWCOUNT != 1 

这样,你应该得到所引发的错误,你可以看到的问题是什么,你将有更多的运气。 可能的UID不存在?

+0

不,它存在。正如我所说,如果它是db.pUpZDBUser(uid,“Jack”,...)而不是db.pUpZDBUser(uid,fname_txt.text,...),它可以正常工作。 @nonnb – Behzad 2012-04-11 12:29:23

+0

试试吧。如果@@ ERROR不为零,那么行计数可能为零。如果更新更新了零行,那么ERROR可能为零。这意味着你的错误从未被提出。 – StuartLC 2012-04-11 12:31:56

+0

我将我的代码更改为您的运行更新代码为可行,但没有错误。 我完全困惑。 看起来按钮发送空的对象值,但“uid”不是空的,因为它是一个表单请求,但我不知道为什么它认为文本框是空的并发送空值?! @nonnb – Behzad 2012-04-11 13:10:02