Winforms chaînes de connexion à partir de l'App.config

J'ai un Winforms application que je développe en C# qui servira d'interface pour un Serveur SQL server 2005 bases de données. J'ai roulé le fichier exécutable pour une machine de test et il a couru. Cela a fonctionné parfaitement bien sur la machine de test, jusqu'à la dernière série de modifications que j'ai effectuées. Cependant, maintenant sur la machine de test, il lève l'exception suivante immédiatement après ouverture:

System.NullReferenceException: Object reference not set to an instance of an object.
       at PSRD_Specs_Database_Administrat.mainMenu.mainMenu_Load(Object sender, EventArgs e)
       at System.Windows.Forms.Form.OnLoad(EventArgs e)
       at System.Windows.Forms.Form.OnCreateControl()
       at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       at System.Windows.Forms.Control.CreateControl()
       at System.Windows.Forms.Control.WmShowWindow(Message& m)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       at System.Windows.Forms.ContainerControl.WndProc(Message& m)
       at System.Windows.Forms.Form.WmShowWindow(Message& m)
       at System.Windows.Forms.Form.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

La seule chose que j'ai changé dans cette version qui se rapporte à mainMenu_Load est de cette manière que la chaîne de connexion à la base de données est appelée. Auparavant, j'avais mis une chaîne avec la chaîne de connexion sur chaque formulaire que j'avais besoin de l'appeler à partir d', comme:

string conString = "Data Source = SHAREPOINT;Trusted_Connection = yes;" +
                   "database = CustomerDatabase;connection timeout = 15";

Que mon application a grandi et j'ai ajouté les formes, j'ai décidé d'ajouter une Application.config pour le projet. J'ai défini la chaîne de connexion:

<connectionStrings>
  <add name="conString"
   providerName="System.Data.SqlClient"
   connectionString="Data Source = SHAREPOINT;Trusted_Connection = yes;database = CustomerDatabase;connection timeout = 15" />
</connectionStrings>

Ensuite, j'ai créé une chaîne statique qui retourne la conString:

public static string GetConnectionString(string conName)
{
    string strReturn = string.Empty;
    if (!(string.IsNullOrEmpty(conName)))
    {
        strReturn = ConfigurationManager.ConnectionStrings[conName].ConnectionString;
    }
    else
    {
        strReturn = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
    }
    return strReturn;
}

J'ai enlevé le conString variable et maintenant de la chaîne de connexion comme suit:

PublicMethods.GetConnectionString("conString").ToString()

Il semble que ce qui me donne l'erreur. J'ai changé ces instances pour appeler directement la chaîne de connexion à partir de l'App.config sans l'aide de GetConnectionString. Par exemple, dans une occurrence de SQLConnection:

using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString))

Cette également lancé l'exception. Cependant, lorsque je suis retourné à l'aide de la conString variable sur chaque formulaire, je n'avais pas de problèmes. Ce que je ne comprends pas, c'est pourquoi tous les trois méthodes fonctionnent très bien sur ma machine de développement, en utilisant l'Application.config directement ou par l'intermédiaire de la statique de la chaîne, j'ai créé lancer des exceptions.

L'ajout de Mystere Mans réponse, essayez un peu de code similaire à: foreach (ConnectionStringSettings de connexion dans le ConfigurationManager.ConnectionStrings) { MessageBox.Montrer(la connexion.Nom); } Avant d'appeler vos méthodes pour vérifier ce qu'il trouve dans le fichier de configuration pour vous assurer que c'est ce que vous pensez, est-il.

OriginalL'auteur Geo Ego | 2010-05-11