我希望我的问题标题足够清晰。我想要做的是使用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实例吗?
我很感激你能给出的任何建议。
谢谢,丹尼尔
答案 0 :(得分:0)
解决方案是让每个线程创建自己的Server / ServerConnection对象,这样线程之间就没有共享内存。