0

我们在 .Net 4.0 和 SQL Server 2008 R2 上的暂存 Web 应用程序运行平稳超过 2 个月。突然之间,我们开始在应用程序中收到错误消息:

错误消息:System.InvalidOperationException:内部连接致命错误。在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)在 System.Data.SqlClient.SqlDataReader.HasMoreResults()

每当我的数据库查询返回超过约 700 行时,就会出现这种情况。奇怪的是,我的生产网站(与登台具有相同的代码库)在连接到登台数据库时运行良好。

我尝试将我的登台 Web 服务器连接到生产数据库(登台数据库的类似副本),但我得到了同样的错误。这个错误是暂时的,有时页面加载,有时我得到错误。

如果我将行数减少到 700 以下,则页面可以正常工作。

特定的存储过程在我的页面中只被调用一次。

我做了以下事情:

  1. 修改代码以在using块中使用命令对象。
  2. 使用完成后立即关闭连接。
  3. 比较暂存和生产 IIS 服务设置,它们看起来很相似。
  4. 两个 Web 服务器上都安装了相同的 MDAC。

但没有任何帮助,我仍然在登台 Web 服务器中遇到错误。该查询在 SQL Server Management Studio 中运行良好,耗时 < 3 秒。

任何人都可以提出任何解决方案吗?

这是调用存储过程的代码库:

        string strSPName = SQLSchema.strSQLSchema + SPNames.<Some SP Name>;


 using (conn)
    {

        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = strSPName;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Connection = conn;
        cmd.Parameters.Add(SPParams.<Some Param>, SqlDbType.Int);
        cmd.Parameters[0].Value = <value of Param>;
        conn.Open();

        dsSubmitter = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        adapter.Fill(dsSubmitter);
        if (dsSubmitter.Tables.Count != 0)
        {
            dsSubmitter.Tables[0].TableName = DALConstants.<Table Name>;
        }

        conn.Close();
    }

SP 非常简单,带有一个 select 语句以及主表和详细表之间的 INNER 连接。主表有约 400 行,明细表 > 10,000 行。SQL 查询返回大约 4000 行。

4

1 回答 1

0

看起来像是 SqlAdapter 的问题,你为什么不尝试再次安装 .net 框架。

清理解决方案并重建它。

于 2013-02-15T11:10:55.980 回答