Windows窗体应用程序的SQL Server 2005随机login失败

我们的一个VS .NET 2008窗体应用程序从多个客户机运行。 应用程序会随机地从随机机器和代码中随机的地方login失败。 login工作几乎每次,但大约每十五分钟一次,从随机用户的SQL Server错误日志中显示一个错误。 我们正在运行一个集群SQL Server 2005系统,数据库处于2005(90)模式。

以下错误出现在SQL Server错误日志中:

login失败的“App_Login”。 [客户端:XXX.XXX.X.XXX]错误:18456,严重性:14,状态:16。

以下错误是客户看到的:

System.Data.SqlClient.SqlException:将请求发送到服务器时发生传输级别错误。 (提供程序:TCP提供程序,错误:0 – 现有连接被远程主机强制closures。)

该应用程序使用的连接string是:

Data Source=XX.XXX.XXX.XXX;Network Library=DBMSSOCN;Initial Catalog=document7;User Id=App_Login;Password=PASSWORDHERE; 

(注意:XXX.XXX.X.XXX和XX.XXX.XXX.XXX是IP地址)

  • 'document7'和'master'数据库处于多用户模式。
  • login可以访问“document7”和“master”。
  • 客户端有时会遇到错误,但在失败成功后重试相同的操作而不做任何更改。
  • 我可以使用pipe理工作室的“App_Login”没有问题。 我可以毫无问题地访问'document7'数据库和'master'数据库。
  • 我们有其他的应用程序使用相同的连接string,并没有问题。
  • 在两种情况下,我都尝试使用默认数据库“master”和“document7”进行login。

感谢您的时间和任何帮助!

在这种情况下,我认为SQL Server的错误不像客户端错误那样暴露。 客户端错误指出,连接已经存在,并被切断,我认为是更准确的描述正在发生的事情。 这篇博文解释了这个问题。

基本上,由于某种原因池中的连接被切断(可能不活动或者networkingblip),并且客户端不知道连接被切断,直到它运行另一个查询。 这就解释了为什么这个问题只发生在我们的Windows窗体的应用程序中,因为这个应用程序会使连接长时间处于非活动状态。 此外,Web应用程序与数据库服务器处于相同的物理位置,因此在networking上不会有太多的连接问题。

要解决这个问题,我只需要检查错误并重新运行查询第二次。 该查询应该第二次工作,因为它会自动接收一个新的SPID和一个全新的连接。

检查这个博客 。 确保你看看下面的评论和讨论其中之一说:

“(错误:18456,严重性:14)状态:16表示传入的用户没有login到目标数据库的权限,例如说你创build一个用户FOO并设置FOO的默认数据库为master,但是FOO没有权限login到主“。