dataadapter.fill命令在启用连接池时在重负载下随机返回0行

时间:2013-04-04 14:19:16

标签: asp.net ado.net

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

不返回任何错误,而是dataadapter.fill命令只返回0行。

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

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

1 个答案:

答案 0 :(得分:0)

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;
}