2014-12-07 1 views
0

Прошло некоторое время с тех пор, как я пробовал что-то программировать. Я занимаюсь базовым CRUD в DGV и базе данных. У меня есть моя функция «ADD/CREATE», но мое удаление, похоже, не работает.Как удалить строку в моей базе данных с помощью этого метода?

вот скриншот:

http://oi61.tinypic.com/29fblky.jpg

EDIT: проводки код здесь; это мой рабочий ADD/CREATE функции:

private void btnAdd_Click(object sender, EventArgs e) 
    { 
     connectionstring = "server=" + server + ";" + "database=" + database + 
     ";" + "uid=" + uid + ";" + "password=" + password + ";"; 
     con = new MySqlConnection(connectionstring); 
     con.Open(); 
     MySqlDataAdapter da = new MySqlDataAdapter("select * from testdatabase", con); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     testTable1.DataSource = ds.Tables[0]; 
     con.Close(); 

    // now instead of these next 4 lines 
     DataRow row = ds.Tables[0].NewRow(); 
     row[0] = tbID.Text; 
     row[1] = tbName.Text; 
     ds.Tables[0].Rows.Add(row); 
    // ds.Tables[0].Rows.RemoveAt(testTable1.CurrentCell.RowIndex); 
    // is what i used to delete 
    // what did i do wrong? 

     MySqlCommandBuilder cb = new MySqlCommandBuilder(da); 
     da.UpdateCommand = cb.GetUpdateCommand(); 
     da.Update(ds); 
     ((DataTable)testTable1.DataSource).AcceptChanges(); 

    } 
+0

Пожалуйста, пост встроенного кода. Избегайте внешних ресурсов, если это возможно. –

+0

Почему бы вам просто не скопировать/вставить этот код кода здесь? – Steve

+0

Используйте класс ConnectionStringBuilder вместо конкатенации строк. – i486

ответ

0

Если вы хотите удалить строку следующего нажатия кнопки вы можете следовать этому псевдокоду.

  • Прежде всего проверьте, есть ли текущая строка выбрана в сетке,
  • Если вы нашли один, то получить значение из ячейки, где первичный ключ для таблицы базы данных хранятся. (Здесь я считать, что эта клетка является первым в строке и относится к колонке ID в таблице базы данных)
  • с этими данными открыть соединение, подготовить DELETE команду с параметрами и вызвать ExecuteNonQuery, чтобы phisycally удалить строка от таблица базы данных.
  • После этого можно удалить текущую строку из сетки и сообщить основной источник данных о том, что операция полных. (AcceptChanges)

    private void btnDelete_Click(object sender, EventArgs e) 
    { 
        // No row to delete? 
        if(testTable1.CurrentRow == null) 
         return; 
        // Get the cell value with the primary key 
        int id = Convert.ToInt32(testTable1.CurrentRow.Cells[0].Value) 
    
        // Start the database work... 
        connectionstring = .....; 
        using(con = new MySqlConnection(connectionstring)) 
        using(cmd = new MySqlCommand("DELETE FROM testdatabase where id = @id", con)) 
        { 
         con.Open(); 
         cmd.Parameters.AddWithValue("@id", id); 
         cmd.ExecuteNonQuery(); 
    
         // Fix the grid removing the current row 
         testTable1.Rows.Remove(testTable1.CurrentRow); 
    
         // Fix the underlying datasource 
         ((DataTable)testTable1.DataSource).AcceptChanges(); 
        } 
    } 
    
Смежные вопросы