標籤:
private void Delete_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("資料庫連接串");
conn.Open();
SqlDataAdapter daAuthors = new SqlDataAdapter("Select * From student", conn);
DataSet dsPubs = new DataSet("Pubs");
daAuthors.FillSchema(dsPubs, SchemaType.Source, "student"); //FillSchema載入表的架構和資料,有了架構,表就知道哪個列是它的主鍵,同時 Rows 集合的 Find 方法也就可用了。
daAuthors.Fill(dsPubs, "student");
DataTable tblAuthors;
tblAuthors = dsPubs.Tables["student"];
if (MessageBox.Show("確實要刪除該行嗎?", "詢問", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
DataRow drCurrent;
string Row_zhi = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();//擷取第一個儲存格的值
//MessageBox.Show(Row_zhi);
drCurrent = tblAuthors.Rows.Find(Row_zhi);
drCurrent.Delete();
SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(daAuthors); //SqlCommandBuilder 提供自動產生單表命令的一種方式,這些命令用於協調使用關聯的 SQL Server 資料庫對 DataSet 執行的更改。
daAuthors.Update(dsPubs, "student"); //資料配接器.Update()方法
//MessageBox.Show("資料庫更新成功!");
//-------重新綁定dataGridView的資料來源,以便重新顯示-------
daAuthors.Fill(dsPubs, "student");
DataTable tblAuthors1;
tblAuthors1 = dsPubs.Tables["student"];
dataGridView1.DataSource = tblAuthors1;
}
conn.Close();
conn.Dispose();
//MessageBox.Show("資料庫連接已關閉");
}
註:
SqlDataAdapter 不自動產生協調對 DataSet 執行的更改(使用關聯的 SQL Server 執行個體)所需的 Transact-SQL 陳述式。但是,如果設定了 SqlDataAdapter 的 SelectCommand 屬性,則可以建立一個 SqlCommandBuilder 對象來自動產生用於單表更新的 Transact-SQL 陳述式。然後,SqlCommandBuilder 將產生其他任何未設定的 Transact-SQL 陳述式。
一旦設定 DataAdapter 屬性,SqlCommandBuilder 就將其自身註冊為 RowUpdating 事件的接聽程式。一次只能將一個 SqlDataAdapter 與一個 SqlCommandBuilder 對象(或相反)互相關聯。
為了產生 INSERT、UPDATE 或 DELETE 語句,SqlCommandBuilder 會自動使用 SelectCommand 屬性來檢索所需的中繼資料集。如果在檢索中繼資料後(例如在第一次更新後)更改 SelectCommand,則應調用 RefreshSchema 方法來更新中繼資料。
SelectCommand 還必須至少返回一個主鍵列或唯一的列。如果什麼都沒有返回,就會產生 InvalidOperation 異常,不產生命令。
SqlCommandBuilder 還使用由 SelectCommand 引用的 Connection、CommandTimeout 和 Transaction 屬性。如果修改了任何這些屬性或者替換了 SelectCommand 本身,使用者則應調用 RefreshSchema。否則,InsertCommand、UpdateCommand 和 DeleteCommand 屬性將保留它們以前的值。
如果調用 Dispose,則會解除 SqlCommandBuilder 與 SqlDataAdapter 的關聯,並且不再使用所產生的命令。
C#.net刪除dataGridView中選中行並同時更新資料庫