台灣最大程式設計社群網站
線上人數
1438
 
會員總數:240344
討論主題:186343
歡迎您免費加入會員
討論區列表 >> ASP.NET >> ADO update更新資料疑惑
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
ADO update更新資料疑惑
價值 : 50 QP  點閱數:226 回應數:4

樓主

小強
門外漢
0 15
234 15
發送站內信

各位前輩,
小弟遇到一件事情很疑惑,想請教大家,
我在練習ADO的新增修刪操作,有個問題是~~
如果利用myAdapter.UpdateCommand的command去更新資料~~~為什麼一定要有以下這段[ ds.Tables["test"].Rows[0]["CompanyName"] = "123";]

我看網路文章寫~~如果沒有這段 ds.Tables["test"].Rows[0]["CompanyName"] = "123";~~~updatecommand不會執行~~

我疑惑的點是~~我就算寫出了[ds.Tables["test"].Rows[0]["CompanyName"] = "123";] 這一段~~資料庫確實更新了~但更新的是XXX而不是123~跟123這個值完全無關~~

更新的值以myAdapter.UpdateCommand的值為主~~~那這樣到底是要需要這段 ds.Tables["test"].Rows[0]["CompanyName"] = "123"的作用是為何???

我的想法是~~既然我在程式這段就修改值了~ ds.Tables["test"].Rows[0]["CompanyName"] = "123"
表示我想更新的不就是將值更新為123~~~怎麼會還要再寫一段UpdateCommand ~~覺得好像都此一舉~~
不知道這裡的運作到底是如何~~
感謝~~





SqlConnection cn1 = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=True");

cn1.Open();
DataSet ds = new DataSet();
SqlDataAdapter myAdapter = new SqlDataAdapter();

myAdapter.SelectCommand = new SqlCommand("select * from customers", cn1);
myAdapter.Fill(ds, "test");

ds.Tables["test"].Rows[0]["CompanyName"] = "123";
myAdapter.UpdateCommand = new SqlCommand("update customers set CompanyName = @test_time where CustomerID = 'ALFKI'", cn1);
myAdapter.UpdateCommand.Parameters.Add("@test_time", SqlDbType.Text).Value = "xxxxx";
myAdapter.Update(ds, "test");

搜尋相關Tags的文章: [ ADO update ] ,
本篇文章發表於2017-05-09 01:19
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

小強
檢舉此回應
我另外想請問~~
如果我是叫用SqlCommandBuilder(myAdapter);來做新增刪修~~
似乎不需再寫myAdapter.UpdateCommand = new SqlCommand...............
感覺比較ˋ不會多此一舉

這樣的話~~用SqlCommandBuilder和使用myAdapter.UpdateCommand的差異在哪?
本篇文章回覆於2017-05-09 10:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

誰是誰
檢舉此回應
你的網路文章在哪看的?
如果要學 ADO.NET,看 MSDN 最準了
ADO.NET

註: ADO 和 ADO.NET 不一樣的喔
本篇文章回覆於2017-05-11 00:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
我的想法是~~既然我在程式這段就修改值了~ ds.Tables["test"].Rows[0]["CompanyName"] = "123"
表示我想更新的不就是將值更新為123~~~怎麼會還要再寫一段UpdateCommand ~~覺得好像都此一舉~~
不知道這裡的運作到底是如何~~


首先,先說真正的資料存放,應該是資料庫

而DataSet, DataTable是離線工作的
也就是當資料載入後,他就與資料庫脫勾了
資料存在記憶體中(ASP.NET的應用時,存在Server的記憶體)

因此,當您用
ds.Tables["test"].Rows[0]["CompanyName"] = "123"
此時記憶體中的DataSet中的DataTable內容改了

但資料庫的資料卻還沒修改(離線,記得嗎)

所以,要真正修改回資料庫,自然要有個動作來Update回去資料庫囉

您再想想
^_^
本篇文章回覆於2017-05-11 08:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

MIS2000 Lab
檢舉此回應
單一記錄的修改,可以透過 SqlCommand & DataReader來做CRUD
跟您觀念中的新增、刪除、修改、查詢,比較接近

您的程式用到SqlDataAdapter & DataSet
首先要知道 DataSet是「記憶體」裡面的資料表

簡單的說

cn1.Open();
DataSet ds = new DataSet();
SqlDataAdapter myAdapter = new SqlDataAdapter();

myAdapter.SelectCommand = new SqlCommand("select * from customers", cn1);
myAdapter.Fill(ds, "test");
// 您要先把資料庫的數據,放到記憶體裡面(DataSet or DataTable)

ds.Tables["test"].Rows[0]["CompanyName"] = "123";
// 當您修改記憶體裡面的資料時
// 系統會發現記憶體裡面的資料(已被修改),跟「實體資料庫」有不同

myAdapter.UpdateCommand = new SqlCommand("update customers set CompanyName = @test_time where CustomerID = 'ALFKI'", cn1);
myAdapter.UpdateCommand.Parameters.Add("@test_time", SqlDbType.Text).Value = "xxxxx";
myAdapter.Update(ds, "test");
// 這時候,使用 Update的SQL指令,把修正後的資料真正寫回「實體資料庫」裡面


上面的動作與步驟,其實官方網站都有講
詳見 https://msdn.microsoft.com/zh-tw/library/at8a576f(v=vs.110).aspx
您拿到程式,照著改,卻不知其所以然

我會建議您用 --
單一記錄的修改,可以透過 SqlCommand & DataReader來做CRUD
跟您觀念中的新增、刪除、修改、查詢,比較接近
本篇文章回覆於2017-05-11 15:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.