Chaine de connexion vide - La référence d'objet n'est pas définie à une instanc [Résolu]

Messages postés
9
Date d'inscription
mardi 13 février 2007
Dernière intervention
5 septembre 2009
- - Dernière réponse : cs_gustou
Messages postés
4
Date d'inscription
dimanche 3 juin 2007
Dernière intervention
6 septembre 2009
- 6 sept. 2009 à 21:23
Bonjour, je construis un service wcf et j'établis une connexion à une base de données sqlserver :

Lors de l'implémentation du service ou j'accède à ma base mon code est le suivant :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data;
using System.ServiceModel;
using ExceptionNorthwindContract;

namespace ExceptionNorthwindContractImpl
{

public class ExceptionNorthwindService : IExceptionNorthwindService
{
ConnectionStringSettings cnxStringSettings = null;

public List<string> getListCustomers()
{
cnxStringSettings = ConfigurationManager.ConnectionStrings["SQLConnectionString"];

DbProviderFactory dpf = DbProviderFactories.GetFactory(cnxStringSettings.ProviderName);
DbConnection dbC = dpf.CreateConnection();
dbC.ConnectionString = cnxStringSettings.ConnectionString;

//on crée une liste de clients
List<string> lstClients = new List<string>();

try
{
dbC.Open();

DbCommand dbCmd = dbC.CreateCommand();
dbCmd.CommandText = "SELECT ContactName FROM Customers";

DbDataReader dbRd = dbCmd.ExecuteReader();

while (dbRd.Read())
{
string nomClient = dbRd.GetString(0);
lstClients.Add(nomClient);
//ou alors lstClients.Add(dbRd["ContactName"]);
}

}
catch (DbException dbE)
{
dbC.Close();
string.Format("{0}", dbE.Message);
}
finally
{
dbC.Close();
}


//on retourne la liste de clients
return lstClients;

}

et le nom de ma chaine de connexion est décrit dans un fichier app.config avec la directive suivante :

<connectionStrings>

</connectionStrings>

Lorsque enfin j'exécute mon prog, j'ai l'erreur suivante qui est renvoyée :

La référence d'objet n'est pas définie à une instance d'un objet (sur la ligneDbProviderFactory dpf = DbProviderFactories.GetFactory(cnxStringSettings.ProviderName); )

Je vois que la chaine de connexion est vide lors de l'exécution mais je n'arrive pas à résoudre l'erreur, pourriez-vous me donner un coup de main parce que la je galère.

Merci d'avance.
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
9
Date d'inscription
mardi 13 février 2007
Dernière intervention
5 septembre 2009
3
Merci
et j'ai viré le app.config qui n'avait rien à faire dans mon projet qui implémentait le service.

Merci havanacloub 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de havanacloub
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Dernière intervention
29 septembre 2011
0
Merci
Salut,
ta chaîne de connexion est vide ce qui fait que ton objet dpf est null.
Par la suite tu ne peux donc pas l'utiliser
Commenter la réponse de cs_MoH008
Messages postés
9
Date d'inscription
mardi 13 février 2007
Dernière intervention
5 septembre 2009
0
Merci
Salut, merci de ta réponse mais j'ai bien vu avec les points d arrét qu'elle était vide la chaine mais le truc c'est que je sais pas pourquoi parce que pourtant j'ai bien renseigné le fichier de config mais on dirait qu'il n'est pas reconnu. La question que je me pose c'est peut on ou pas mettre un app.config dans une implémentation de contrat de service?
Commenter la réponse de havanacloub
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Dernière intervention
29 septembre 2011
0
Merci
Salut,
as tu été ici ?
As tu tenté d'utiliser un fichier de paramètres à la place (.settings) ? 
Le problème persiste t-il ?
Commenter la réponse de cs_MoH008
Messages postés
9
Date d'inscription
mardi 13 février 2007
Dernière intervention
5 septembre 2009
0
Merci
c'est [Résolu] merci l'admin
Commenter la réponse de havanacloub
Messages postés
4
Date d'inscription
dimanche 3 juin 2007
Dernière intervention
6 septembre 2009
0
Merci
Je n'ai pas tout compris pour ta solution. Je rencontre le même problème que toi. Peux-tu être plus précis. Merci pour ta réponse.
Commenter la réponse de cs_gustou
Messages postés
4
Date d'inscription
dimanche 3 juin 2007
Dernière intervention
6 septembre 2009
0
Merci
Mon code :
[i] private void button3_Click(object sender, RoutedEventArgs e)
{
// On initialise la connexion
this.oConnection = new OleDbConnection();
// On vérifie que la connexion passe
try
{
// On récupère la chaine
ConnectionStringSettings connex = ConfigurationManager.ConnectionStrings["MaConnection"];
this.oConnection.ConnectionString = connex.ConnectionString;
textBox10.Text = connex.Name + " - " + connex.ConnectionString;

this.oConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\bg\\Documents\\Visual Studio 2008\\Projects\\GestionStock\\GestionStock\\Data\\GesStock.accdb;Persist Security Info=False;";
;
// On essaye d'ouvrir la base
this.oConnection.Open();
}
catch (Exception ex)
{
// On affiche le message d'erreur
MessageBox.Show("Exception : \n" + ex.Message, "Exception",
MessageBoxButton.OK, MessageBoxImage.Error);
// On efface la chaine de connexion
return;
}
this.oConnection.Close();

}
}
}/i

Le fichier de config:
[i]<?xml version ="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>

</connectionStrings>
</configuration>/i
Commenter la réponse de cs_gustou
Messages postés
9
Date d'inscription
mardi 13 février 2007
Dernière intervention
5 septembre 2009
0
Merci
Salut, moi dèjà dans mon cas, j'avais mis mon fichier de configuration dans un projet non exécuté auquel on faisait appel par des dll (mon service WCF), c'est pour ça que la chaine de connexion était vide ce que j'expliquais plus haut.

Mais toi, au vu de ton code, tu déclares ta chaine en dur dans ton code (ce qui est à bannir au passage) et dans ton fichier de config. Contente toi de la déclaration de ta chaine de connex dans ton app.config et mets des points d arret au niveau de ta connexion.connexionString ... et observe si ça passe ou pas, tu devrais voir d'ou ça vient.
Commenter la réponse de havanacloub
Messages postés
4
Date d'inscription
dimanche 3 juin 2007
Dernière intervention
6 septembre 2009
0
Merci
Tout d'abord, je te remercie pour la rapidité de ta réponse.

Dans mon code, j'ai effectivement mis la chaîne de connexion en dur pour un test. Mais le problème se situe plus haut.
Lorsque la ligne 9 :
ConnectionStringSettings connex = ConfigurationManager.ConnectionStrings["MaConnection"];
est exécutée, la variable connex est nulle. Je devrais normalement récupérer les informations de mon fichier de config et ce n'est pas le cas. Même en pas à pas, je ne trouve pas le problème. Je constate seulement que la variable connex reste nulle.

Une idée?
Commenter la réponse de cs_gustou
Messages postés
9
Date d'inscription
mardi 13 février 2007
Dernière intervention
5 septembre 2009
-2
Merci
Salut, ça y est j'ai résolu grace au msdn, tu m'as bien mis sur la voie. En fait, je définissais ma chaine de connexion dans un app.config de l'implémentation et les app.config ne doivent apparemment se trouver que dans les projets exécutables c'est pour ça qu'il reconnaissait pas mon connexionStrings, donc j'ai simplement déplacé ma directive <connectionstrings> dans le app.config de l'host et ça passe.

Merci bien.</connectionstrings>
Commenter la réponse de havanacloub

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.