有人知道如何使用 Microsoft.SqlServer.Management.Smo.Table 异步创建表吗?
Posted
技术标签:
【中文标题】有人知道如何使用 Microsoft.SqlServer.Management.Smo.Table 异步创建表吗?【英文标题】:Anybody know how to do an Asynchronous creation of tables using Microsoft.SqlServer.Management.Smo.Table? 【发布时间】:2020-08-06 07:15:37 【问题描述】:我目前在异步创建 Microsoft.SqlServer.Management.Smo.Table 时遇到数据读取器问题。注意:我从 TableView 和 IDisposable 派生了我的 SmoTable。
private async Task Generate()
await Task.Run(()=>
MSSMSDatabase db = CreateDB(txtDBname.Text);
List<string> tableNames = GetTableNameList();
for(string tableName in tableNames)
using(SmoTable tbl = new Table(db, tableName)) // <=== after a few loops, the error occurs within here.
foreach(var col in columnList)
tbl.AddColumns(col);
tbl.Create();
);
Microsoft.SqlServer.Management.Smo.FailedOperationException: InvalidOperationException: 已经有一个打开的 DataReader 与此 Connection 关联,必须先关闭。
我尝试将 IDisposable 实现到我从 TableView 类派生的 SmoTable 类,但仍然有相同的错误。
提前致谢。
【问题讨论】:
【参考方案1】:我进行了反复试验,发现您需要为每个表创建创建一个新连接,以便为它创建一个单独的数据读取器。因此,如果您在 foreach 循环中包含 Server 的实例化,它将创建一个新连接,从而创建一个新的数据读取器。
for(string tableName in tableNames)
using(SmoTable tbl = new Table(db, tableName)) // <=== after a few loops, the error occurs within here.
foreach(var col in columnList)
_server = GetSQLServer(); // <=== this is basically Server server = new Server(); return server; kind of method.
db = _server.Databases[_databaseName];
tbl.AddColumns(col);
tbl.Create();
【讨论】:
以上是关于有人知道如何使用 Microsoft.SqlServer.Management.Smo.Table 异步创建表吗?的主要内容,如果未能解决你的问题,请参考以下文章
有人知道如何在 Phonegap 和 Windows Phone 7 中使用动态磁贴吗? [关闭]
有人知道如何使用 selenium webdriver 识别 shadow dom web 元素吗?