2011-03-18 70 views
0

我正在尋找一種讓我的C#(4.0)應用程序異步發送數據到SQL Server 2008實例的方法。我有點像我在http://nayyeri.net/asynchronous-command-execution-in-net-2-0看到的,但那不是我正在尋找的東西。SQL Server異步執行?

我有這樣的代碼:

// myDataTable is a .NET DataTable object 
SqlCommand sc= new SqlCommand("dbo.ExtBegin", conn); 
SqlParameter param1 = sc.Parameters.AddWithValue("@param1", "a"); 
SqlParameter param2 = sc.Parameters.AddWithValue("@param2", "b"); 
SqlParameter param3 = sc.Parameters.AddWithValue("@param3", myDataTable); 
param3.SqlDbType = SqlDbType.Structured; 
param3.TypeName = "dbo.MyTableType"; 
int execState = sc.ExecuteNonQuery(); 

而且由於myDataTable可能非常大,我不想控制檯應用程序掛起,而它的數據發送到服務器,如果有6個大負荷我希望他們都在同一時間在控制檯應用程序沒有阻塞。我不想連續發送。

所有想法表示感謝,謝謝!

回答

2

但什麼是dbo.ExtBegin在做什麼?這一切都依賴於它,因爲調用可能會在數據庫中的鎖上進行序列化(最多),或者最壞的情況下,如果該過程未針對協調性進行適當設計,則可能會得到不正確的結果。

+0

謝謝,我想你只是給了我正確的文字組合給websearch。我還會看看數據庫方面,看看它是否可以在接收存儲過程中實際處理併發呼叫。 Service Broker因爲額外的服務器配置開銷而關閉。我不想添加自定義線程代碼,我認爲BeginExecuteNonQuery可能會爲我做。謝謝。 – Snowy 2011-03-18 20:06:37

0

創建一個線程並在該線程內執行查詢,確保不會導致會導致競爭條件的後續數據庫調用。

0

我首先想到的是爲插入產生一個新線程,並讓主線程使用AutoResetEvent,TimerCallback和Timer對象檢查衍生線程的執行。

我在Silverlight中一直這樣做。