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

    }

これは更新手順です:

    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
4

2 に答える 2

1

SPROC を

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

このようにして、エラーが発生し、問題が何であるかを確認できます。おそらくUIDは存在しませんか?

于 2012-04-11T11:37:53.957 に答える
0

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

コードに catch ブロックを追加して、proc で問題が発生していないことを証明します。また、質問の詳細も役立ちます。

于 2012-04-11T10:33:40.243 に答える