IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Data Access System.Data.Commom


Sujet :

C#

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Data Access System.Data.Commom
    Bonjour,

    dans le cadre de ma formation je doit réaliser une application en C# avec une connexion à une base de données.

    Je dois suivre des règles strictes mais je bloque sur la connexion.

    Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public class DataAccess
    {
    	public DataTable SetConnexion(string id)
    	{
    		DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
     
    		using(DbConnection conn = factory.CreateConnection())
    		{
    			try
    			{
    				DbConnectionStringBuilder sqlclient = factory.CreateConnectionStringBuilder();
     
    				conn.ConnectionString = sqlclient.ConnectionString;
    				conn.Open();
     
    				using(DbCommand cmd = conn.CreateCommande())
    				{
    					cmd.Parameters.Add(new DbParameter(":id", id));		//Impossible de créer une instance de la classe abstraite ou de l'interface System.Data.Commom.DbParameter.
     
    					cmd.CommandText = "select * where id = :id";	
    				}
     
    				using(DataTable dt = new DataTable())
    				{
    					DbDataAdapter da = new DbDataAdapter(cmd);		//Impossible de créer une instance de la classe abstraite ou de l'interface System.Data.Commom.DbDataAdapter.
    					cmd.CommandType = CommandType.Text;
    					da.Fill(dt);
    					return dt;
    				}
    			}
    		}
    		catch(Exception ex)
    		{
    			throw new Excepton("Error", ex);
    		}
    	}
    }
    J'ai donc deux erreurs (ligne 18 & ligne 25) et je n'arrive pas à les résoudre !

    Merci d'avance pour votre aide !

  2. #2
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Bonjour,
    Essayes de retourner ta connexion ave cette fonction et de l'utiliser ensuite dans l'exécution de tes requêtes:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    private DbConnection _mSqlCnx;
    // Cette méthode créé une connexion à la BDD et la renvoit 
    public DbConnection GetSqlConnection()
    {
       DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); 
       if (_mSqlCnx == null)
       {
            _mSqlCnx = factory.CreateConnection();
       }
       _mSqlCnx.ConnectionString = "Ta chaine de connexion ..."; 
     
       if (_mSqlCnx.State == System.Data.ConnectionState.Closed)
       {
           _mSqlCnx.Open();
       }
      return _mSqlCnx; 
     }
    N'oubliez pas le tag et

  3. #3
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    Pour créer ton parametre utilises plutôt cmd.createparameter et pour le dbdataadapter, factory.CreateDataAdapter.

    Bon dév.
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai réussi pour le DataAdapter mais pas pour le paramètre.

    De plus lorsque je lance mon application, une erreur intervient : la propriété ConnectionString n'as pas été initialisée. (ligne 14)

    Que dois-je faire ?

    Merci d'avance !

  5. #5
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Peux-tu montrer ton code à l'état actuel ?
    N'oubliez pas le tag et

  6. #6
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class DataAccess
    {
    	public DataTable SetConnexion(string id)
    	{
    		DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
     
    		using(DbConnection conn = factory.CreateConnection())
    		{
    			try
    			{
    				DbConnectionStringBuilder sqlclient = factory.CreateConnectionStringBuilder();
     
    				conn.ConnectionString = sqlclient.ConnectionString;
    				conn.Open();
     
    				using(DbCommand cmd = conn.CreateCommande())
    				{
    					cmd.Parameters.Add(new DbParameter(":id", id));		 
    					cmd.CommandText = "select * where id = :id";	
    				}
     
    				using(DataTable dt = new DataTable())
    				{
    					DbDataAdapter da = factory.CreateDataAdapter();						cmd.CommandType = CommandType.Text;
    					da.Fill(dt);
    					return dt;
    				}
    			}
    		}
    		catch(Exception ex)
    		{
    			throw new Excepton("Error", ex);
    		}
    	}
    }
    Lorsque j'utilise F11 pour le pas à pas détaillé, je passe de conn.Open() a catch(Exception ex). Avec le message d'erreur : la propriété ConnectionString n'as pas été initialisée.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Au fait, il n'y a personne qui a pensé à te demander, et je n'ai pas trouvé l'info sur ce fil: de quel type est ta base de données? SQL Server? SQL Server Express? SQL server compact? Dans tous les cas, il faut renseigner ta chaîne de connexion avec des infos concernant la localisation de ta base de données. Cela peut se faire en renseignant les propriétés de ton objet de type "DbConnectionStringBuilder", juste avant que tu initialises "conn.ConnectionString".

    D'autre part, pour ton objet de type DbParameter, il faut, comme te l'as expliqué sisqo60, que tu fasses "cmd.createparameter". Pour cela, stock-le dans une variable, puis initialises les propriétés critiques, telles que "ParameterName" ou encore "Value".

    Exemple avec une base de données SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    using(DbCommand cmd = conn.CreateCommand())
    {
        DbParameter monParametre=cmd.CreatePameter();
        monParametre.ParameterName=":id";
        monParametre.Value=id;
        cmd.Parameters.Add(monParametre);
        cmd.CommandText = "select * where id = :id";
    }
    Les classes tels que "DbParameter" ou encore "DbConnection" sont des classes abstraites. J'oses espérer que tu as un minimum de connaissance ne serait-ce qu'en programmation orientée objet, sinon il faut que tu te formes sur tous ces concepts. Si ce n'est pas le cas, cherches sur "développez.net" des ressources dessus.

    N'hésites pas à faire "F1" sur les classes telles que DbParameter, DbConnection, etc... cela va t'afficher directement les pages MSDN

    Exemple: aide sur "DbConnectionStringBuilder" ici. Tu y trouveras même un exemple de chaîne de connexion.

    Il y a aussi un site intéressant sur les différentes chaînes de connexion ici.

  8. #8
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci pour l'aide sur le paramètre!

    Cependant pour mon erreur j'ai encore le même soucis!

    J'ai renseigné ma chaine de connexion dans mon app.config grâce à l'assistant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <add name="SqlClient Data Provider" 
               invariant="System.Data.SqlClient" 
               description=".Net Framework Data Provider for SqlServer" 
               type="System.Data.SqlClient.SqlClientFactory, System.Data, 
                 Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    Voilà, de l'aide serait vraiment la bienvenue!

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    En fait, il y a 2 problèmes dans ton code:
    1) Dans ton "app.config", tu as remplis toutes les informations qu'il fallait sauf la plus importante: la chaine de connexion. Ce que tu as renseigné n'est pas la chaine de connexion à proprement parler mais les infos de connexion de ta base. Dedans, il y a une section "ConnectionString" qu'il te faut renseigner, et cela inclut notamment l'emplacement de ta base de données, le programme ne peut pas deviner ça tout seul. C'est pour ça d'ailleurs que je t'ai demandé quel est le type de ta base de données. Il faut vraiment que tu regardes les liens que je t'ai passé.
    2) Ton programme ne fait pas référence à la chaîne de connexion de ton "app.config".

    Si tu fais une recherche par mot-clé sur Google, tu peux trouver sur MSDN des exemples d'utilisation de chaîne de connexion. Regarde ici par exemple.

    Une fois que tu auras renseigné complètement ta chaîne de connexion de ton app.config, tu pourras la récupérer comme cela par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Look for the name in the connectionStrings section.
    ConnectionStringSettings settings =
    ConfigurationManager.ConnectionStrings[name];
     
    string maChaineDeConnexion;
    // If found, return the connection string.
    if (settings != null)
        maChaineDeConnexion = settings.ConnectionString;
    exemple tiré de l'hyperlien que je t'ai passé.

    Pour trouver la classe "ConfigurationManager", il te faudra ajouter une référence à l'assemblage "System.Configuration".

    Une doc c'est fait pour s'instruire, il ne faut pas hésiter à la regarder. Si tu veux progresser, il ne faut pas que tu attendes qu'on te mâche tout le travail. Je t'ai déjà donné toutes les grandes lignes directrices à regarder pour résoudre ton problème.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Il te manque toujours les infos pour la connection à ta Bdd.
    Le nom du serveur, le nom de ta Bdd et les paramètres de connexion.
    Ex :
    Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;
    Password=myPassword;
    Edit : Merci Ph_Gr ! J'avais pas le courage de rentrer autant dans les détails

  11. #11
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai rajouté la ligne suivante dans app.config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connectionString="Data Source=mabase;User ID=test;Password=test;Unicode=True"
    De plus malgré les system.configuration je ne peut implémenter ton code...

  12. #12
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    je me permet de relancer le sujet car je suis encore bloqué.

    J'ai trouvé une alternative mais je n'arrive toujours pas à récupérer ma chaine de connexion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                        DbConnectionStringBuilder csb = factory.CreateConnectionStringBuilder();
                        csb["Data Source"] = @"test";
                        csb["User Id"] = @"test1";
                        csb["Password"] = @"test1";
    J'ai bien référencé system.configuration mais je n'ai pas accès a ConnectionStringSettings...

    Merci d'avance !

  13. #13
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par SQLClient Voir le message
    J'ai trouvé une alternative mais je n'arrive toujours pas à récupérer ma chaine de connexion.
    Quelle est cette alternative?

    Citation Envoyé par SQLClient Voir le message
    J'ai bien référencé system.configuration mais je n'ai pas accès a ConnectionStringSettings...
    As-tu :
    - bien ajouté la référence en faisant clic droit sur Références puis Ajouter une référence ?
    - utiliser un
    using System.Configuration;
    ?
    N'oubliez pas le tag et

  14. #14
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai supprimé et rajouté une référence à System.configuration et maintenant j'ai accès.

    Voilàa mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                        ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings[name];
                        string cs;
     
                        if (settings != null)
                            cs = settings.ConnectionString;
     
                        DbConnectionStringBuilder csb = factory.CreateConnectionStringBuilder();
     
                        conn.ConnectionString = csb.ConnectionString;
                        conn.Open();
    Mais je ne comprend pas ce que je doit changer...

  15. #15
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Pourrais-tu nous montre le contenu de ton fichier App.conf ?
    N'oubliez pas le tag et

  16. #16
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        <connectionStrings>
            <add name="SQLServer BDD"
                connectionString="Data Source=SQLServer;User ID=echo;Password=echo;Unicode=True"
                providerName="System.Data.SQLClient" />
        </connectionStrings>
    Voila le contenu de mon app.config

  17. #17
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    using System.Configuration;
    using System.Data.Common;
     
    //.....
     
    private DbConnection _mSqlCnx;
    private ConnectionStringSettings m_CnxStringSettings; 
     
    public ConnectionStringSettings CnxStringSettings
    {
        get { return m_CnxStringSettings; } 
        set { m_CnxStringSettings = value; }
    }
     
    public DataTable SetConnexion() 
    {
       DbProviderFactory factory = DbProviderFactories.GetFactory(CnxStringSettings.ProviderName); 
       if (_mSqlCnx == null)
       {
            _mSqlCnx = factory.CreateConnection();
       }
       _mSqlCnx.ConnectionString = CnxStringSettings.ConnectionString; 
     
       if (_mSqlCnx.State == System.Data.ConnectionState.Closed)
       {
           _mSqlCnx.Open();
       }
      // ... suite de ton traitement ...
     }
    N'oubliez pas le tag et

  18. #18
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai utilisé ton code et une exception est levé ligne 17 : La référence d'objet n'est pas définie à une instance d'un objet.

    Merci encore

  19. #19
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    ouf! autant pour moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
    // ...
    _mSqlCnx.ConnectionString = ConfigurationManager.ConnectionStrings["SQLServer BDD"].ToString();
    Donc plus besoin de cette partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private ConnectionStringSettings m_CnxStringSettings; 
    public ConnectionStringSettings CnxStringSettings
    {
        get { return m_CnxStringSettings; } 
        set { m_CnxStringSettings = value; }
    }
    N'oubliez pas le tag et

  20. #20
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Encore et toujours la même erreur, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
            private DbConnection conn;
     
            public DataTable GetData(string id)
            {
                DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SQLClient");
     
                if (conn == null)
                {
                    conn = factory.CreateConnection();
                }
     
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["SQLServer BDD"].ToString();
     
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }

Discussions similaires

  1. [C#][Access] problème avec System.Data.Odbc
    Par l_cauchy dans le forum C#
    Réponses: 1
    Dernier message: 28/10/2009, 14h18
  2. Votre avis : ActiveX Data Object ou Data Access Object ?
    Par jfdmagic dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 21/04/2009, 09h36
  3. Réponses: 2
    Dernier message: 10/04/2008, 12h07
  4. Réponses: 4
    Dernier message: 22/05/2006, 11h46
  5. [Data Access Object]Intérêt de la factory ?
    Par le Daoud dans le forum Général Java
    Réponses: 2
    Dernier message: 21/04/2005, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo