在C#中删除数据行时出错

时间:2013-01-02 10:44:56

标签: c# mysql

我在C#中有一个datagridview,显示查询数据库的结果。我想删除数据,此方法正在使用DataSet。在某个索引中按下按钮时执行此方法。

代码:

DialogResult _result = MessageBox.Show("Do you want to remove the data?", "Warning", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
if (_result == DialogResult.OK) 
{
    int idx = dataGridInfo.CurrentRow.Index;
    this.getInfoFilmDS.sp_getInfo.Rows.RemoveAt(idx);
    MessageBox.Show("Data Removed", "Processing", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

这种方法

this.getInfoFilmDS.sp_getInfo.Rows.RemoveAt(idx);

仅在DataGridView中工作,但数据本身不会在数据库中删除。

如何解决此问题?

提前致谢。

更新我已将语法更改为:

this.getInfoFilmDS.sp_getInfo.Rows[idx].Delete();
sp_getInfoTableAdapter.Adapter.Update(getInfoFilmDS);

但编译器抛出错误。

Invalid Operation Exception Update requires a valid DeleteCommand when passed DataRow collection with deleted rows.

2 个答案:

答案 0 :(得分:0)

DataRowCollection.RemoveAt只删除DataTable中的行,它不会删除该行(即使您使用DataAdapter)。因此,您需要使用DataRow.Delete

getInfoFilmDS.sp_getInfo.Rows[idx].Delete();

请注意,您现在需要使用DataAdapterDataSet中的更改提交到数据库。

<强>更新

  

我已将语法更改为:

this.getInfoFilmDS.sp_getInfo.Rows[idx].Delete();
sp_getInfoTableAdapter.Adapter.Update(getInfoFilmDS);

但编译器抛出错误:

  

无效的操作例外。更新需要有效的DeleteCommand   当传递带有已删除行的DataRow集合时。

因此,当您只选择一个表时,您需要定义通常由DeleteCommand自动生成的DataSet,也许您只需要重新配置TableAdapter,它就会自动创建删除命令。否则你必须手动创建它:

TableAdapter Overview

答案 1 :(得分:0)

没关系,经过研究并询问@Tim的支持,它表明DataSet没有根据存储过程生成查询(请通知我,如果我错了:D)那么,我需要基于JOIN生成另一个存储过程表..

我的MySQL数据库中有三个表,我创建了另一个存储过程来删除数据。然后我将DELETE存储过程分配到数据集配置

然后应用此代码

try
            {
                int idx = dataGridInfo.CurrentRow.Index;
                this.getInfoFilmDS.sp_getInfo.Rows[idx].Delete();
                sp_getInfoTableAdapter.Adapter.Update(getInfoFilmDS);
                MessageBox.Show("Data removed", "Process", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error Delete Data" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

它就像一个魅力。