前往
大廳
主題

Windows Form新增、修改、刪除資料庫

艾倫D索妮雅 | 2022-05-15 00:38:30 | 巴幣 1100 | 人氣 1937

這次要加入新增、修改、刪除的功能

No1.新增、修改資料
首先在設計業面上加入新的Button「修改」

然後回到程式上建立一個新的Function
這裡命名為public void UpdateAccessTable()
以下為程式碼
程式中的ViewTable是當前資料表名稱
AllColumns則為一個儲存資料表所有欄位名稱的string陣列
List<string> AllColumns;

AllColumns = new List<string>();
//取得dataset中當前Table的所有欄位名稱然後加進AllColumns
for (int i = 0; i < ds.Tables[ViewTable].Columns.Count; i += 1)
       AllColumns.Add(ds.Tables[ViewTable].Columns[i].ColumnName);

回到程式
首先先做Insert(新增)的sql指令之字串
寫法Insert  into [當前資料表] (欄位1,欄位2...) Values (@欄位1,@欄位2....)
這裡使用2個迴圈+AllColumns陣列來達成
string str_Insertcmd = "Insert into [" + ViewTable + "] (";
for (int i = 0;i < AllColumns.Count-1;i+=1)
     str_Insertcmd += (AllColumns[i]+",");
str_Insertcmd += (AllColumns[AllColumns.Count-1] + ") Values (");

for (int i = 0; i < AllColumns.Count - 1; i+=1)
     str_Insertcmd += ("@" + AllColumns[i] + ",");
str_Insertcmd += ("@"+ AllColumns[AllColumns.Count-1] + ")");

然後將做一個Oledbcommand的新指令放進剛才的字串,然後再把各欄位引數值加進
Parameter中(也就是@欄位,這個會取得你所輸入的值,然後再給傳至給對應的欄位)
OleDbCommand Insertcmd = new OleDbCommand(str_Insertcmd, Dbconnect);
for (int i = 0; i < AllColumns.Count;i+=1)   
      Insertcmd.Parameters.Add("@"+AllColumns[i],OleDbType.VarChar,200,AllColumns[i]);

最後將做好的Oledbcommand交給Adapter去處理
只後只要有新增資料,Adapter就會判斷資料新增的欄位,然後自動將值加進去
DataAdapter.InsertCommand = Insertcmd;
//之後只要在加個DataAdapter.Update(ds,ViewTable); 就完成Insert指令了
//但因為還要做Update的指令,所以DataAdapter.Update(ds,ViewTable);放最後面

再來是寫Update(修改)sql指令
寫法: Update [資料表] set 欄位1=@欄位1,欄位2=@欄位2....  where 主鍵欄=@主鍵欄
跟剛才一樣@欄位為我們之後更動資料的值,之後會丟給Adapter去對應至相應的欄位

這裡一樣使用迴圈來做字串
string str_Updatecmd = "Update ["+ViewTable+"] set ";
for(int i = 0;i<AllColumns.Count;i+=1)
{
     str_Updatecmd += (AllColumns[i]+"= @"+AllColumns[i]);
     if (i != AllColumns.Count - 1)
           str_Updatecmd += ",";
}
str_Updatecmd += " where "+AllColumns[0]+" = @"+ AllColumns[0];

做好後給Oledbcommand,然後再給adapter
OleDbCommand Updatecmd = new OleDbCommand(str_Updatecmd, Dbconnect);
for( int i = 0; i<AllColumns.Count;i+=1)
      Updatecmd.Parameters.Add("@" + AllColumns[i], OleDbType.VarChar,200,AllColumns[i]);
DataAdapter.UpdateCommand = Updatecmd;

最後一步Update資料庫
DataAdapter.Update(ds,ViewTable);

寫好後,將做好的Function丟到剛才新建的「修改」Button

測試

新增一筆資料到Game資料表,然後更改ID 1的Date_Time改至2022/05/14,然後按修改button
去Access檢查是否有新增和修改資料
成功

No2.刪除資料
回到設計上,將ContextMenuStrip加進Form中,然後加個Delete

然後點一下DatagridView,在屬性欄中找ContextMenuStrip
把剛才新建的ContextMenuStrip1加進去

之後雙擊Form中ContextMenuStrip的Delete,進到程式頁面
DatagridView.CurrentRow可以取得指標所點擊的欄位
Cells[0].Value可以取得欄位1(主鍵欄)的鍵值
之後建立sql指令後一樣丟給OledbCommand
指令 Delete from [資料表] where 主鍵欄 = 主鍵欄位值
然後使用ExecuteNonQuery()執行指令
最後LoadingGrid();來刷新datagrid的畫面,即可完成刪除資料

測試:
刪除Game資料表中的ID=6列
回到資料庫查看是否完成刪除

創作回應

相關創作

更多創作