台灣最大程式設計社群網站
線上人數
5997
 
會員總數:246136
討論主題:189720
歡迎您免費加入會員
討論區列表 >> VB.NET >> 為何設了CommandTimeout = 2 ,還是會卡在ExecuteNonQuery()?
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
為何設了CommandTimeout = 2 ,還是會卡在ExecuteNonQuery()?
價值 : 210 QP  點閱數:27937 回應數:34
樓主

nickcatwang
門外漢
0 17
518 39
發送站內信



實在是不懂為何了...
小弟下了CommandTimeout=2,這指令的用法,就小弟所瞭解的範圍,
是指ExecuteNoQuery()的等候時間應該只有2秒

可是我的vb.net卡在command.ExecuteNonQuery() 卡了4小時...

請問各位先進,我該先去找找SQL有甚麼問題,還是我下錯指令了?
小弟希望讓VB.net的sqlcommand,在execute後,2秒內未執行完畢就產生個錯誤出來...

搜尋相關Tags的文章: [ sql ] , [ commandtimeout ] , [ sqlcommand ] ,
本篇文章發表於2010-12-01 23:34
1樓
回應

神來之筆
捐贈 VP 給 神來之筆 檢舉此回應
show 一下sql
本篇文章回覆於2010-12-02 00:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

神來之筆
捐贈 VP 給 神來之筆 檢舉此回應
transaction deadlock
-->insert的話, 看一下trigger是否有deadlock, 或其他
本篇文章回覆於2010-12-02 00:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

nickcatwang
檢舉此回應
to 神來之筆:
SQL應該是沒有deadlock...因為沒有trigger,一個command執行完才輪下一個,沒有中間插入的
而且sql 可能有上千行,也不知怎麼貼,那部分只能靠自己慢慢再檢查看看

我比較想確認的重點是 commandTimeout,不是應該逾時就執出錯誤嗎?
本篇文章回覆於2010-12-02 00:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

mark shu
捐贈 VP 給 Mark Shu 檢舉此回應
若是改成
"Data Source=(local);Initial Catalog=bgR;Integrated Security=True;Connection Timeout=2"
也許可試試
本篇文章回覆於2010-12-02 01:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

nickcatwang
檢舉此回應
to Mark
connection timeout,小弟記得這是連接SQL的等待時間,而不是執行command的等待時間

SqlConnection.ConnectionTimeout 屬性: 等待連接開啟的時間 (以秒為單位)。預設值為 15 秒。
本篇文章回覆於2010-12-02 09:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

lsk
捐贈 VP 給 lsk 檢舉此回應
你確定是卡在你認為的ExecuteNonQuery(),而不是別的_command.ExecuteNonQuery()
本篇文章回覆於2010-12-02 10:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

nickcatwang
檢舉此回應
to Isk
確認是卡那裡,很確認...300個趴仙確認

我本來是用timer去存,現在克難變成用thread 然後用timer去判讀執行Execute時間是否超過兩秒
超過就aboort 然後重新start
目前這樣是可以使用,可是...是否有更簡易的方式?
本篇文章回覆於2010-12-02 10:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

BBJ
捐贈 VP 給 BBJ 檢舉此回應
如果你是SQL server 你可以用SQL Server Profiler追蹤一下sql是不是到了SQL Server,而且2秒還不Timeout
有助Debug
本篇文章回覆於2010-12-02 16:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

香帥
檢舉此回應
一般來說CommandTimeout 預設為30秒
執行一般指令大約都夠,若不夠才需設定較長秒數,如下例:
SqlConnection conn = new SqlConnection("Data Source=localhost;User Id=sa; Password=; Initial Catalog=northwind");
conn.Open();

cmd.ResetCommandTimeout();
//CommandTimeout 重設為30秒

cmd.CommandTimeout = 120;
//怕下列指令執行較長,將他延長設為120秒

SqlCommand cmd = new SqlCommand("DELETE FROM 資料表一 WHERE 姓名='無名英雄'", conn);
cmd.ExecuteNonQuery();

因此若你的command需較長時間才需設,不然預設30秒應該足夠
所以你的問題出在你的command ,說到這,相信你已能解決你的問題了吧 ^_^
本篇文章回覆於2010-12-02 19:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
不錯的參考

香帥
檢舉此回應
//一般來說CommandTimeout 預設為30秒
//執行一般指令大約都夠,若不夠才需設定較長秒數,如下例:
//上一貼為說明用,重貼調整正確的可執行順序及部份做為註解如下:

SqlConnection conn = new SqlConnection("Data Source=localhost;User Id=sa; Password=; Initial Catalog=northwind");
conn.Open();
SqlCommand cmd = new SqlCommand("DELETE FROM 資料表一 WHERE 姓名='無名英雄'", conn);

cmd.ResetCommandTimeout();
//CommandTimeout 重設為30秒

cmd.CommandTimeout = 120;
//怕執行"DELETE FROM 資料表一 WHERE 姓名='無名英雄'" command 費時較長,將他延長設為120秒


cmd.ExecuteNonQuery();

//因此若你的command需較長時間才需設,不然預設30秒應該足夠
//所以你的問題出在你的command ,說到這,相信你已能解決你的問題了吧 ^_^
本篇文章回覆於2010-12-02 19:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

nickcatwang
檢舉此回應
to 香帥
感謝您的熱心答覆,不過我的問題是,commandtimeout時間到了,vb.net卻未執出錯誤
與sql sp一般的執行時間長短沒有關係,重點在「未執出錯誤」
另,小弟執行的sp,約0.2∼0.3秒可執行完畢,2秒綽綽有餘

to BBJ
沒用過這個東東,我研究看看...
本篇文章回覆於2010-12-02 20:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
不錯的參考

香帥
檢舉此回應
因你沒寫你的sql的command字串,因此示範你應可舉一反三
所以要問你的command字串ㄚ
不然都在猜
sql的command不知是甚麼呢
如果是合法字串,像我示範的,就是若在120秒內可執行完,就像你說你的是0.2秒就執行完,那它在2秒內完成,它為何要有錯誤發生呢?
是沒有在時間內執行完才會發生ㄚ^_^
本篇文章回覆於2010-12-02 21:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

nickcatwang
檢舉此回應
to 香帥
再次感謝您的熱心答覆,不過,煩請詳讀小弟的提問:
我的問題是,commandtimeout時間到了,vb.net卻未執出錯誤
與sql sp一般的執行時間長短沒有關係,重點在「未執出錯誤」

是沒有在時間內執行完才會發生ㄚ^_^

quote香帥您的答覆,小弟問題就是您說的:沒有在時間內執行完,「可是沒執出錯誤」
小弟要知道為何為執出,以及如何在執行逾時發生時,能確保vb.net執出逾時錯誤

本篇文章回覆於2010-12-03 11:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

lsk
捐贈 VP 給 lsk 檢舉此回應
剛試了一下,確實會跑出例外
會不會真的你的不到2秒就跑完了
當然要執行的時間太久才會發生

本篇文章回覆於2010-12-03 14:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

小羊窒息
捐贈 VP 給 缺氧的羊:窒息 檢舉此回應
它的TimeOut跟我們所想的不一樣

基本上, CommandTimeout 的效用並不及於 [SQL Server的運作期間]

(這一篇也有提到)
http://www.devnewsgroups.net/adonet/t11327-command-timeout-property-not-working.aspx

(就連將 ConnectionTimeOut 設為2秒,也是沒意義的)
本篇文章回覆於2010-12-03 14:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

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