2012-04-11 61 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