havanacloub
Messages postés9Date d'inscriptionmardi 13 février 2007StatutMembreDernière intervention 5 septembre 2009
-
15 avril 2009 à 17:31
cs_gustou
Messages postés4Date d'inscriptiondimanche 3 juin 2007StatutMembreDerniè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"];
//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.
havanacloub
Messages postés9Date d'inscriptionmardi 13 février 2007StatutMembreDerniè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?
cs_gustou
Messages postés4Date d'inscriptiondimanche 3 juin 2007StatutMembreDerniè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();
havanacloub
Messages postés9Date d'inscriptionmardi 13 février 2007StatutMembreDerniè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.
cs_gustou
Messages postés4Date d'inscriptiondimanche 3 juin 2007StatutMembreDerniè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.
havanacloub
Messages postés9Date d'inscriptionmardi 13 février 2007StatutMembreDerniè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.