close

.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();
}

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()