C#.net刪除dataGridView中選中行並同時更新資料庫

來源:互聯網
上載者:User

標籤:

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中選中行並同時更新資料庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.