-1

CNIC 番号かどうかを確認したい。ユーザーが入力したのは私のテーブルに存在しない場合、私は彼に登録プロセスを進めてほしくありません...

ここにコードがあります.一部が機能して いません..どこが間違っていますか?

con.Open();
        string cmdStr = "Select count(*) from Registration where UserName='" + TextBoxUN.Text + "'";
        string cmdCnic = "Select count(*) from List_CNIC where CNIC='" + TextBoxCNIC.Text + "'";
        SqlCommand userExist=new SqlCommand(cmdStr, con);
        SqlCommand cnicExist=new SqlCommand(cmdCnic,con);
        int temp=Convert.ToInt32(userExist.ExecuteScalar().ToString());
        int tempCnic = Convert.ToInt32(cnicExist.ExecuteScalar().ToString());
        con.Close();
        if (temp==1)
        {
            Session["name1"] = TextBoxFN.Text;
            Session["UserName"] = TextBoxUN.Text;
            Response.Redirect("Error.aspx");
        } 
       if (!(tempCnic==1))
        {
            Session["nameFull"] = TextBoxFN.Text;
            Session["CNIC"] = TextBoxCNIC.Text;
            Response.Redirect("Error_InvalidCNIC.aspx");

        }

ユーザー名が存在するかどうかを確認しているコードの部分は正常に機能していますが、 tempCnicのチェックです。ユーザーが何も入力していない場合でも、ページError_InvalidCNIC.aspxに自動的にリダイレクトされます。

コードの何が問題なのですか?

4

3 に答える 3

3

挿入の成功に基づいてさまざまなコードを返すストアド プロシージャを作成し、これを C# コードから実行します。

CREATE PROC RegisterUser
    @UserName nvarchar(255),
    @CNIC nvarchar(255)
AS
BEGIN
    IF EXISTS (SELECT * FROM  Registration WHERE UserName = @UserName)
    BEGIN
        RETURN -1
    END
    ELSE
    BEGIN
        IF EXISTS (SELECT * FROM List_CNIC WHERE CNIC = @CNIC)
        BEGIN
            RETURN -2
        END
        ELSE
        BEGIN
            --Insert into relevant tables, ideally wrapped in a TRANSACTION with try/catch
            RETURN 1
        END
    END
END

次に、このストアド プロシージャを LINQ to SQL データ コンテキストにドラッグし、次のように実行します。

var db = new DataContextDataClasses();
var result = db.RegisterUser(userName,CNIC);

switch (result) {
    case 1:
         //success
         break;
    case -1:
         //user exists
         break;
    case -2:
         //CNIC exists
         break
    default:
         throw new Exception("Unknown error occurred");
}

しかし、明らかにこれをADO.NETからも呼び出すことができます...

于 2012-04-23T22:52:03.160 に答える
3

問題がわかりません。ユーザーが何も入力していない場合

Select count(*) from List_CNIC where CNIC=''tempCnic=0 を設定する必要があります

(CNIC が空の文字列である行がない限り)

このブロックがトリガーされています(あなたが言うように)

if (!(tempCnic==1))
        {
            Session["nameFull"] = TextBoxFN.Text;
            Session["CNIC"] = TextBoxCNIC.Text;
            Response.Redirect("Error_InvalidCNIC.aspx");
    }

!(0==1) は true を返すためです。

それはあなたが要求したことを正確に実行しています

ところで:このチェックを次のように書いた方が読みやすいでしょう(tempCnic!=1)

于 2012-04-23T22:53:01.643 に答える
-4

私はEntity Frameworkに興味があるので、あなたの答えではないかもしれませんが....あなたは興味があるかもしれません

var stuff = List_CNIC.Where(p => p.CNIC == TextBoxCNIC.Text);
if(stuff.Count() == 1) {
    //do your stuff
}  
于 2012-04-23T22:51:34.953 に答える