.Fill() : 搭配SQL的Select 指令,將資料從資料庫取出來,並且放入DataSet裡面以供應用。
.Update() : 將DataSet修正過後的資料,真正回寫到料庫中。 ex:Insert,Dlete,Update...SQL指令都是經過DataAdapter的.Update()方法來處理。
檔案名稱:Default2_DataSet_Manual.aspx
前端:
1.拉入GridView 不用搭配SqlDataSource小精靈(但是分頁,編輯必須勾選)。
2.DatakeyNames屬性要設定。
後端:(列出兩大重點動作:更新以及刪除資料,DataSet與真正回資料庫更新動作完全相同。)
(user按下編輯後更新的部分)
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//----因為前面有三個「功能鍵(編輯、選取、刪除)」,所以Cells[ ]從零算起,需扣掉前三個功能鍵與 id欄位。
TextBox my_test_time, my_title, my_author;
//先定義三個 TextBox物件!
my_test_time = (TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0];
my_title = (TextBox)GridView1.Rows[e.RowIndex].Cells[5].Controls[0];
my_author = (TextBox)GridView1.Rows[e.RowIndex].Cells[6].Controls[0];
(給下面回到資料庫更新用的指令)(myAdapter.Update(ds, "test");)
SqlConnection Conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString);
SqlDataAdapter myAdapter = new SqlDataAdapter();
//----------------------事先寫好 UpdateCommand / DeleteCommand / InsertCommand
myAdapter.UpdateCommand = new SqlCommand("update [test] set [test_time] = @test_time, [title] = @title, [author] = @author where [id] = @id", Conn);
//==== 上面的SQL指令,有四個參數(前面有@符號標示)。寫在下面:
//----下面 [日期格式] 在此不需要修正,會自動轉換,跟上面寫法不同!!
myAdapter.UpdateCommand.Parameters.Add("@test_time", SqlDbType.DateTime);
myAdapter.UpdateCommand.Parameters["@test_time"].Value = ds.Tables["test"].Rows[e.RowIndex]["test_time"];
//----以下是「參數」,這邊可以換成微軟更新的addWithValue寫法簡潔許多
myAdapter.UpdateCommand.Parameters.Add("@title", SqlDbType.VarChar, 50);
myAdapter.UpdateCommand.Parameters["@title"].Value = ds.Tables["test"].Rows[e.RowIndex]["title"];
myAdapter.UpdateCommand.Parameters.Add("@author", SqlDbType.VarChar, 50);
myAdapter.UpdateCommand.Parameters["@author"].Value = ds.Tables["test"].Rows[e.RowIndex]["author"];
myAdapter.UpdateCommand.Parameters.Add("@id", SqlDbType.Int, 4);
myAdapter.UpdateCommand.Parameters["@id"].Value = (int)GridView1.DataKeys[e.RowIndex].Value;
//---- GridView1.DataKeys[e.RowIndex].Value 是指:「使用者點選的那一列」資料,所對應的資料表「主索引鍵(Primary Key)值」。
(Step1:透過.Fill()方法把資料庫資料抓進Memory的DataSet中)
DataSet ds = new DataSet();
myAdapter.SelectCommand = new SqlCommand("select * from test", Conn);
myAdapter.Fill(ds, "test");
(Step2:到記憶體中的DataSet直接修改值)
//---- 直接修改 DataSet的內容 --------------------------------
ds.Tables["test"].Rows[e.RowIndex]["test_time"] = my_test_time.Text;
ds.Tables["test"].Rows[e.RowIndex]["title"] = my_title.Text;
ds.Tables["test"].Rows[e.RowIndex]["author"] = my_author.Text;
(Step3:用.Update把DataSet修改後的值真正更新到資料庫,會自動執行上面的myAdapter.UpdateCommand)
myAdapter.Update(ds, "test"); //把改寫後的DataSet,回寫到實體的資料庫裡面!
//********************************************************************
//----修改、更新完成!!離開「編輯」模式 ----
GridView1.EditIndex = -1;
DBInit();
}
(User按下刪除):
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//真正回資料庫執行更新會自動執行這一行
SqlConnection Conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString);
SqlDataAdapter myAdapter = new SqlDataAdapter();
//---- 事先寫好 UpdateCommand / DeleteCommand / InsertCommand
myAdapter.DeleteCommand = new SqlCommand("delete from [test] where [id] = @id", Conn);
//----以下是「參數」
myAdapter.DeleteCommand.Parameters.Add("@id", SqlDbType.Int, 4);
myAdapter.DeleteCommand.Parameters["@id"].Value = (int)GridView1.DataKeys[e.RowIndex].Value;
//---- GridView1.DataKeys[e.RowIndex].Value 是指:「使用者點選的那一列」資料,所對應的資料表「主索引鍵(Primary Key)值」。
//(Step1:抓資料庫中的值,存到DataSet中)
DataSet ds = new DataSet();
myAdapter.SelectCommand = new SqlCommand("select * from test", Conn);
myAdapter.Fill(ds, "test");
//(Step2:直接修改DataSet值)
ds.Tables["test"].Rows[e.RowIndex].Delete();
//(Step3:真正回資料庫執行更新)
myAdapter.Update(ds, "test");
//----「刪除」已經完成!!記得重新整理畫面,重新載入資料----
DBInit();
}
留言列表