none
Ошибка при добавлении записи!? RRS feed

  • Вопрос

  • private void Form1_Load(object sender, EventArgs e) { SqlConnection con = new SqlConnection(ConnectionString); con.Open(); SqlCommand cmd = new SqlCommand("Insert into us (komp,timein) Values (@komp,@timein)", con); cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("@komp", System.Environment.MachineName); cmd.Parameters.AddWithValue("@timein", DateTime.Now); cmd.ExecuteNonQuery(); if (cmd.ExecuteNonQuery() == 1) MessageBox.Show("Запись успешно добавлена!"); con.Close(); }

     Помогите,пожалуйста, найти ошибку!Добавляю одну запись,а получаю в базе две...

    • Изменено Iv_Olga 26 декабря 2012 г. 6:28
    26 декабря 2012 г. 6:27

Ответы

  • Можете использовать флаг, для установки после первого вызова.

    private bool userNameInserted = false;
    private void Form1_Load(object sender, EventArgs e)
            {   
    if(!userNameInserted)
    {        
                SqlConnection con = new SqlConnection(ConnectionString);
                con.Open();
                     SqlCommand cmd = new SqlCommand("Insert into us (komp,timein) Values (@komp,@timein)", con);
    
                     cmd.Parameters.Clear();
                     cmd.Parameters.AddWithValue("@komp", System.Environment.MachineName);
                     cmd.Parameters.AddWithValue("@timein", DateTime.Now);
                     cmd.ExecuteNonQuery();
                                    
                     if (cmd.ExecuteNonQuery() == 1)
                         MessageBox.Show("Запись успешно добавлена!");
                     con.Close();
    }
    else
    userNameInserted = true;
             
            }

    • Помечено в качестве ответа Iv_Olga 26 декабря 2012 г. 8:38
    26 декабря 2012 г. 7:20
    Модератор

Все ответы

  • Может у Вас метод Form1_Load два раза вызывается. Посмотрите в отладчике, сколько раз он срабатывает.
    26 декабря 2012 г. 6:30
    Модератор
  • Подскажите,как? 
    26 декабря 2012 г. 6:38
  • Поставьте точку останова в начале метода, клавиша F9. Запустите проект в режиме отладки, клавиша F5. И посмотрите сколько раз срабатывает точка останова.
    26 декабря 2012 г. 6:44
    Модератор
  • Да,точно два раза. По алгоритму из формы регистрации пользователя, где идет проверка на доступ к работе в программе по сис.имени компьютера, загружается форма с главным меню приложения,где и прописываются вошедшие в базу пользователи. Видимо,так нельзя. А как это делается в стандартном варианте?  
    26 декабря 2012 г. 7:14
  • Можете использовать флаг, для установки после первого вызова.

    private bool userNameInserted = false;
    private void Form1_Load(object sender, EventArgs e)
            {   
    if(!userNameInserted)
    {        
                SqlConnection con = new SqlConnection(ConnectionString);
                con.Open();
                     SqlCommand cmd = new SqlCommand("Insert into us (komp,timein) Values (@komp,@timein)", con);
    
                     cmd.Parameters.Clear();
                     cmd.Parameters.AddWithValue("@komp", System.Environment.MachineName);
                     cmd.Parameters.AddWithValue("@timein", DateTime.Now);
                     cmd.ExecuteNonQuery();
                                    
                     if (cmd.ExecuteNonQuery() == 1)
                         MessageBox.Show("Запись успешно добавлена!");
                     con.Close();
    }
    else
    userNameInserted = true;
             
            }

    • Помечено в качестве ответа Iv_Olga 26 декабря 2012 г. 8:38
    26 декабря 2012 г. 7:20
    Модератор
  • Спасибо за помощь! Одна строка оказалась лишней...

     cmd.ExecuteNonQuery();


    • Изменено Iv_Olga 26 декабря 2012 г. 8:37
    26 декабря 2012 г. 8:10