我有下面的代碼,以確定一個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不包含任何行。
兩個用戶之間可能會有什麼區別,導致同一個查詢沒有結果?有沒有更好的方法來獲得數據庫兼容性?
順便說一句,這個代碼運行/至2012年工作的SQL Server 2005上
編輯:我應該指出,myServerName,myDBName,用戶名和密碼都是一樣的 - 唯一區別在於運行代碼的兩個不同的Windows用戶。
是否將「myDBName」添加到連接字符串中作爲「Initial Catalog」或「Database」更改結果?那將是我嘗試的第一件事。 – RThomas
@RThomas:謝謝你的建議。是的,我確實使用了DBName。同樣的結果。我甚至在select中代替db_name()嘗試了它。 –