![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 許文熹 ![]()
![]() |
我做了1個成績資料庫在 table 裡已經有一筆記錄, 當我要更改記錄時, 好像寫不回去 sql 裡, 請前輩大大指導 程式碼如下: private void button3_Click(object sender, EventArgs e) { string sqledit; sqledit = "UPDATE 成績 SET TTM='" + textBox21.Text.Replace("'", "''") + "',PIN1=" + textBox1.Text + ",PIN2=" + textBox2.Text + ",PIN3=" + textBox3.Text + " WHERE TDT='" + textBox20.Text.Replace("'", "''") + "'"; Edit(sqledit); } void Edit(string sqlstr) { try { SqlConnection cn = new SqlConnection(); cn.ConnectionString = @"Data Source=(LocalDB)\v11.0;" + "AttachDbFilename=|DataDirectory|TestDB.mdf;" + "Integrated Security=True"; cn.Open(); SqlCommand cmd = new SqlCommand(sqlstr, cn); cmd.ExecuteNonQuery(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
搜尋相關Tags的文章:
[ SQL UPDATE ] ,
本篇文章發表於2018-05-07 14:39 |
1樓 |
你先抓出組出來的SQL字串丟到連接SQL的軟體執行看看,
看看長得什麼樣, 說不定就知道問題了, 另外, 小心SQL Injection.
本篇文章回覆於2018-05-07 22:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
許文熹 ![]() |
謝謝小魚前輩的回覆,
SQL 字串出來是 UPDATE 成績 SET TTM='王小明',PIN1=1.01,PIN2=2.02,PIN3=3.00 WHERE TDT='10101' 從 C# 的資料庫總管去執行會成功 在C# Debug 狀態下, 跑過 Update 指令之後 我有再跑一次FormLoad(把資料再呼叫一次)資料是有改過的 只是離開 C#之後再去看資料庫總管 資料又回來原有的樣子 FormLoad 程式碼如下 InitializeComponent(); BindingManagerBase bm; SqlConnection cn = new SqlConnection(); cn.ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|TestDB.mdf;" + "Integrated Security=True"; DataSet ds = new DataSet(); SqlDataAdapter daScore = new SqlDataAdapter ("SELECT * FROM 成績 WHERE TDT = '10101' ", cn); daScore.Fill(ds, "成績"); textBox20.DataBindings.Add("Text", ds, "成績.TDT"); textBox21.DataBindings.Add("Text", ds, "成績.TTM"); textBox1.DataBindings.Add("Text", ds, "成績.PIN1"); textBox2.DataBindings.Add("Text", ds, "成績.PIN2"); textBox3.DataBindings.Add("Text", ds, "成績.PIN3");
本篇文章回覆於2018-05-08 08:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
cn.Open();
後面要cn.Close();
本篇文章回覆於2018-05-08 10:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓
作者回應
許文熹 ![]() |
謝謝春天前輩的回覆
我把程式碼更改成如下這樣子, 加入 cn.Close(); 不知道位置對不對 我有再試跑一下, 好像還是沒有成功 { try { SqlConnection cn = new SqlConnection(); cn.ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|TestDB.mdf;" + "Integrated Security=True"; /* cn.ConnectionString = @"Data Source=192.168.1.6.;Database=jMRP ;Uid=sa;Pwd=ck2ai3xup6;"; */ cn.Open(); SqlCommand cmd = new SqlCommand(sqlstr, cn); cmd.ExecuteNonQuery(); cn.Close(); /* 加在這一行 */ } catch (Exception ex) { MessageBox.Show(ex.Message); } }
本篇文章回覆於2018-05-08 11:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓
不錯的參考
Ader Chen ![]() |
"資料庫總管" 和 Debug 模式執行時連線的是同一個 資料庫嗎? 看到 AttachDbFilename=|DataDirectory|TestDB.mdf 會不會 Debug 執行時是改到 專案資料夾\bin\debug\ 裡面的 TestDB.mdf? 參考: https://coolong124220.nidbox.com/diary/read/8045439
本篇文章回覆於2018-05-08 12:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓
最有價值解答
Ader Chen ![]() |
上面網址有提到原因: 『原來每次運行,.net都自動複製了一份數據庫到運行目錄,所以上次的數據就都丟失了』 如果有要求要資料庫檔案放在相對路徑, 可參考該作者解法, 假如不要求相對路徑的話, 把 |DataDirectory|TestDB.mdf 改用絕對路徑是最快的解法. 以上供參考.
本篇文章回覆於2018-05-08 12:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
7樓
作者回應
許文熹 ![]() |
謝謝 Ader Chen 前輩的說明.
我試了幾次前輩提供的方式與連結裡的方式, 1.在 mdf 選項裡的複製到輸出目錄選擇不要複雜會碰到開啟檔案問題 2.指定 mdf 在 bin\Debug 下會出現 Login fail 問題 ps.將 mdf copy 去 bin\Debug 下, 從 C#裡的 資料庫總管去連結資料來源時碰到 login failed 問題,移回來專案目錄下就沒這問題. 3.改用絕對路徑之後資料可以更新了 AttachDbFilename=C:\Users\jackhsu\Desktop\K-type _VS2013_20170705\20180313\K-type\TestDB.mdf; 另外我又試了一個直接連到 SQL SERVER 方式,也會成功 co.ConnectionString = @"Data Source=192.168.33.88.;Database=DatabaseName ;Uid=AccountName;Pwd=Password; 感謝幾位前輩的指導讓我將問題解決.
本篇文章回覆於2018-05-09 08:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |