2012-04-11 11 views
0

Ich verwende eine gespeicherte Prozedur zum Einfügen, Aktualisieren und Löschen von Datensätzen, und ich verwende LINQ zum Ausführen oder Aufrufen der Prozeduren. Nach dem Klicken auf den Submit-Button wurde der Update-Vorgang ausgeführt, aber es gibt keine Änderung in der Tabelle! Wenn ich einen Wert wie "Jack" anstelle von fname_txt.text übergebe, funktioniert es und wird aktualisiert. Ich weiß nicht, was ist der Unterschied zwischen einem Textbox-Objekt und einem Wert in einem Anführungszeichen ?! Hier ist der Code:Tabelle nicht aktualisiert, obwohl Befehl korrekt ist

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"; 
     } 

    } 

das ist das Update 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

Können Sie bitte auch den mit der Methode pUpZDBUser verbundenen SQL PROC für den Kontext bereitstellen? – StuartLC

+0

Dies ist .NET nicht ASP Classic. –

+0

Ich habe die proc, Tnx zum Beantworten hinzugefügt, @nonnb – Behzad

Antwort

0

beste Vermutung ist, dass Ihr proc eine Ausnahme wirft, dass Sie nicht fangen, vielleicht, weil es eine Längenbeschränkung ist auf die Spalte, und dass Ihre fname_txt.Text.Trim() Wert ist Null Länge, und "Jack" ist natürlich nicht.

Fügen Sie Ihrem Code einen catch-Block hinzu, um zu bestätigen, dass in Ihrem proc nichts passiert. Auch mehr Details in Ihrer Frage wären hilfreich.

+0

Nein, es gibt keine Ausnahme. Ich hatte es versucht und es gab keine Ausnahme. Über fname_txt, das Problem ist über alle Parameter nicht nur für diesen. Zum Beispiel enthält uname_txt.Text oder lname_txt auch dieses Problem. @Ralph Shilington – Behzad

1

Ich denke, Sie werden mehr Glück haben, wenn Sie die SPROC zu

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

Auf diese Weise ändern, sollten Sie den Fehler ausgelöst wird und Sie können sehen, was das Problem ist. Möglicherweise existiert die UID nicht?

+0

Nein, es existiert. Wie ich sagte, wenn es db.pUpZDBUser (uid, "Jack", ...) statt db.pUpZDBUser (uid, fname_txt.text, ...) ist, funktioniert es richtig. @nonnb – Behzad

+0

Versuchen Sie es. Wenn @@ ERROR nicht Null ist, ist die Zeilenanzahl wahrscheinlich gleich Null. Und wenn das Update Null Zeilen aktualisiert hat, wird ERROR wahrscheinlich Null sein. Das bedeutet, dass Ihr Fehler NIEMALS erhöht wird. – StuartLC

+0

Ich habe meinen Code geändert, um Update-Code wie uasual auszuführen, aber es gibt keinen Fehler. Ich bin völlig verwirrt. Es scheint, dass die Schaltfläche leere Objektwerte sendet, aber die "UID" ist nicht leer, weil es eine Formularanforderung ist, aber ich weiß nicht, warum es denkt, dass die Textfelder leer sind und leere Werte sendet ?! @nonnb – Behzad

Verwandte Themen