[問題] C# .net網頁寫資料進資料庫問題

看板C_Sharp (C#)作者 (......)時間12年前 (2013/07/27 17:47), 編輯推噓5(5032)
留言37則, 4人參與, 最新討論串1/1
我有一個網頁 有一個gridview,有一個欄位是維護 用這個欄位的factoryid與session裡的orgid 代出另一個更新工廠資料的網頁 這個網頁編輯完之後始終沒有辦法寫進資料庫中 奇怪的是我用另外一種方法:參數直接帶值進去呼叫就可以寫進資料庫如下 operation.UpdateFactoryData(Session["sesOrgID"].ToString(), HiddenField1.Value,DropDownList1.SelectedValue,TextBox1.Text); operation.UpdateFactoryData("6","6","A","ABC-MART"); 順便附上update method public bool UpdateFactoryData(String orgid,String factoryid,String itemid,String name) { SqlCommand command; StringBuilder sb = new StringBuilder(); SqlConnection sqlconn = DBconnection.getConnection(); sb.Append("update Factory "); sb.Append("set EXPENSEITEMBASICNO=@itemid,FACTORYNAME=@name "); sb.Append("where ORGID= @orgid and FACTORYID= @factoryid"); command = new SqlCommand(sb.ToString(), sqlconn); int orgint = Convert.ToInt32(orgid); int facint = Convert.ToInt32(factoryid); command.Parameters.AddWithValue("@orgid", orgid); command.Parameters.AddWithValue("@factoryid", factoryid); command.Parameters.AddWithValue("@itemid", itemid); command.Parameters.AddWithValue("@name", name); command.ExecuteNonQuery(); return true; } 真的不知道哪裏出問題,請各位看看 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.246.201.23

07/27 18:24, , 1F
檢查有沒有exception吧...
07/27 18:24, 1F

07/27 18:51, , 2F
你的意思是 operation.UpdateFactoryData(Session... 這行不
07/27 18:51, 2F

07/27 18:51, , 3F
行,operation.UpdateFactoryData("6"... 這行可以?
07/27 18:51, 3F

07/27 18:52, , 4F
那就是要trace看看在執行那行時那幾個參數值是什麼吧
07/27 18:52, 4F

07/27 22:49, , 5F
都沒有exception 但是用參數帶可以跑完
07/27 22:49, 5F

07/27 22:49, , 6F
但是資料庫資料不會更新
07/27 22:49, 6F

07/27 22:49, , 7F
用常數代也可以跑完,且資料庫資料有更新
07/27 22:49, 7F

07/28 01:35, , 8F
合理懷疑是 SQL...那邊的問題 條件式?
07/28 01:35, 8F

07/28 01:36, , 9F
你下中斷點確定一下 那些參數有沒有確定寫值出來
07/28 01:36, 9F

07/28 01:37, , 10F
再追一下你放sql語法的stringbulider 出來的字串是不是
07/28 01:37, 10F

07/28 01:37, , 11F
對的 然後再去看sqlcommand那邊的sql部份也有沒有正確
07/28 01:37, 11F

07/28 01:37, , 12F
這樣一層一層追
07/28 01:37, 12F

07/28 09:45, , 13F
SQL我在我的SQL SERVER上面直接執行沒有問題-.-
07/28 09:45, 13F

07/28 09:54, , 14F
啊不是說了,我直接帶常數進去他是可以跑得
07/28 09:54, 14F

07/28 10:03, , 15F
那用程式串接出來的你有確認過沒問題嗎
07/28 10:03, 15F

07/28 10:04, , 16F
因為有可能在條件式的參數沒有帶到 然後可以跑
07/28 10:04, 16F

07/28 10:04, , 17F
但更新不到資料
07/28 10:04, 17F

07/28 10:15, , 18F
在WebForm很容易發生說 值被洗掉這件事情
07/28 10:15, 18F

07/28 15:01, , 19F
不要用AddWithValue,改用parameter.add(),指定參數型態
07/28 15:01, 19F

07/28 15:14, , 20F
update table set column1=XXX, column2=XXX
07/28 15:14, 20F

07/28 15:15, , 21F
column2前面 好像要有一個半形空白 (不知有沒有影響)
07/28 15:15, 21F

07/28 20:01, , 22F
這些變數Session["sesOrgID"].ToString(),
07/28 20:01, 22F

07/28 20:01, , 23F
HiddenField1.Value,DropDownList1.SelectedValue,Tex
07/28 20:01, 23F

07/28 20:01, , 24F
我都有用response.write()去印出來
07/28 20:01, 24F

07/28 20:02, , 25F
確定都是OK沒有問題的,確定有值
07/28 20:02, 25F

07/28 20:02, , 26F
但是帶進去sql查詢的method就出問題,資料庫不會更新
07/28 20:02, 26F

07/28 20:03, , 27F
也沒有拋出例外,可以順利執行完
07/28 20:03, 27F

07/28 21:33, , 28F
找到問題了,結論就是我沒有寫if(!ispostBack)
07/28 21:33, 28F

07/28 21:34, , 29F
所以我一按按鈕他把資料庫的舊值拉出來寫入
07/28 21:34, 29F

07/28 21:34, , 30F
我新的資料怎麼改都沒用
07/28 21:34, 30F

07/28 22:35, , 31F
所以結論是…值被洗掉了
07/28 22:35, 31F

07/28 23:17, , 32F
值沒有被洗掉,按鈕一submit,就會把舊值從資料庫讀出
07/28 23:17, 32F

07/28 23:18, , 33F
放在textbox上,然後再把textbox上的值寫入資料庫
07/28 23:18, 33F

07/28 23:18, , 34F
等於我更新的textbox上的文字沒有被寫入資料庫
07/28 23:18, 34F

07/28 23:19, , 35F
sql method本身是沒有問題的,問題出在抓錯值寫入DB
07/28 23:19, 35F

07/28 23:44, , 36F
所以一開始就說要確認執行那行的時候代入的值到底是什麼了..
07/28 23:44, 36F

07/28 23:45, , 37F
用debug模式在那行中斷一看就知道了
07/28 23:45, 37F
文章代碼(AID): #1HyvSadO (C_Sharp)
文章代碼(AID): #1HyvSadO (C_Sharp)