2012-06-19 79 views
5

我正在嘗試做一些我認爲非常簡單的事情。 我有一個連接字符串,我從數據庫中抓取。當我創建一個SQL連接的新實例時,它看起來(當我調試並查看對象時),就像正在正確填充數據庫連接字符串一樣。但是,我得到的錯誤消息使我認爲數據庫名稱中的下劃線之後的所有信息都被消除了。忽略連接字符串中的下劃線後的數據庫名稱被忽略

典例:

Database db = new SqlDatabase(ConnectionString); // Connection string appears correct 
DbCommand dbCommand = db.GetStoredProcCommand("StoredProcName"); 
DataSet approverDataset = db.ExecuteDataSet(dbCommand); // when this executes, exception is generated 

當我運行這段代碼,我有以下異常消息招呼: 服務器主體「testdb_psidentity」不能在當前安全下訪問數據庫「TESTDB」背景

這裏是我的連接字符串:

DataSource=testserver.com;Database=testdb_ps;Trusted_Connection=false;uid=testdb_psidentity;pwd=testpwd 

我試圖將此更改爲:

DataSource=testserver.com;Database=[testdb_ps];Trusted_Connection=false;uid=testdb_psidentity;pwd=testpwd 

而雖然這似乎得到數據庫的全名,它似乎也正在尋找一個數據庫與名稱中的括號。當我收到此錯誤: 無法打開登錄請求的數據庫「[testdb_ps]」。登錄失敗。 用戶'testdb_psidentity'登錄失敗。

但是,我可以在SQL Server管理工作室中使用該登錄名/密碼登錄連接到數據庫。

任何方式我可以讓它接受數據庫名稱testdb_ps數據庫名稱?我無法簡單地更改數據庫名稱,因爲我沒有訪問權限,並且我被告知更改數據庫名稱不會發生。

+0

您的用戶「testdb_psidentity」是否具有連接/執行數據庫權限?如果你不確定,你可以通過 - >右鍵單擊數據庫 - >屬性 - >權限 - >選擇用戶並在顯式選項卡下檢查... – NiK

+0

不幸的是,當我右鍵單擊數據庫,我沒有看到這個。 –

+0

達到,但嘗試將數據源放入語法[testserver.com]或[testserver]。[com]。你可以確定源代碼的名稱是testserver.com(不是testserver)。請參閱SMSS – Paparazzi

回答

1

你可以嘗試在連接字符串周圍加引號,我認爲它將下劃線解釋爲分隔符。

取決於你如何使用它使用引號或

" 
+0

你的報價搞亂了嗎?你是什​​麼意思?我試過用它作爲字符串變量。我沒有嘗試過硬編碼,但在我們的編碼標準中,這通常是不被接受的。 –

+0

通常我們將連接字符串放在web.config或app.config文件中。這就是爲什麼我們對'_'字符沒有真正的問題。如果你必須從數據庫中獲取連接字符串,可以嘗試先寫出字符串併發送該字符串。在某些場景中使用'"'時,如果你不能輸入字符,但是如果你在c#中做一個字符串字面你不需要它 –

+0

只是一個建議,但如果這個數據庫已經存在了一段時間,那麼我會假設其他應用程序使用它?如果是這樣,你可以看看他們如何去做。 –

0

是U能夠連接到通過SQL Server Management Studio中的數據庫?

嘗試

  1. 禁用防火牆
  2. 使用IP地址
  3. 使用SQL Server實例的名稱明確。
0

使用嚮導生成實體類。通過這種方式,您將獲得app.config中的編碼連接字符串