2010-04-26 56 views
2

在VS2005中,我正在使用訪問SQL Server的DLL。該DLL返回的SQLExceptionSQL Server 2005:無效的對象名異常

無效的對象名稱tableXYZ「

但tableXYZ是在數據庫中的表。

它應該在尋找dbo.tableXYZ嗎?這是使用登錄名的權限問題嗎?

+0

我應該注意到我沒有DLL的源代碼。我所能做的就是改變調用代碼和SQL Server。 – 2010-04-26 11:26:36

回答

1

這可能是表和所有者權限的問題。

例如表的所有者可能是dbo如此完整的表名會dbo.TableXYZ你連接的用戶,例如可以SQLUser可能無法訪問到dbo架構。所以只能訪問表,如SQLuser.TableXYZ

我會檢查您用來連接到數據庫的權限。

+0

我無法更改連接到數據庫的代碼,因爲它在編譯的DLL中。 – 2010-04-26 11:27:34

+0

您不需要更改DLL - 您需要檢查連接到數據庫的用戶是否有權訪問表所屬的架構。 – codingbadger 2010-04-26 11:35:01

0

你必須在你的連接字符串中使用數據庫名稱,否則它只會連接你必須使用dbo.databasename.tableXYZ。

,你可以找到各種連接字符串here

+0

我無法更改連接到數據庫的代碼,因爲它位於compliled DLL中。 – 2010-04-26 11:27:55

1

使用dbo.tableXYZ使其更清晰,你想要的東西 - 在tableXYZ默認dbo架構。在另一個模式中可能會有tableXYZ - 然後SQL Server可能不知道您想要哪一個。

而且這絕對是一個權限問題。如果您以該用戶的身份連接到SQL SErver Mgmt Studio中的該數據庫 - 您能否看到tableXYZ表?

更新:該DLL是否需要一個特定的連接字符串,您可能沒有複製到您的調用應用程序的app.config文件? .NET中的DLL無法真正擁有自己的mylibrary.dll.config - 默認情況下,它不會被.NET讀取。

+0

是的,我可以。我應該注意到,我沒有DLL的源代碼,所以我所能做的只是改變SQL Server上的設置。 – 2010-04-26 11:24:41

+0

答覆「更新」:不,看起來沒有任何.config文件。我能否推斷連接正在成功完成,並且問題是模式/權限之一? – 2010-04-26 13:05:21

0

作爲一個起點,您可以打開SQL Server Profiler跟蹤,以查看DLL正在連接到數據庫的方式。例如你應該能夠看到正在使用的憑證。您還可以確認確保代碼連接到正確的數據庫等。