SQLServerデータベースの互換性レベルを判断するための次のコードがあります。
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()");
私には2人のユーザーがいて、そのうちの1人はこのコードを実行して、適切な値を取り戻すことができます。別のユーザーがこのコードを実行して、まったく同じ資格情報を使用して同じサーバー/データベースに接続し、返されたDataSetに行が含まれていません。
同じクエリに対して1人が結果を返さない原因となる、2人のユーザーの違いは何でしょうか。データベースの互換性を取得するためのより良い方法はありますか?
ちなみに、このコードはSQLServer2005から2012で実行/動作します。
編集: myServerName、myDBName、username、およびpasswordは常に同じであることに注意してください。唯一の違いは、コードを実行している2人の異なるWindowsユーザーです。