在尝试针对SQL Server 2008 Express实例测试无效连接字符串时,我发现了这种奇怪的行为:指定无效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指定了
我认为两者都有不同的说法:登录失败。但那么,为什么失败不一致?
答案 0 :(得分:4)
温贝托,
这是使用SQL Express时非常常见的问题,根本原因是SQL Express默认情况下打开了AUTO_CLOSE数据库选项。当数据库的所有用户都关闭时,数据库将被关闭并干净地关闭。当用户下次登录时,如果数据库重新打开,则无法快速验证该数据库的用户权限。
AUTO_CLOSE还有其他副作用,它会刷新过程缓存,并且通常会导致更高的CPU成本。
低命令是你的朋友。
ALTER DATABASE DBNAME SET AUTO_CLOSE OFF