2014-03-30 60 views
0

如何從數據集中刪除一行然後從數據庫本身刪除一行?是否需要爲此指定SQLCommand或者數據庫應該自動更新?這是我認爲可以工作的代碼,但沒有刪除。如何從數據集中刪除

private void button1_Click(object sender, EventArgs e) 
{ 
DataSet ds = new DataSet(); 

SqlDataAdapter daf = new SqlDataAdapter(); 
ds.Tables["Film"].Constraints.Add("PK_Film", ds.Tables["Film"].Columns["id"], true); 

int ind = listBoxchildren.SelectedIndex; 
listBoxchildren.DataSource = null; 

ds.Tables["Film"].Rows[ind].Delete(); 
     ds.Tables["Film"].AcceptChanges(); 

daf.Update(ds,"Film"); 
listBoxchildren.DataSource = ds; 
listBoxchildren.DisplayMember = "Director.fk_FilmDir.title";} 

回答

1

通常當你傳遞一個SELECT語句填充數據集或數據表中的dataadaper初始化它的DeleteCommand,更新命令和將InsertCommand。在你的代碼中,你創建了這個daf變量而沒有給出任何Select語句,因此它不能爲你刪除的行創建一個刪除命令。

此外,您可以調用AcceptChanges,它可以從數據集的內存數據中刪除已刪除的行,從而消除Update方法找到應從數據庫中刪除的行的任何可能性。

您需要添加兩個東西,刪除一行

添加SELECT語句的SqlDataAdapter的,當你建立它

SqlDataAdapter daf = new SqlDataAdapter("select * from film", yourConnection); 
SqlCommandBuilder builder = new SqlCommandBuilder(daf); 
daf.DeleteCommand = builder.GetDeleteCommand(); 

,然後刪除此行

ds.Tables["Film"].AcceptChanges(); 

當你調用刪除行只被標記爲已刪除,但仍在數據集表中。 Update命令需要刪除的行以獲取執行數據庫表中的刪除所需的信息。

0

這就是: ds.Tables [「TABLE NAME」] .Rows [position] .Delete(); then your dataadapter update: daf.update(ds.Tables [「TABLE NAME」])