цикл в избранном - PullRequest
       5

цикл в избранном

0 голосов
/ 28 апреля 2011
protected void Button1_Click(object sender, EventArgs e)
{
    if (firstname_tb.Text == "" || lastname_tb.Text == "" || email_tb.Text == "" || reemail_tb.Text == "" || pass_tb.Text == "" || gender_ddl.SelectedItem.Text == "" || day_ddl.SelectedItem.Text == "" || year_ddl.SelectedItem.Text == "")
    {
        Label9.Text = "please fill all data";
        Label9.Visible = true;
    }
    else

    {
        str = email_tb.Text;
        SqlConnection con = new SqlConnection(@"Data Source=SAMA-PC\SQLEXPRESS;Initial Catalog=meral10;Integrated Security=True");
        SqlCommand comsel = new SqlCommand("SELECT email from reg ",con);
        con.Open();
        comsel.ExecuteNonQuery();
        con.Close();
        foreach (var v in comsel.Parameters.ToString())
        {
            if (v.ToString() == str)
            {

                Label9.Text = "this email already exist choose another one";
                Label9.Visible = true;
                b = false;
                break;                    
            }
            else
            {
                b = true;   
            }
        }
        if (b==true)
        {
            birthday = day_ddl.Text + "/" + month_ddl.Text + "/" + year_ddl.Text;

            SqlCommand com = new SqlCommand("INSERT INTO reg(first_name,last_name,email,email_ver,pass,gender,birthday) values(@fn,@ln,@email,@reemail,@pass,@gen,@birth)", con);
            con.Open();
            com.Parameters.AddWithValue("@fn", firstname_tb.Text);
            com.Parameters.AddWithValue("@ln", lastname_tb.Text);
            com.Parameters.AddWithValue("@email", email_tb.Text);
            com.Parameters.AddWithValue("@reemail", reemail_tb.Text);
            com.Parameters.AddWithValue("@pass", pass_tb.Text);
            com.Parameters.AddWithValue("@gen", gender_ddl.SelectedItem.Text);
            com.Parameters.AddWithValue("@birth", birthday);
            com.ExecuteNonQuery();
            con.Close();
            Label9.Text = "thank you for registration";
            Label9.Visible = true;

        }
        else
        {

            Label9.Text = "this email already exist choose another one";
            Label9.Visible = true;
        }
    }

Существует проблема, которая заключается в том, что, когда я пытаюсь ввести электронную почту, уже существующую в базе данных, которую он ввел, он должен показать пользователю, что это письмо уже существует в базе данных. Кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

ОК, насколько я понимаю, вы хотите, чтобы ВСТАВКА происходила только в том случае, если адрес электронной почты уникален в поле [reg].[email]. Это произойдет, если b == true. Логика, которую вы используете для этого, в основном верна, но вы не получаете результаты базы данных правильно. Попробуйте что-то вроде:

con.Open();
System.Data.SqlClient.SqlDataReader objReader = comsel.ExecuteReader();
while (objReader.Read())
{
        if ((String)objReader("email") == str)
        {

            Label9.Text = "this email already exist choose another one";
            Label9.Visible = true;
            b = false;
            break;                    
        }
        else
        {
            b = true;   
        }
}
con.Close();

Надеюсь, это будет работать как задумано.

С другой стороны, я бы не стал упоминать, что этот подход довольно неэффективен. Лучше было бы использовать такой запрос:

SELECT [email] FROM [reg] WHERE [email] = @email;

В которой вы указываете свою переменную "str" ​​в качестве параметра аналогично операции INSERT ниже. Затем вместо того, чтобы перебирать результаты, просто проверьте, есть ли в SqlDataReader строки:

    SqlConnection con = new SqlConnection(@"Data Source=SAMA-PC\SQLEXPRESS;Initial Catalog=meral10;Integrated Security=True");
    SqlCommand comsel = new SqlCommand("SELECT [email] FROM [reg] WHERE [email] = @email;",con);
    comsel.Parameters.AddWithValue("@email", str);
    System.Data.SqlClient.SqlDataReader objReader = comsel.ExecuteReader();
    if (objReader.HasRows())
    {
        b = false;
    }
    else
    {
        b = true;   
    }
    con.Close();
0 голосов
/ 28 апреля 2011

Для первого запроса вы можете просто использовать ExecuteScalar, поскольку он вернет одно значение из вашего запроса.Я переписал ваш запрос, чтобы он подсчитывал количество писем, совпадающих с тем, которое пытается использовать пользователь.Если возвращенное количество равно 0, то вы знаете, что электронная почта в настоящее время не используется.

string strEmail = email_tb.Text.Trim();

try
{
    using(SqlConnection conn = new SqlConnection(@"Data Source=SAMA-PC\SQLEXPRESS;Initial Catalog=meral10;Integrated Security=True"))
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("SELECT COUNT(1) FROM reg WHERE email = @email", conn);
        cmd.Parameters.AddWithValue("@email", strEmail);

        int count = (int)cmd.ExecuteScalar();

        if(count==0)
        {
            birthday = day_ddl.Text + "/" + month_ddl.Text + "/" + year_ddl.Text;

            SqlCommand cmdInsert = new SqlCommand("INSERT INTO reg(first_name,last_name,email,email_ver,pass,gender,birthday) values(@fn,@ln,@email,@reemail,@pass,@gen,@birth)", conn);
            cmdInsert.Parameters.AddWithValue("@fn", firstname_tb.Text);
            cmdInsert.Parameters.AddWithValue("@ln", lastname_tb.Text);
            cmdInsert.Parameters.AddWithValue("@email", email_tb.Text);
            cmdInsert.Parameters.AddWithValue("@reemail", reemail_tb.Text);
            cmdInsert.Parameters.AddWithValue("@pass", pass_tb.Text);
            cmdInsert.Parameters.AddWithValue("@gen", gender_ddl.SelectedItem.Text);
            cmdInsert.Parameters.AddWithValue("@birth", birthday);
            cmdInsert.ExecuteNonQuery();
            Label9.Text = "thank you for registration";
            Label9.Visible = true;
        }
        else
        {
            Label9.Text = "this email already exist choose another one";
            Label9.Visible = true;
        }
    }
}
catch(SqlException ex)
{
    // log your exception then display a friendly message to user
    Label9.Text = "An error occurred while trying to save your registration";
}
0 голосов
/ 28 апреля 2011

Удалите оператор if, проверяющий записи в полях, и добавьте RequiredValidators в вашу форму:

http://www.4guysfromrolla.com/webtech/090200-1.shtml

Что касается второй части ... если электронная почта уже существует ... создайте для нее специальный валидатор и используйте его для отображения сообщения вашему пользователю, если электронная почта уже существует. Обратите внимание, что вы используете ExecuteNonQuery () для того, что по сути является запросом ...

Вам также необходимо некоторое "разделение интересов". Например, поместите строку подключения в Web.Config. Есть ли у вас доступ к данным из класса DAL и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...