我正在嘗試將我的資料從 datagridview 行保存到我的 sql 資料庫中。我的問題是我當前的代碼,它讀取并更新所有行,無論它是否有任何更改。我知道這將是一個問題,特別是如果我的表有大量資料。
到目前為止,這些是我對代碼所做的:
//retrieve data from dbase
public void loadToDGV()
{
DBConn.DBConnect();
SqlDataAdapter sqlDA = new SqlDataAdapter("SELECT * from TableName", DBConnection.conn);
sqlDA.Fill(dataTable);
gridView.DataSource = dataTable;
}
以下是我的保存按鈕中的內容。
foreach (DataGridViewRow row in gridView.Rows)
{
DBConn.DBConnect();
SqlCommand comm = new SqlCommand();
comm.Connection = DBConnection.conn;
comm = new SqlCommand("SPName", DBConnection.conn);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.AddWithValue("@ID", row.Cells["ID"].Value == DBNull.Value ? "" : row.Cells["ID"].Value);
comm.ExecuteNonQuery();
}
我有另一個示例代碼,我只能保存修改后的行
changeTable = dataTable.GetChanges(DataRowState.Modified);
foreach (DataRow row in changeTable.Rows)
{
DBConn.DBConnect();
SqlCommand comm = new SqlCommand();
comm.Connection = DBConnection.conn;
comm = new SqlCommand("SPName", DBConnection.conn);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.AddWithValue("@ID", row["ID"].ToString());
comm.ExecuteNonQuery();
}
我想做的是只保存“新行”和“修改后的行”。有沒有辦法只獲取新添加/編輯的行?并且不包括gridview中的所有行?
我的存盤程序僅檢查 ID 是否存在。
如果不存在(從 ID = @ID 的表中選擇 1)- 插入查詢
ELSE——更新查詢
uj5u.com熱心網友回復:
您根本不應該使用回圈,甚至不應該參考網格。你顯然已經DataTable有了。如果您還沒有這樣做,請使用資料配接器填充它,將其系結到 aBindingSource并將其系結到網格。當需要保存時,呼叫資料配接器EndEdit上的BindingSource呼叫Update并傳遞DataTable. 就是這樣,僅此而已。沒有必要打電話GetChanges。
顯然,您必須適當地配置資料配接器,InsertCommand插入新記錄和UpdateCommand保存修改過的記錄。我不會詳細介紹,因為您還沒有詳細介紹,但是周圍有很多例子。你可以在這里找到我自己的。
編輯:
對您的問題的簡短回答是,如果您想要修改和添加的行,請同時指定Modified和Added行。DataRowState列舉具有屬性,這Flags意味著您可以創建復合值。這意味著:
changeTable = dataTable.GetChanges(DataRowState.Modified);
會變成這樣:
changeTable = dataTable.GetChanges(DataRowState.ModifiedData Or RowState.Added);
如果您要遍歷這些行,則不會在每次迭代時都創建一個新的命令物件。您將創建一個命令并添加一次引數,然后只需Value在回圈中設定每個引數。之后您還需要呼叫AcceptChanges原件DataTable。
你應該這樣做。正如我所說,您應該使用與檢索資料相同的資料配接器來保存更改。通常你會使用不同的 SQL,InsertCommand但UpdateCommand在你的情況下,你可以使用相同的。只需使用適當的引數創建一個命令物件并將其分配給InsertCommand和UpdateCommand屬性,然后呼叫Update.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/516762.html
標籤:C#sql表格
上一篇:如何使用winforms中的onclick事件設定自定義控制元件的屬性
下一篇:如何根據現有檔案名創建檔案名?
