3

我有以下代码来确定 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 用户。

4

1 回答 1

0

我怀疑返回结果的用户具有授予其登录名的 VIEW_ANY_DEFINITON 权限。将此权限授予其他用户,他应该得到结果。

于 2012-10-09T16:08:54.700 回答