我有以下代码来确定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用户。
答案 0 :(得分:0)
我怀疑返回结果的用户是否已授予其登录权限的VIEW_ANY_DEFINITON权限。将此权限授予其他用户,他应该返回结果。