C# 在尝试删除2行之后,我有了DBConcurrencyException

C# 在尝试删除2行之后,我有了DBConcurrencyException,c#,sql,wpf,ado.net,dataset,C#,Sql,Wpf,Ado.net,Dataset,我正在程序中使用DataSet和DataAdapter。在我的数据库中,我编写了一个名为DeleteTheme的存储过程: ALTER PROCEDURE [dbo].[DeleteTheme] @Theme nchar(50) AS DELETE setOfThemes FROM setOfThemes INNER JOIN themes ON setOfThemes.number=themes.ID WHER

我正在程序中使用
DataSet
DataAdapter
。在我的数据库中,我编写了一个名为
DeleteTheme
的存储过程:

     ALTER PROCEDURE [dbo].[DeleteTheme]
     @Theme nchar(50)
     AS
     DELETE setOfThemes
     FROM  
     setOfThemes INNER JOIN themes
     ON setOfThemes.number=themes.ID
     WHERE themes.thema=@Theme
在C#中,我可以使用以下代码从
DataGrid
中删除行:

    private void ThemeDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Delete)
        {
            DataRow dr = myDataSet.Tables["themes"].NewRow();
            dr = myDataSet.Tables["themes"].Rows[numberOfRow];
            dr.Delete();
        }
    }
        adapter.DeleteCommand = adapterCommands.DeleteTheme();
        adapter.Update(myDataSet, "themes");
之后,我使用按钮更新代码:

    private void ThemeDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Delete)
        {
            DataRow dr = myDataSet.Tables["themes"].NewRow();
            dr = myDataSet.Tables["themes"].Rows[numberOfRow];
            dr.Delete();
        }
    }
        adapter.DeleteCommand = adapterCommands.DeleteTheme();
        adapter.Update(myDataSet, "themes");
我认为这会导致一个例外

DBConcurrencyException
并发冲突:DeleteCommand 影响了预期的1条记录中的0条。“

怎么了


(我在单击更新按钮后删除了2行)

从代码示例中,您似乎正在通过调用
NewRow()
方法将一行添加到
数据表中。是否要通过调用
Delete()
方法将数据行标记为已删除。可能会有所帮助