2013-01-23 123 views
0

使用最近安裝的Visual Studio 2012,但現在我無法連接到我們的SQL Server數據庫。SqlConnection爲NULL的可能原因

這些都是我在下面

  1. 的步驟App1.config創建App1.config
  2. 類型的:

    <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
        <connectionStrings> 
        <add name ="xxx" connectionString="USER ID=xx;PASSWORD=xx;PERSIST SECURITY INFO=True;Data Source=xx;Initial Catalog=xx" /> 
        </connectionStrings> 
    </configuration> 
    
  3. 到項目添加引用System.Configuration

  4. 創建對命名空間的訪問通過:

    using System.Data.SqlClient; 
    using System.Data; 
    using System.Configuration; 
    
  5. 執行以下操作:

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Data.SqlClient; 
    using System.Data; 
    using System.Configuration; 
    
    namespace ConsoleApplication10 { 
        class Program { 
         static void Main(string[] args) { 
    
          SqlConnection conn = null; 
          conn = new SqlConnection(ConfigurationManager.ConnectionStrings["xxx"].ConnectionString); 
    
         } 
        } 
    } 
    
  6. 我創建了一個新的控制檯應用程序,並加入以上,我仍然得到一個錯誤NullReferenceException was unhandledObject reference not set to an instance of an object. ...

enter image description here

編輯

通過我確定,下面是空的直接窗口:

ConfigurationManager.ConnectionStrings["xxx"].ConnectionString 

如果我硬編碼的連接字符串到構造爲SqlConnection然後連接好

我是什麼錯過 - 真的很明顯!或者這是否與我的新VS有關?

+2

確定究竟哪個變量/表達調試器使用空。 – usr

+0

什麼是空? 'conn'或'ConfigurationManager'返回的連接字符串? –

+1

差的格式,回顧你的問題。一些零件丟失 – Cybermaxs

回答

3

檢查什麼至少excecuting以下是在ConfigurationManager.ConnectionStrings:

if (ConfigurationManager.ConnectionStrings != null) { 
    Console.WriteLine(ConfigurationManager.ConnectionStrings.Count); 
    Console.WriteLine(ConfigurationManager.ConnectionStrings[0].ConnectionString); 
    Console.WriteLine(ConfigurationManager.ConnectionStrings[0].Name); 
    .... 
} else { 
    Console.WriteLine("null"); 
} 

這將突出像App.config文件重複這很可能是因爲您在提到App1.config的情況下,任何明顯的問題OP

+0

+1感謝所有的幫助 - 一個令人沮喪的問題,但如果你覺得友善,你可能想取消它似乎收集的一些downvotes! – whytheq

+0

@whytheq我認爲downvote來自於格式問題,而不是問題的相關性。 – tschmit007

+0

格式化看起來很好 - 我已經完全解釋了所有代碼和屏幕截圖的問題......只用我尷尬的發現編輯了你的答案! – whytheq

2

你試過檢查ConfigurationManager.ConnectionStrings [「xxx」]。ConnectionString的值是什麼,並用該值硬編碼?你仍然得到空嗎?

而且它建議建立這樣的連接。

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["xxx"].ConnectionString)) 
{ 
     //code   
} 

我會回答,但我沒有足夠的代表尚未... :-(

+0

讓我試試它的硬編碼;可以確定是否是導致問題的連接引用,然後 – whytheq

+1

+1感謝您的幫助(不能相信我的OP已經是-2) – whytheq

3

檢查你的輸出文件夾

假設你的應用程序叫做myapp.exe,應該有myapp.exe.config

這應該存在,應該包含的內容您在Visual Studio中的app.config文件。

如果沒有,請檢查您是否已經有了一個app.config文件的其他地方(我注意到你叫你的文件app1.config

+0

即使它不存在,也會使用默認值。 –

+0

+1謝謝湯姆 - 正如你注意到應用程序** 1 **。配置是問題。我認爲這是一個相關的問題,但已經在-2了! – whytheq

+0

@whytheq沒問題。你可以請你接受這個答案嗎? – tomfanning

2

的事實,你的代碼不「按兵不動」與conn猜測然而,我很確定ConfigurationManager返回null您傳遞的連接字符串名稱。傳入null而不是有效的連接字符串時,SqlConnection的構造函數拋出異常。

+0

如果我添加代碼,以便我的代碼執行某些操作 - 比如運行存儲過程,但仍然會出現此行代碼錯誤 – whytheq

+0

當然是!我的意思是:因爲你在你的問題中發佈的源代碼中沒有使用'conn',所以**可以是'null'的唯一情況是'ConfigurationManager'調用的結果。如果實際上有其他代碼**使用''conn','conn'也可能是'null',導致異常。但事實並非如此,所以異常**必須來自'SqlCommand'構造函數。 –

+0

+1感謝您的幫助(儘管我幾乎可以看到從您的耳朵裏冒出來的煙霧)似乎我在解決方案中有重複的應用程序文件! – whytheq

0

當您將連接字符串放在屬性 - >設置中作爲連接字符串時,請使用完整名稱空間訪問它們,並完成。

見我的回答here

相關問題