台灣最大程式設計社群網站
線上人數
751
 
會員總數:242468
討論主題:187511
歡迎您免費加入會員
討論區列表 >> C# >> sql 更新沒有成功
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
sql 更新沒有成功
價值 : 50 QP  點閱數:173 回應數:7

樓主

許文熹
初學者
50 2
46 5
發送站內信

新手發問,
我做了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
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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