-1

我想检查 CNIC 是否没有。已输入的 tat 用户在我的表中不存在,那么我不希望他继续进行注册过程...

这是代码,其中一部分 不起作用..我哪里错了?

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) 产生真。

它正在做你要求它做的事情

顺便说一句:如果您将此检查写为(tempCnic!=1)

于 2012-04-23T22:53:01.643 回答
-4

我进入实体框架,所以它可能不是你的答案,但是......你可能会感兴趣

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