我有以下代码来确定 SQL Server 数据库的兼容性级别:
Microsoft.SqlServer.Management.Smo.Server server = new Server(myServerName);
if (!server.Databases.Contains(database))
{ throw new ArgumentException("Specified database ('" + myDBName+ "') not found on '" + myServerName + "'"); }
string connstr = string.Format("Data Source={0};" +
"Persist Security Info=False;" +
"User ID={1};" +
"Password={2};Enlist=False;", myServerName, username, password);
server.ConnectionContext.ConnectionString = connstr;
Microsoft.SqlServer.Management.Smo.Database db = server.Databases[myDBName];
DataSet ds = db.ExecuteWithResults(@"select compatibility_level
from sys.databases where name=db_name()");
我有两个用户,其中一个能够运行此代码并取回正确的值。另一个用户运行此代码,使用完全相同的凭据连接到同一服务器/数据库,并且返回的 DataSet 不包含任何行。
两个用户之间可能有什么区别会导致同一查询没有返回结果?有没有更好的方法来获得数据库兼容性?
顺便说一句,此代码在 SQL Server 2005 到 2012 上运行/工作。
编辑:我应该指出 myServerName、myDBName、用户名和密码总是相同的——唯一的区别是运行代码的两个不同的 Windows 用户。