C# 检索数据库兼容性级别-相同服务器/DB、不同用户的不同结果
我有以下代码来确定SQL Server数据库的兼容性级别:C# 检索数据库兼容性级别-相同服务器/DB、不同用户的不同结果,c#,sql-server,smo,C#,Sql Server,Smo,我有以下代码来确定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 '" + myServerNa
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()");
我有两个用户,其中一个能够运行此代码并获得正确的值。另一个用户使用完全相同的凭据运行连接到同一服务器/数据库的代码,返回的数据集不包含任何行
两个用户之间的差异可能会导致一个用户无法返回同一查询的结果吗?有没有更好的方法来获得数据库兼容性
顺便说一下,此代码在SQLServer2005到2012上运行/工作
编辑:我应该指出myServerName、myDBName、username和password总是相同的——唯一的区别是运行代码的两个不同的Windows用户。我怀疑返回结果的用户对其登录授予了查看任意定义权限。将此权限授予另一个用户,他应该会返回结果。将myDBName添加到连接字符串作为
初始目录
或数据库
是否会更改您的结果?那将是我第一件要尝试的事情。@RTOMAS:谢谢你的建议。是的,我用DBName试过了。同样的结果。我甚至试过用它来代替db_name()。谢谢你的建议,皮特。在一台测试机上,我明确拒绝了VIEW\u的任何定义。这导致了更多的问题,因为我检查数据库是否存在(对不起,在您的回答之后补充)总是失败。事实上,它几乎破坏了连接。