2014-01-22 2 views
0

Это мой код:Проблемы с функцией обновления в Windows Forms

private void button3_Click(object sender, EventArgs e) 
    { 
     int i; 
     i = dataGridView1.SelectedCells[0].RowIndex; 
     textBox1.Text = dataGridView1.Rows[i].Cells[0].Value.ToString(); 
     textBox2.Text = dataGridView1.Rows[i].Cells[1].Value.ToString(); 
     textBox3.Text = dataGridView1.Rows[i].Cells[2].Value.ToString(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Dido\documents\visual studio 2012\Projects\CourseProjectCars\CourseProjectCars\DataCars.mdf;Integrated Security=True;Connect Timeout=30"); 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("Update SuperCars set [email protected],[email protected],[email protected] Where([email protected])", con); 
     cmd.Parameters.AddWithValue("@Car", textBox1.Text); 
     cmd.Parameters.AddWithValue("@mph", textBox2.Text); 
     cmd.Parameters.AddWithValue("@price", textBox3.Text); 
     cmd.ExecuteNonQuery(); 
     MessageBox.Show("updated......"); 
     con.Close(); 
     Bind(); 
     Clear(); 
    } 
} 

Когда я нажимаю на Button3 информации в выбранной моей строке я dataGridView1 вставляется в текстовые поля, так что я могу изменить и обновить их с Button4 , Моя проблема в том, что когда я пытаюсь что-то обновить в textBox1, обновление не работает ни для textBox1, ни для textBox2 и 3. Но когда я обновляю информацию в textBox 2 или 3, это работает.

+0

Так просто пояснить .. Если бы вы пытались изменить «Текст» в «textbox2» и «textbox3», он работает правильно, но когда вы пытаетесь «textbox1», а также «Текст» не обновляется? Я бы предложил установить «точку останова» в строке 'textBox1' и посмотреть, что происходит. – KSdev

+0

Я предполагаю, что ошибка в этой строке, но я не знаю, как ее исправить. SqlCommand cmd = new SqlCommand («Обновление SuperCars set Car = @ Car, mph = @ mph, price = @ price Где (Car = @ Car) ", con); – Cathy

+0

Установите «точку останова» и посмотрите, что это за значение. В противном случае вы можете использовать 'Console.WriteLine' и посмотреть, что это за значение. – KSdev

ответ

0

Проблема в том, что столбец «Автомобиль» является вашим ключом, но также доступен для редактирования. Поэтому, когда вы меняете текст в текстовом поле 1, вы также меняете свой ключ.

Поэтому, когда вы меняете текст в TextBox1 с «Car1» на «Car2», команда SQL будет искать строку «Car2» для обновления. Если эта строка не существует, команда update ничего не делает. Если эта строка уже существует, обновляется неправильная строка.

Вы должны сохранить выбранный ключ в переменной-члена и использовать его в своей команде обновления:

private string carKey; // member variable to store the key 

private void button3_Click(object sender, EventArgs e) 
{ 
    int i; 
    i = dataGridView1.SelectedCells[0].RowIndex; 
    textBox1.Text = dataGridView1.Rows[i].Cells[0].Value.ToString(); 
    textBox2.Text = dataGridView1.Rows[i].Cells[1].Value.ToString(); 
    textBox3.Text = dataGridView1.Rows[i].Cells[2].Value.ToString(); 

    carKey = textBox1.Text; // store the key of the selected car 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Dido\documents\visual studio 2012\Projects\CourseProjectCars\CourseProjectCars\DataCars.mdf;Integrated Security=True;Connect Timeout=30"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("Update SuperCars set [email protected],[email protected],[email protected] Where([email protected])", con); 
    cmd.Parameters.AddWithValue("@Car", textBox1.Text); 
    cmd.Parameters.AddWithValue("@mph", textBox2.Text); 
    cmd.Parameters.AddWithValue("@price", textBox3.Text); 
    cmd.Parameters.AddWithValue("@CarKey", carKey); // use the stored car key 
    cmd.ExecuteNonQuery(); 
    MessageBox.Show("updated......"); 
    con.Close(); 
    Bind(); 
    Clear(); 
} 

Если у вас есть уже уникальный ключ для входа автомобиля вы можете хранить и использовать вместо чтобы избежать проблем.

+0

Спасибо! Ключ был проблемой! – Cathy

Смежные вопросы