SQL Server连接随机返回233或18456错误代码

4
当我尝试针对SQL Server 2008 Express实例测试无效的连接字符串时,我发现了这种奇怪的行为:指定一个无效的"Initial Catalog"会引发一个SQLException,其Number有时是233,有时是18456。
代码可以更好地说明这一点。
// The following connection string has a purposely incorrect initial catalog:
string invalidConnString = @"Data Source=.\SQLEXPRESS;Initial Catalog=INVALID_DATABASE_NAME;User Id=dummyUser;Password=dummyPassw;";

SqlConnection connection = new SqlConnection(invalidConnString);

try
{
    connection.Open();
}
catch (SqlException sex)
{
    Console.WriteLine(sex.Number); // I "randomly" get either 233 or 18456
    throw;
}
finally
{
    connection.Close();
}

系统错误代码(来自 Books Online)指出:

  • 233 - 已经成功与服务器建立了连接,但是在登录过程中发生了错误。(提供程序:共享内存提供程序,错误:0 - 管道的另一端没有进程。)
  • 18456 - 用户“%.*ls”登录失败。%.*ls

我认为这两种情况都是表示登录不成功的不同方式。但是,为什么会出现不一致的失败情况呢?

1个回答

4

亲爱的Humberto,

在使用SQL Express时,这是一个非常普遍的问题,其根本原因是SQL Express默认开启了AUTO_CLOSE数据库选项。当所有用户关闭数据库后,数据库会干净地关闭和关闭。下次用户登录时,如果重新打开数据库,则无法快速验证用户对该数据库的权限。

AUTO_CLOSE还有其他副作用,它会刷新过程缓存,并可能导致更高的CPU成本。

下面的命令是您的好朋友。

ALTER DATABASE DBNAME SET AUTO_CLOSE OFF

http://msdn.microsoft.com/en-us/library/bb522682.aspx


非常好!尽管我已经不再参与那个原始项目,但我会接受你的答案。谢谢! - Humberto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接