代码之家  ›  专栏  ›  技术社区  ›  Humberto

SQL Server连接任意返回233或18456错误代码

  •  4
  • Humberto  · 技术社区  · 16 年前

    在尝试针对SQLServer2008Express实例测试无效的连接字符串时,我发现了一个奇怪的行为:指定一个无效的连接字符串 Initial Catalog 提出 SQLException 有时是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();
    }
    

    这个 system error codes 从网上的书中可以看出

    • 233
    • 18456

    我想这两种说法是不同的: 登录失败 . 但是,为什么失败不一致呢?

    1 回复  |  直到 16 年前
        1
  •  4
  •   Sankar Reddy    15 年前

    这是使用SQL Express时非常常见的问题,根本原因是SQL Express的AUTO\u CLOSE database选项在默认情况下处于启用状态。当数据库的所有用户都关闭时,数据库将完全关闭并关闭。当用户下次登录时,如果数据库正在重新打开,则无法快速验证用户对该数据库的权限。

    自动关闭还有其他副作用,它会刷新过程缓存,通常会导致更高的cpu成本。

    卑微的命令是你的朋友。

    ALTER DATABASE DBNAME SET AUTO_CLOSE OFF
    

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