2012-04-11 23 views
0

レコードの挿入、更新、および削除にストアドプロシージャを使用し、プロシージャの実行または呼び出しにLINQを使用します。 [送信]ボタンをクリックすると、更新手順は実行されましたが、テーブルに変更はありません! fname_txt.textの代わりに "Jack"のような値を渡すと、動作し更新されます。 テキストボックスオブジェクトと引用符で囲まれた値の違いは何ですか?ここ は、コードは次のとおりです。コマンドが正しくてもテーブルが更新されない

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

+0

これはASP Classicではなく.NETです。 –

+0

私は応答のためにproc、tnxを追加しました。@nonnb – Behzad

答えて

0

ベストの推測では、上の長さの制約がありますおそらくので、あなたのprocはあなたがキャッチしていない例外がスローされていることですあなたのfname_txt.Text.Trim()の値はゼロの長さであり、もちろん "ジャック"はそうではありません。

あなたのコードにcatchブロックを追加して、あなたのprocに何も起こっていることを証明してください。あなたの質問の詳細も参考になります。

+0

いいえ、例外はありません。私はそれを試してみましたが、例外はありませんでした。 fname_txtについて、この問題だけでなく、すべてのパラメータについて問題があります。たとえばuname_txt.Textまたはlname_txtにもこの問題が含まれています。 @Ralph Shilington – Behzad

1

は、私はあなたが

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

にあなたが提起されているエラーを取得する必要があります。この道をSPROCを変更して、問題が何であるかを見ることができれば、あなたがより多くの運を持っていると思います。 UIDが存在しない可能性がありますか?

+0

いいえ、存在します。 db.pUpZDBUser(uid、fname_txt.text、...)の代わりにdb.pUpZDBUser(uid、 "Jack"、...)であれば正しく動作します。 @nonnb – Behzad

+0

試してみてください。 @@ ERRORがゼロでない場合、行数はゼロになる可能性があります。また、更新によってゼロ行が更新された場合、ERRORはおそらくゼロになります。あなたのエラーは決して上がらないということです。 – StuartLC

+0

あなたのコードをあなたのものに変更しました。コードを自動で更新しましたが、エラーはありません。 私は完全に混乱しています。 ボタンは空のオブジェクト値を送信するようですが、 "uid"はフォーム要求なので空ではありませんが、なぜテキストボックスが空で空の値を送信するのかわかりません。 @nonnb – Behzad

関連する問題