2011-03-18 170 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中一直这样做。