使用SMO和任务并行库同时在同一服务器上的数据库上执行脚本?

时间:2011-01-07 14:59:58

标签: smo task-parallel-library

我希望我的问题标题足够清晰。我想要做的是使用SQL Server管理对象同时在同一服务器上的所有数据库上执行更新脚本。我目前的实验实现是这样的:

var server = new Server(new ServerConnection(new SqlConnection(connString)));
server.ConnectionContext.InfoMessage += new SqlInfoMessageEventHandler(DBOutputReceived);

var databases = server.Databases.Cast<Database>().ToList();          
Parallel.ForEach(databases, db => { db.ExecuteNonQuery(script); });

我甚至不确定这是否可以使用SMO,但这基本上就是我想要做的。我可以看到ConnectionContext.InfoMessage事件可能会有问题,但我不知道如何解决。我应该为每个并行任务创建一个单独的Server实例吗?

我很感激你能给出的任何建议。

谢谢,丹尼尔

1 个答案:

答案 0 :(得分:0)

解决方案是让每个线程创建自己的Server / ServerConnection对象,这样线程之间就没有共享内存。