2016-05-14 22 views
-2

Ich muss Verbindungszeichenfolge für meine Abfrage verwenden, aber ich erhalte eine FehlermeldungSqlConnection geben Objektverweis Fehler

Objektverweis auf eine Instanz eines Objekts eingestellt.

Dies ist mein Code:

string strSql = "select first_name + ' ' + last_name name, email from user_mst where mkey in (" + Session["UserId"].ToString() + ")"; 

DataTable table = new DataTable(); 

using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString())) 
{ 
    conn.Open(); 

    using (SqlDataAdapter dbdata = new SqlDataAdapter(strSql, conn)) 
    { 
     dbdata.Fill(table); 
    } 

    conn.Close(); 
} 

ich Fehler erhalten bei

SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString())) 

aber meine Verbindungen scheint genau in Ordnung zu sein.

+0

Versuchen Sie, Ihren Code zu ändern, um 'string conString = ConfigurationManager.AppSettings [" ConnectionString "] zuzuweisen.ToString(); 'und verwenden Sie die' conString'-Variable in Ihrer Verbindungserklärung. Wahrscheinlich ist das 'ConnectionString' Element in Ihrer Konfigurationsdatei nicht vorhanden. Dadurch können Sie Ihren Code ein wenig besser debuggen. – gmiley

+2

http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-fix-it – DavidG

+0

@gmiley: können Sie eine ähnliche Antwort für das? – BNN

Antwort

1

Wie bereits erwähnt, sollte der geänderte Code das Debuggen erleichtern oder zumindest das fehlende Verbindungszeichenfolge-Konfigurationselement abfangen.

Nach dem Debuggen Ihres Codes scheint Ihr Problem von Ihrer Konfigurationsdatei zu stammen und davon, wie Sie auf Ihre Verbindungszeichenfolge zugreifen. Ändern Sie den Code aus:

try 
{ 
    conString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString(); 
} 
catch(Exception) 
{ 
    MessageBox.Show("Unable to retrieve 'ConnectionString' from configuration file."); 
} 

zu

try 
{ 
    conString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); 
} 
catch(Exception) 
{ 
    MessageBox.Show("Unable to retrieve 'ConnectionString' from configuration file."); 
} 

der Connectionstring Eintrag Unter der Annahme, auch "Connectionstring" genannt wird, sollte dies Ihr Problem lösen.

TLDR: Wie schon ein paar Mal in Kommentaren erwähnt, wird die Änderung AppSettings zu ConnectionStrings Ihr Problem beheben.

+0

es ging in fangen' Objektreferenz nicht auf eine Instanz eines Objekts gesetzt. – BNN

+0

Wo wird diese Ausnahme geworfen? – gmiley

+0

bei 'catch (Exception)' – BNN

0

System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString()) wird null zurückgegeben und dann an SqlConnection-Konstruktor übergeben. Überprüfen Sie, ob Ihre Konfigurationsdatei gültig ist und den Schlüssel ConnectionString enthält. Etwas wie dieses: <add key="ConnectionString" values="[your connection string]"/>

+0

ja es enthält die Werte, ich habe es überprüft – BNN

0

Normalerweise werden die Connectionstrings in einem richtigen Abschnitt Ihrer Webkonfiguration gespeichert. Dieser Abschnitt wird durch die WebConfigurationManager und es wird gespeichert in der Connectionstring Sammlung

// You need this reference to System.Web.Configuration.dll 
// and remove the using System.Configuration; 
using System.Web.Configuration; 

.... 
string cons = WebConfiguration.ConnectionStrings["ConnectionString"].ConnectionString; 

using(SqlConnection cnn = new SqlConnection(cons)) 
..... 

Auch während wahrscheinlich in Ihrem Zusammenhang mit Configuration funktioniert auch, sollten Sie wirklich verwenden, um die WebConfigurationManager für Web-Anwendungen

leicht lesen See ConfigurationManager vs WebConfigurationManager

+0

also, sollte ich 'using' entfernen und direkt verwenden Außerdem habe ich kein Problem in der Konfigurationsdatei – BNN

+0

Sitzung enthält richtigen Wert. Ich habe es überprüft – BNN

+0

Absolut nein, warum möchten Sie entfernen? Es ist immer erforderlich, um ein Einweg-Objekt zu verwenden – Steve

0

Tostring() wird eine Ausnahme auslösen, wenn sie in eine using-Anweisung geschrieben wird. Ich weiß nicht warum, aber ich habe auch dieses Problem. Der Code sollte so aussehen:

using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
{ 
    conn.Open(); 
    using (SqlDataAdapter dbdata = new SqlDataAdapter(strSql, conn)) 
    { 
     dbdata.Fill(table); 
    } 
    conn.Close(); 
} 

Sie Bezug auf System.Configuration in Ihrem Projekt durch einen Rechtsklick "References" hinzufügen müssen und "add reference" in assemblies-> Rahmen, bevor Sie diesen Code verwenden.

1

Bitte überprüfen Sie AppSettings in web.config richtig. Ich bin sicher, DB-Pfad, den Sie in Appsetting schreiben, ist falsch.

+0

Während dies kann theoretisch beantworten Sie die Frage, [es wäre vorzuziehen] (// meta.stackoverflow.com/q/8259), die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. – manetsus