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.
OriginalL'auteur Geo Ego | 2010-05-11
Vous devez vous connecter pour publier un commentaire.
Ok, questions stupides. Êtes-vous sûr que vous avez ajouté la chaîne de connexion à l'application.config sur la machine de test? Et êtes-vous sûr de orthographié correctement? Êtes-vous sûr de mettre la section connectionStrings au bon endroit dans l'application.config? Et êtes-vous sûr de mettre l'application.config dans l'emplacement correct? Êtes-vous sûr de orthographié "app.config" correctement, et pas d'application.cfg ou de l'application.cofig (j'ai de la graisse les doigts de celui-ci avant)
Mais vous ne devriez pas avoir à se déplacer "app.config" dans votre répertoire de programme - Visual Studio doit créer un "yourappname.exe.config" déjà dans votre répertoire de sortie de toute façon - "app.config" n'est qu'un système d'espace réservé qui sera tourné dans votre application de config
Malheureusement, app.les configs ne peuvent pas être intégrés. Je souhaite qu'ils pourraient, qui pourraient être utiles dans certaines situations. Bien que vous pourriez avoir votre code de copier une application intégrée.config dans un fichier dans le répertoire local sur démarrer s'il n'existe pas, si vous voulais simplement livrer un seul exe.
Elle a créé. Avant j'avais ajouté app.config, j'ai été tout simplement copier et coller le fichier exécutable pour une autre machine afin de la tester. J'ai suivi la même procédure après j'ai ajouté le fichier de configuration, donc pendant que VS l'avais mis dans le répertoire de sortie, je n'avais pas ajouté à la machine de test.
Je n'ai pas l'esprit que l'application dispose d'un fichier de configuration. Je vais créer un installateur bientôt de toute façon, et cette application est à usage strictement interne, par une demi-douzaine de personnes. Merci pour la suggestion, cependant. Je vais chercher à copier la configuration d'un répertoire local comme vous l'avez suggéré.
OriginalL'auteur Erik Funkenbusch