台灣最大程式設計社群網站
線上人數
2248
 
會員總數:241128
討論主題:186801
歡迎您免費加入會員
討論區列表 >> C# >> 資料庫程式有問題抓不出來
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
資料庫程式有問題抓不出來
價值 : 190 QP  點閱數:231 回應數:7

樓主

新手上路
門外漢
0 2
14 2
發送站內信

private void textBox2_TextChanged(object sender, EventArgs e)
{
timer2.Interval = 10000;
timer2.Enabled = true;
if (textBox2.TextLength >= 4 && timer2.Enabled == true)
{
try
{
num = num + 1;

oleDbConnection1.Open();
string s;
s = "update Processing set 加工完成='" + DateTime.Now + "' where 產品編號='" + textBox2.Text + "'";
textBox2.Text = null;
oleDbCommand1.CommandText = s;
oleDbCommand1.ExecuteNonQuery();




string g;

for (q = num-1; q <= num - 1; q++)
{
dataGridView1.CurrentCell = dataGridView1[1, q];
DateTime time = Convert.ToDateTime(dataGridView1.CurrentCell.Value);
for (w = num - 1; w <= num - 1; w++)
{
dataGridView1.CurrentCell = dataGridView1[2, w];
DateTime time2 = Convert.ToDateTime(dataGridView1.CurrentCell.Value);
for (a = num - 1; a <= num - 1; a++)
{
dataGridView1.CurrentCell = dataGridView1[0, a];
string b = Convert.ToString(dataGridView1.CurrentCell.Value);
if (b == Convert.ToString(dataGridView1.CurrentCell.Value))
{
TimeSpan ts = time2 - time;
g = "update Processing set 工時='" + ts + "' where 產品編號='" + b + "'";
oleDbCommand1.CommandText = g;
oleDbCommand1.ExecuteNonQuery();

}
}
}
}



}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
finally
{
timer2.Enabled = false;
oleDbConnection1.Close();
}
}
}

我下了中斷點看過 我的q w a變數 會成0 0 0~1 1 1~2 2 2 這是我想要的沒錯
我也用過button事件 去檢查過
這程式裡的 q w a 和ts 還有產品編號 b
舉例:
q=0 w=0 a=0 ts=00:00:04 b=..75

產品編號 是有和資料庫裡的編號對應到的

但是 現在的問題是
g = "update Processing set 工時='" + ts + "' where 產品編號='" + b + "'";
oleDbCommand1.CommandText = g;
oleDbCommand1.ExecuteNonQuery();

雖然值都有對應到
但是 我的工時欄位 卻沒有更新 ts值
式過很多次了


搜尋相關Tags的文章: [ 資料庫程式有問題抓不出來 ] ,
本篇文章發表於2017-08-30 11:59
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

小魚
檢舉此回應
1.你的catch有抓到問題嗎?
2.下中斷點在SQL語法後面, 拿去資料庫軟體直接執行看看問題在哪
3.請改用參數查詢, 要不然會有SQL injection的問題
4.工時的資料型態是什麼, 可以直接將ts塞進去嗎?
本篇文章回覆於2017-08-30 12:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

新手上路
檢舉此回應
private void button1_Click(object sender, EventArgs e)
{
oleDbConnection1.Open();
num = num + 1;


string g;

for (q = num-1; q <= num - 1; q++)
{
dataGridView1.CurrentCell = dataGridView1[1, q];
DateTime time = Convert.ToDateTime(dataGridView1.CurrentCell.Value);
for (w = num-1; w <= num - 1; w++)
{
dataGridView1.CurrentCell = dataGridView1[2, w];
DateTime time2 = Convert.ToDateTime(dataGridView1.CurrentCell.Value);
for (a = num-1; a <= num - 1; a++)
{
dataGridView1.CurrentCell = dataGridView1[0, a];
string b = Convert.ToString(dataGridView1.CurrentCell.Value);
if (b == Convert.ToString(dataGridView1.CurrentCell.Value))
{
TimeSpan ts = time2 - time;
g = "update Processing set 工時='" + ts + "' where 產品編號='"+ b + "'";
oleDbCommand1.CommandText = g;
oleDbCommand1.ExecuteNonQuery();
MessageBox.Show("" + time + "\r\n" + time2 + "\r\n" + "ts=" + ts + "\r\n" + "b=" + b + "\r\n" + "q=" + q + "\r\n" + "w=" + w + "\r\n" + "a=" + a);

}
}
}
}
oleDbConnection1.Close();
}


我利用這個btn 竟然可以將我要的數值更新到資料庫
代表說
g = "update Processing set 工時='" + ts + "' where 產品編號='"+ b + "'";
oleDbCommand1.CommandText = g;
oleDbCommand1.ExecuteNonQuery();
是沒有問題的
本篇文章回覆於2017-08-30 12:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

新手上路
檢舉此回應
我在下中斷點 看程式時 我的 textboxchange的
num
並沒有像我要的 num慢慢疊加上去
它好像一直保持著1

並且num=num+1;
兩邊的num都給我顯示1
看不懂...
在btn裡面就不是這樣一回事
本篇文章回覆於2017-08-30 12:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

小魚
檢舉此回應
兩邊的num當然是一樣的,
因為Debug抓的是"現在的"值,
不是執行到那一行的時候的值,
你要在那行跟下一行下斷點,
前後看到的值才會不一樣.
本篇文章回覆於2017-08-30 12:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
不錯的參考

春天
檢舉此回應
真的有需要用到3個 for嗎..
本篇文章回覆於2017-08-30 14:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

QZ_CHUNG
檢舉此回應
可以問一下,為什麼update 事件要寫在textBox2_TextChanged下嗎?
本篇文章回覆於2017-08-30 14:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

Zeeman
檢舉此回應

g = "update Processing set 工時='" + ts + "' where 產品編號='" + b + "'";
下面加一行
Console.WriteLine(g);
然後run看看
在output的地方看看這個sql的產品編號是不是都不對,或是有沒有跑,不要用中斷去看了

另外
dataGridView1.CurrentCell = dataGridView1[1, q];
DateTime time = Convert.ToDateTime(dataGridView1.CurrentCell.Value);
直接改為
DateTime time = Convert.ToDateTime(dataGridView1[1, q].Value);
其他兩個也一樣,不用再放到CurrentCell

還有,以下兩行這樣寫在一起你的用意何在?
string b = Convert.ToString(dataGridView1.CurrentCell.Value);
if (b == Convert.ToString(dataGridView1.CurrentCell.Value))

不建議你先用try catch把這整包起了,如果你只是怕Convert出錯
可寫一隻轉換日期的副程式
private DateTime ConvertToDate(object d) {
.....
}

最後你的三個for很不自然,感覺你是不是邏輯出錯了
資料如果如下
q w a
0 a A
1 b B
2 c C
你三個for會變成以下的跑法
run 1 ->q=0 , w=a, a=A
run 2 ->q=0, w=a, a=B
run 3 ->q=0, w=a, a=C
run 4 ->q=0, w=b, a=A
run 5 ->q=0, w=b, a=B
run 6 ->q=0, w=b, a=C
.....
你確定這是你要的邏輯嗎
本篇文章回覆於2017-09-05 18:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

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