【问题标题】:dataadapter.fill command randomly returns 0 rows under heavy load when connection pooling is enabled启用连接池时,dataadapter.fill 命令在重负载下随机返回 0 行
【发布时间】:2013-04-04 14:19:16
【问题描述】:

我们一直在 ASP.NET 应用程序中遇到 ADO.NET 命令问题,我们已将其归结为...

没有返回错误,但是 dataadapter.fill 命令只返回 0 行。

这只在某些时候发生,在绝大多数情况下,查询会正常执行。 我们知道 SQL server 没有返回错误(使用 sql profiler),并且查询应该返回了结果(重新运行 dataadapter.fill 确实返回了一些行并且这些行一直存在于数据库中) 这似乎只有在我们打开 ado.net 连接池并且服务器负载过重时才会发生。

我们正在使用 SqlClient 连接/命令对象并连接到 SQL Server 数据库(到目前为止,我们已经在 SQL 2005 和 SQL 2008 中看到了这种行为)

【问题讨论】:

    标签: asp.net ado.net


    【解决方案1】:

    select 语句是否返回多个结果集?如果是,那么您可能想要使用:

    using(DbDataAdapter dataAdapter = _providerFactory.CreateDataAdapter())
    {
      dataAdapter.TableMappings.AddRange(tableMappings);
      dataAdapter.SelectCommand = selectCommand;
    
      // This is crucial for HasChanges() to return the correct value
      dataAdapter.AcceptChangesDuringFill = false;
    
      MyTypedDataSet dataSet = new MyTypedDataSet();
      dataSet.EnforceConstraints = false;
      dataAdapter.Fill(dataSet);
      bool hasData = dataSet.HasChanges();
      return hasData;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多