使用SMO同时调用Database.ExecuteNonQuery()?

时间:2011-01-11 20:49:06

标签: .net concurrency smo executenonquery

我一直在试图弄清楚如何使用SMO在单个SQL Server实例中同时针对多个数据库运行更新脚本。我们的环境中有越来越多需要更新的数据库,一次迭代一个就成了一个问题(太慢了)。

根据我的理解,SMO不支持并发操作,我的测试已经证实了这一点。在服务器对象级别似乎有共享内存,对于像DataReader上下文这样的东西,不断抛出诸如“读者已经打开”之类的异常。我为没有得到确切的例外而道歉。我会尝试获取它们并更新这篇文章。

我不是SMO的专家,只是诚实地感受我的道路。我不确定我是以正确的方式接近它,但这是必须要做的事情,否则我们的工作效率会慢下来。

那你们怎么做这样的事呢?我是否使用SMO的错误技术?我想要做的就是在一个sql server实例中并行执行针对数据库的sql脚本。

感谢您提供任何帮助,Daniel

1 个答案:

答案 0 :(得分:0)

只需使用多个ServerConnection对象,并使用每个对象实例化multipe Server对象。基本上,每个线程一个。它们是否都连接到同一个数据库实例并不重要。

我编写了一个应用程序来记录数据库的模式。我同时运行多个“查询”(不仅仅是ExecuteNonQuery()而且还有SMO上的其他函数),没有任何问题 - 好吧,至少直到今天。不幸的是,除了相当“基本”的东西外,他们似乎没有太多关于SMO的文件。