台灣最大程式設計社群網站
線上人數
1468
 
會員總數:246690
討論主題:190103
歡迎您免費加入會員
討論區列表 >> C# >> c#資料庫提問
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
c#資料庫提問
價值 : 50 QP  點閱數:1001 回應數:7
樓主

瑋呈洪
門外漢
0 21
204 22
發送站內信

private void textBox1_TextChanged(object sender, EventArgs e)
{
timer1.Interval = 2000;
timer1.Enabled = true;
if (textBox1.TextLength >=4 && timer1.Enabled==true )
{
try
{
oleDbConnection1.Open();
string s;
s = "insert into Processing(產品編號,加工時間) values('" + textBox1.Text + "','" + DateTime.Now + "')";
oleDbCommand1.CommandText = s;
oleDbCommand1.ExecuteNonQuery();
textBox1.Text = null;
processingBindingSource.AddNew();

timer1.Enabled = false;
oleDbConnection1.Close();


}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
timer2.Interval = 2000;
timer2.Enabled = true;
if (textBox2.TextLength > 3 && timer2.Enabled == true)
{
try
{
oleDbConnection1.Open();
string s;
s = "update Processing set 加工完成="+ DateTime.Now +" where 產品編號='"+textBox2+"'";
oleDbCommand1.CommandText = s;
oleDbCommand1.ExecuteNonQuery();
textBox2.Text = null;

oleDbConnection1.Close();
timer2.Enabled = false;

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
}
問題一:
我在執行textBox1_TextChanged時 輸入編號 確實可以加入我想要的東西
但是每次他在執行到第4次 也就是要加入第4筆資料時
鼠標就會顯是一個讀取中的圖市 然後並沒有將我要的資料加入資料庫
在開啟後 它會說 連接未關閉。連接目前的狀態為開啟。
但是我確實有在 程式內加入oleDbConnection1.Close(); 跑前面幾次也沒問題 為甚麼會突然到第四次出問題

問題二:

執行textBox2_TextChanged時,
s = "update Processing set 加工完成="+ DateTime.Now +" where 產品編號='"+textBox2+"'";
並沒有將我需要更新的資料 更新回資料庫 難道我有打錯嗎... 產品編號 我肯定是有核對過 不會是資料庫沒有我讀入的產品編號

搜尋相關Tags的文章: [ c#資料庫提問 ] ,
本篇文章發表於2017-08-28 13:33
1樓
最有價值解答

春天
檢舉此回應
問題一
你只有在try裡面close dbConnection 如果在關閉前就發生catch就不會執行關閉
try-catch-finally

問題二
DateTime.Now 是無法直接轉成MS SQL的dateTime格式
s = "update Processing set 加工完成= CONVERT(DATETIME, "+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") +", 121) where 產品編號='"+textBox2+"'";
本篇文章回覆於2017-08-28 14:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

春天
檢舉此回應
問題二
可以使用參數化查詢解決變數型態 及 基本防範sql injection的問題
本篇文章回覆於2017-08-28 14:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

瑋呈洪
檢舉此回應
查詢運算式 'CONVERT(DATETIME, 2017-08-28 14:44:05.022, 121)' 中的 語法錯誤 (少了運算元)。

是哪裡少了嗎 我是寫你那個程式的 偵錯沒有錯誤 執行才出現這個
本篇文章回覆於2017-08-28 14:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

瑋呈洪
檢舉此回應
s = "update Processing set 加工完成='" +DateTime.Now+ "' where 產品編號='" + 40427220+ "'";

我利用button 觸發 datetime是可以輸入近資料庫的
所以現在是 我textbox2的編號 明明有和我限制的條件 where 一樣
但卻無法觸發update
本篇文章回覆於2017-08-28 14:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

春天
檢舉此回應
s = "update Processing set 加工完成= Now() where 產品編號='"+textBox2+"'";
試試這樣
本篇文章回覆於2017-08-28 14:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

小魚
檢舉此回應
請問你資料庫用的是MS-SQL還是MySql?不同資料庫的語法會不大一樣。
另外,你下中斷點去看看跑出來的SQL是什麼,
直接將那段拿去資料庫軟體執行看看能不能正常執行,
如果可以正常執行就不是語法的問題,而是其他的問題。
本篇文章回覆於2017-08-28 19:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

誰是誰
檢舉此回應
用參數式查詢不就甚麼都解決了,為什麼一定要搞這種用起來麻煩的要命然後風險又高的解法?
本篇文章回覆於2017-08-28 22:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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