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

Résolu
havanacloub Messages postés 9 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 5 septembre 2009 - 15 avril 2009 à 17:31
cs_gustou Messages postés 4 Date d'inscription dimanche 3 juin 2007 Statut Membre 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.

10 réponses

havanacloub Messages postés 9 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 5 septembre 2009
20 avril 2009 à 22:49
et j'ai viré le app.config qui n'avait rien à faire dans mon projet qui implémentait le service.
3
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
20 avril 2009 à 16:44
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
0
havanacloub Messages postés 9 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 5 septembre 2009
20 avril 2009 à 17:00
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?
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
20 avril 2009 à 17:47
Salut,
as tu été ici ?
As tu tenté d'utiliser un fichier de paramètres à la place (.settings) ? 
Le problème persiste t-il ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
havanacloub Messages postés 9 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 5 septembre 2009
20 avril 2009 à 22:52
c'est [Résolu] merci l'admin
0
cs_gustou Messages postés 4 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 6 septembre 2009
5 sept. 2009 à 01:47
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.
0
cs_gustou Messages postés 4 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 6 septembre 2009
5 sept. 2009 à 01:50
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
0
havanacloub Messages postés 9 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 5 septembre 2009
5 sept. 2009 à 15:14
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.
0
cs_gustou Messages postés 4 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 6 septembre 2009
6 sept. 2009 à 21:23
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?
0
havanacloub Messages postés 9 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 5 septembre 2009
20 avril 2009 à 22:47
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>
-2