有人知道如何使用 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 中使用动态磁贴吗? [关闭]

有人知道在使用 impala 时如何选择数据模型吗?

SciTE 文本编辑器,有人知道如何查找高级技术的文档吗?

有人知道如何使用 selenium webdriver 识别 shadow dom web 元素吗?

有人知道如何使用 Microsoft.SqlServer.Management.Smo.Table 异步创建表吗?

有人知道如何创建一个快捷方式来将选定的文件附加到 iMessage 吗?