【问题标题】:C# Alternative of Multiple Active Result Set for MS-AccessMS-Access 的多个活动结果集的 C# 替代方案
【发布时间】:2013-01-23 16:10:26
【问题描述】:

我想知道 Microsoft 的 Access 数据库是否存在多个活动结果集 MARS?我知道这适用于 SQL Server。我尝试将它与 Access 一起使用,但它对我不起作用。我想知道如何将 MARS 与 Access 一起使用。

【问题讨论】:

  • MS-Access (Jet) 没有多重结果集功能。您需要为每个查询创建单独的结果集。
  • 不是完全重复,但应该回答您的问题 - return multiple result sets from ms access to ado.net
  • 我已经看过那个帖子了。但对我真的没有帮助......

标签: c# sql sql-server ms-access


【解决方案1】:

简而言之,Microsoft Access 不支持多个活动结果集 (MARS)。 ODBC 提供程序不支持它,如果您从性能角度考虑 MARS 实际为您提供的功能,那么为什么不支持的原因应该很明显。

如果您认为 MARS 存在的最重要原因是您是否在 SQL 服务器上执行了存储过程,这些过程会产生多个结果集。如果您有此类查询,您需要能够以某种方式访问​​这些多个结果集。

但是在 Access 中没有存储过程之类的东西。如果您有多个查询,您可以分别执行每个查询并获取每个查询的结果集。因此,不需要 MARS。

注意

根据 cmets,下面是一个如何同时打开两个数据读取器的示例:

 using(var connection1 = new OdbcConnection("your connection string here"))
 {
   connection1.Open();
   using(var connection2 = new OdbcConnection("your connection string here"))
   {
     connection2.Open();

     using(var cmd1 = connection1.CreateCommand())
     {
       cmd1.CommandText = "YOU FIRST QUERY HERE";

       using(var dataReader1 = cmd1.ExecuteReader())
       {
          while(dataReader1.Read())
          {
             // keep reading data from dataReader1 / connection 1
             //  .. at some point you may need to execute a second query

             using(var cmd2 = connection2.CreateCommand())
             {
                cmd2.CommandText = "YOUR SECOND QUERY HERE";

                // you can now execute the second query here
                using(var dataReader2 = cmd2.ExecuteReader())
                {
                   while(dataReader2.Read())
                   {

                   }
                }
             }
          } 
       }
     }
     connection2.Close();
   }
   connection1.Close();
 }

【讨论】:

  • 那么,有没有其他方法可以同时打开不同的数据阅读器?
  • 是的,您可以打开到同一个数据库的多个连接并执行多个命令,每个命令都有自己的数据读取器..
  • 我真正需要的是在数据阅读器中打开另一个数据阅读器......但是每次我收到一个错误说你已经打开了一个阅读器......
  • 您当然可以同时打开两个数据阅读器。但是您还需要打开一个新连接以与第二个数据读取器一起使用。您不能对两个数据读取器使用相同的连接..
  • @user1929236 这正是 MARS 允许的 - MS Access 不支持。您需要在打开另一个数据读取器之前关闭以前的数据读取器,恐怕没有办法解决这个问题。只是一点建议,如果您正在寻找可扩展性不要使用 MS Access
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多