为了账号安全,请及时绑定邮箱和手机立即绑定

检查用户名或用户电子邮件已存在

检查用户名或用户电子邮件已存在

慕慕森 2020-02-01 16:16:44
我在一个简单的注册页面中工作,在该页面中,用户无法输入相同的用户名或电子邮件,我编写了一个代码,阻止用户输入用户名,但该代码有效,但是当我尝试阻止用户输入相同的用户名时或通过电子邮件发送无效的邮件。我的问题是,“如何添加用户无法输入已经存在的电子邮件的其他条件?”我试图在这段代码中做到这一点,但是没有成功:protected void Button_Click(object sender, EventArgs e){  SqlConnection con = new SqlConnection( ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString );  SqlCommand cmd1 = new SqlCommand("select 1 from Table where Name =@UserName", con);  SqlCommand cmd2 = new SqlCommand("select 1 from Table where Email=@UserEmail", con);  con.Open();  cmd1.Parameters.AddWithValue("@UserName", Name_id.Text);  cmd2.Parameters.AddWithValue("@UserEmail", Email_id.Text);   using (var dr1 = cmd1.ExecuteReader())  {    if (dr1.HasRows)    {      Label1.Text = "user name already exists";    }    using (var dr2 = cmd2.ExecuteReader())    {      if (dr2.HasRows)      {        Label1.Text = "email already exists";      }      else      {        dr1.Close();        dr2.Close();        //add new users        con.Close();      }    }  }  }但是我得到这个错误:已经有与此命令相关联的打开的DataReader,必须先关闭它。
查看完整描述

3 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

您已经在First内部打开了另一个DataReader,这就是造成问题的原因。在这里,我重新安排了您的代码


SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

SqlCommand cmd1 = new SqlCommand("select 1 from Table where Name =@UserName", con),

cmd2 = new SqlCommand("select 1 from Table where Email=@UserEmail", con);


con.Open();

cmd1.Parameters.AddWithValue("@UserName", Name_id.Text);

cmd2.Parameters.AddWithValue("@UserEmail", Email_id.Text);


bool userExists = false, mailExists = false;


using (var dr1 = cmd1.ExecuteReader())

     if (userExists = dr1.HasRows) Label1.Text = "user name already exists";


using (var dr2 = cmd2.ExecuteReader())

     if (mailExists = dr2.HasRows) Label1.Text = "email already exists";


if (!(userExists || mailExists)) {

     // can add User

}


查看完整回答
反对 回复 2020-02-01
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您需要先关闭一个数据读取器,然后再打开另一个。尽管这不是我的方法,但是您可以通过在每次之后关闭datareader来处理运行时错误IF:


using (var dr1 = cmd1.ExecuteReader())

{

    if (dr1.HasRows)

    {

        string Text = "user name already exists";

    }

    dr1.Close();

}


using (var dr2 = cmd2.ExecuteReader())

{

    if (dr2.HasRows)

    {

        string ext = "email already exists";

    }


    else

    {

        //add new users

    }

    dr2.Close();

}

con.Close();


查看完整回答
反对 回复 2020-02-01
  • 3 回答
  • 0 关注
  • 995 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信