2012-10-09 13 views
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不包含任何行。

兩個用戶之間可能會有什麼區別,導致同一個查詢沒有結果?有沒有更好的方法來獲得數據庫兼容性?

順便說一句,這個代碼運行/至2012年工作的SQL Server 2005上

編輯:我應該指出,myServerName,myDBName,用戶名和密碼都是一樣的 - 唯一區別在於運行代碼的兩個不同的Windows用戶。

+0

是否將「myDBName」添加到連接字符串中作爲「Initial Catalog」或「Database」更改結果?那將是我嘗試的第一件事。 – RThomas

+0

@RThomas:謝謝你的建議。是的,我確實使用了DBName。同樣的結果。我甚至在select中代替db_name()嘗試了它。 –

回答

0

我懷疑返回結果的用戶具有授予他的登錄名的VIEW_ANY_DEFINITON權限。將此權限授予其他用戶,他應該返回結果。

+0

感謝Pete的建議。在測試機器上,我明確否認了VIEW_ANY_DEFINITION。這導致更多的問題,因爲我檢查數據庫是否存在(對不起,補充說,在你的答案)總是失敗。事實上,它幾乎破壞了連接。 –

相關問題