2012-03-09 56 views
0

我正在運行一個Windows窗體基礎應用程序,我使用httpwebrequest的後臺工人類。並且使用網頁瀏覽器控件,都將數據保存到Excel表格中。 這是工作的罰款或者也許是運氣,現在我看到一段代碼卡上的INSERT語句,它只是在代碼堵塞插入查詢

myCommand.ExecuteScalar(); 

一段時間我看到這個之後不出來。而:

CLR已經無法從COM上下文0x7833a8轉換到COM上下文0x7838b0 60秒。擁有目的地上下文/公寓的線程很可能要麼進行非抽水等待,要麼處理非常長的運行操作而不抽取Windows消息。這種情況通常會對性能產生負面影響,甚至可能導致應用程序無法響應或內存使用量不斷累積。爲了避免這個問題,所有的單線程單元(STA)線程都應該使用抽取等待原語(比如CoWaitForMultipleHandles),並在長時間運行的操作中定期抽取消息。

查詢它卡住是:

try 
{ 

    myCommand.CommandText = "Insert into [outputsheet$] (website,[facebook page],DealTitle,Dealtime,Dealprice,Dealvalue,Dealdiscount,Dealsaving,Linktitle,address,Category,[Type of Deal]) Values('" + 
     webaddress.Replace("'", "''") + "','" + facbookaddress.Replace("'", "''") + "','" + title.Replace("'", "''") + "','" + dealtime.Replace("'", "''") + "','" + 
     amount.Replace("'", "''") + "','" + value.Replace("'", "''") + "','" + discount.Replace("'", "''") + "','" + saving.Replace("'", "''") + "','" + 
     titleweb.Replace("'", "''") + "','" + address.Replace("'", "''") + "','" + categoryName.Replace("'", "''") + "','Now Deals')"; 
    myCommand.ExecuteScalar(); 

} 
catch (Exception exp) 
{ 

} 

請幫助,有什麼我需要做的。如何避免它。 謝謝

+0

真的沒有必要像這樣「清理」你的SQL ......現有的庫更好。 – 2012-03-09 23:00:41

+0

@ EdS.i我不確定你在說什麼:S。 – confusedMind 2012-03-09 23:11:11

+0

所有調用'.Replace(「'」,「''」);' – 2012-03-09 23:13:28

回答

0

或許你可以嘗試在鎖()中封裝ExecuteNonQuery以避免在執行前一個請求時發送請求到excel的可能性?

編輯:example

如果你的代碼,並插入被封裝在一個類中,你會做這樣的事情:

static private object thisLock = new object(); 

及更高版本:

lock(thisLock) 
{ 
    myCommand.ExecuteNonQuery(); 
} 

我的天堂我做了很多多線程的工作,所以我可能會脫穎而出。

+0

您能否提供一個示例。 – confusedMind 2012-03-09 23:28:37

+0

只是;-)但檢查免責聲明。 – 2012-03-09 23:40:31

+0

運行讓看:D – confusedMind 2012-03-09 23:57:09