日期:2014-05-17  浏览次数:20456 次

求高手帮忙
我用网站是用asp.net+sql sever2000架构的,每天人流量最高的时候可达到2000多用户在线,可是有时总是SQL-SERVER出现报错日志:“从客户端接收的缓冲区无效”,然后服务器的连接数持续上升,最后网站就挂掉了,必须要回收应用程序池以后,才能正常使用,请问这是怎么回事啊,非常郁闷,望高手能指点一点,高分献上

------解决方案--------------------
数据连接是有限的资源,使用的时候用完就释放.使用Using实现
Using(Connection con = new Connection()){
 .....
}


------解决方案--------------------
"无效的缓冲区接收到来自客户端 ” 中 SQL Server 日志当您使用 SQL Server .NET 提供程序类时出现错误信息
症状
when use Microsoft .NET Framework SqlClient class,receive following error message in Microsoft SQL Server 2000 error log:
错误: 17805,严重性: 20,状态: 3
从客户端收到无效的缓冲区。

您在 Microsoft .NET Framework 客户端应用程序中收到下面的相应的错误信息:
System.Data.SqlClient.SqlException: 当前命令上出现一个严重的错误。 结果,如果有的话,应该丢弃

原因
this behavior occurs if one of following scenarios is true:

* 您可以使用一个 SqlClient 类在 Finalize 方法或 C# 析构函数中。
* 当创建一个 SqlParameter 对象时,不指定显式 SQLDbType 枚举。 当没有指定显式 SQLDbType 枚举,Microsoft .NET Framework Data Provider for SQL Server (SqlClient) 尝试选择正确的 SQLDbType 枚举基于传递的数据。 SqlClient 将失败。
* declare instance of SqlClient class to be static in C# or to be shared in Visual Basic。 instance can be concurrently accessed from in application more than one thread。

注意 在 ASP.NET 环境中或在某些其他环境中,并发访问即使没有其他线程在应用程序代码中创建显式是可能的。
* 在 .NET Framework 代码显式指定参数的大小是多个可用于 SQL Server 中的数据类型的最大。

例如,根据到 SQL Server 联机丛书, nvarchar 是一个可变长度的 Unicode 字符数据的 n 个字符。 "n"必须是从 1 到 4000 值。 如果您指定一个大小就是多个为 nvarchar 参数 4000,您收到"症状"一节所述的错误信息。

下面的代码还演示如何可能会发生这些错误:
C# code

Stored Procedure
--------------------------

CREATE PROCEDURE spParameterBug @myText Text AS
            Insert Into ParameterBugTable (TextField) Values (@myText)

Code
-------
static void Main(string[] args)
{
       string dummyText=string.Empty;
       for (int n=0; n < /*80*/ 3277; n++)   // change this to 80 to receive the second error that is mentioned earlier in this article.
       {
             dummyText += "0123456789";
       }

        // TO DO: Change data source to match your SQL Server:

       SqlConnection con= new SqlConnection("data source=myserver;Initial Catalog=mydb;Integrated Security=SSPI;persist security info=True;packet size=16384");
       SqlCommand cmd = new SqlCommand("SpParameterBug", con);
      con.Open();
           // Causes error 17805:
      SqlParameter param2 =new SqlParameter("@myText", dummyText);
      cmd.CommandType = CommandType.StoredProcedure;
      cmd.Parameters.Add(param2);
      try
      {
          cmd.ExecuteNonQuery();
      } 
      catch (Exception err)
      {
         Console.WriteLine(err.ToString());
      }

      Console.ReadLine();

}

------解决方案--------------------
很有可能是因为连接没有及时释放,
网站最后挂掉时报的什么错误?

2000有没有打最新的补丁呢?
------解决方案--------------------
完蛋了...
------解决方案--------------------
连接没关闭?
------解决方案--------------------
绑定一下
------解决方案--------------------
用一楼的吧,要不就及时关闭连接。
------解决方案--------------------
把网站的应用池程序配置一下(在IIS站点目录下面,找到你的网站使用的应用池,然后配置),当应用池程序占用的资源大于多少的时候,让程序重新启动,就不会挂了

------解决方案--------------------
using(//这里是创建链接数据库或“稀缺资源”的实例的地方)
{}
采用这样的方式,能及时关闭连接,释放资源
------解决方案--------------------
我乃菜鸟,只好帮你顶