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

ASP.NET Discussion :

Problème C# Npgsql [Débutant]


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Par défaut Problème C# Npgsql
    Bonjour à tous,

    J'ai un petit problème avec mon code C# utilisant du Npgsql. Je veux pouvoir faire une recherche à l'aide d'une variable qui sera fourni par un autre logiciel (Intuiface), le problème c'est que j'ai rien qui s'affiche dans ce dernier et je ne sais pas d'ou peut venir l'erreur en sachant que Visual Studio génère sans trouver d'erreur dans le code. 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public void search(string productName)
            {
                NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=openpg;Password=openpgpwd;Database=test;");
                conn.Open();
     
                NpgsqlCommand command = new NpgsqlCommand("SELECT * FROM product_product WHERE default_code = :productName;", conn);
                command.Parameters.Add(new NpgsqlParameter("productName", NpgsqlDbType.Text));
                command.Parameters[0].Value = productName;
     
                NpgsqlDataAdapter myDataAdapter = new NpgsqlDataAdapter();
                DataSet ds = new DataSet();
                myDataAdapter.InsertCommand = command;
                myDataAdapter.Fill(ds, "product_product");
     
                foreach (DataRow dr in ds.Tables["product_product"].Rows)
                {
                    MyData d = new MyData()
                    {
                        Id = dr[0].ToString(),
                        defaultCode = dr[9].ToString(),
                        nameTemplate = dr[10].ToString(),
                    };
                    MyDataList.Add(d);
                }
                conn.Close();
            }
    Je vous remercie par avance pour l'aide apportée,

    Alexandre.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Par défaut
    En me relisant je me suis rendu compte qu'il n'y a pas vraiment de question, je voudrais juste savoir si mon code va bien retourner le résultat attendu. Si d'après vous le code est bon c'est que le problème viendrait surement de Intuiface (le soft à qui est destiné ce code).

    C'est pour un projet de stage et la je commence à dangereusement me rapprocher de la date butoir et le Npgsql n'est vraiment pas simple a prendre en main...

    Je vous remercie pour votre aide,

    Alexandre

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Par défaut
    Bonjour,

    Est ce que cette version là fonctionne? Je ne connais pas bien les Adapter donc j'ai utilisé un DataReader qui est, je trouve, plus simple.

    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
     
            public void search(string productName)
            {
                using (NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=openpg;Password=openpgpwd;Database=test;"))
                {
                    conn.Open();
     
                    NpgsqlCommand command = new NpgsqlCommand("SELECT * FROM product_product WHERE default_code = :productName;", conn);
                    command.Parameters.Add(new NpgsqlParameter("productName", NpgsqlDbType.Text));
                    command.Parameters[0].Value = productName;
                    using (NpgsqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            MyDataList.Add(new MyData
                            {
                                Id = reader.GetString(0),
                                defaultCode = reader.GetString(9),
                                nameTemplate = reader.GetString(10)
                            });
                        }
                    }
                }
            }
    2, 3 remarques sur le code.
    Toujours utiliser un "using" la où c'est possible, il te permet d'être sur que ta connexion et ton reader soient bien Disposer même en cas d'exception.
    Si tu n'as besoin que de ces 3 champs de ta table SQL spécifient les dans ta query. Le "select * from" est a éviter autant que possible. Le query sera plus efficace et plus rapide car moins de données à récuper.

    J'espère t'avoir aidé.
    Max.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Par défaut
    Bonjour MxDeg et merci pour ta réponse,

    Malheureusement ça ne marche pas. Le myDataList est un ObservableCollection, je dois stocker les information de ma base dans un tableau pour pouvoir les faire afficher par Intuiface c'est pour cela que j'utilisais un Dataset et un DataAdapter car dans ma tête ça correspondait avec le fait de remplir un tableau (le DataSet est le tableau en question qui est rempli par le DataAdapter, enfin c'est comme ça que je les compris, j'en ai jamais fait avant).

    Merci aussi pour tes remarques à la fin du post même si le using je ne le comprends pas trop.

    Un autre exemple qui se trouve autre part dans mon code et qui fonctionne bien :

    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
     
    public void GenerateMockData()
            {
                NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=openpg;Password=openpgpwd;Database=test;");
                conn.Open();
     
                NpgsqlDataAdapter myDataAdapter = new NpgsqlDataAdapter("SELECT * FROM product_product;", conn);
                DataSet ds = new DataSet();
                myDataAdapter.Fill(ds, "product_product");
     
                foreach (DataRow dr in ds.Tables["product_product"].Rows)
                {
                    MyData d = new MyData()
                    {
                         Id = dr[0].ToString(),
                        defaultCode = dr[1].ToString(),
                        nameTemplate = dr[2].ToString(),
                        //listPrice = dr[3].ToString(),
                        //supplyMethod = dr[8].ToString(),
                        //image = dr [10].ToString()
                    };
                    MyDataList.Add(d);
                }
                conn.Close();
            }
    Ici tout fonctionne parfaitement, j'avais espéré faire à peu la même chose mais on dirait que ça coince au moment ou je veux faire entrer une variable de l'extérieur. La seule chose dans le code du dessus que je n'arrive pas à faire est d'afficher l'image, mais ça c'est une autre histoire...

    Avez vous d'autres idées à me proposer?

    Merci par avance pour l'aide apportée,
    Alexandre.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Par défaut
    Je vois déjà qu'il y a une différence au niveau de la récupération des données entre les 2 exemples.
    D'un coté il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    defaultCode = dr[1].ToString(),
    nameTemplate = dr[2].ToString(),
    et de l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    defaultCode = dr[9].ToString(),
    nameTemplate = dr[10].ToString(),
    Les indices des tableaux ne correspondent pas. As-tu essayé de déboguer ton code? Le paramètre de ton query est-il correct? Essaye d’exécuter le query avec le paramètre que tu reçois dans pgAdmin pour voir le résultat.
    Le fait que myDataList soit une IbservableCollection ne change rien au problème et n'empêche pas l'utilisation du DataReader.

    "using" est un mot-clé qui en gros va s'assurer que la méthode "Dispose" soit toujours appelée et dans le cas de connexion SQL le "Dispose" ferme la connexion. En gros il va entourer ton code avec un try {} catch {} finally {} et appeler le "Dispose" dans le finally.
    Je te conseille de te renseigner sur le pattern Disposable (interface IDisposable), c'est très intéressant. Ça permet de libérer proprement les ressources (managés ou non).

    Max.
    http://msdn.microsoft.com/fr-fr/libr...v=vs.110).aspx

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Par défaut
    Bonjour à tous,

    Dsl MxDeg pour le fouillis au niveau des noms de variables... En fait pour le moment j'utilise les même noms de variables pour des tables différentes, mes variables ont été créées automatiquement via l'Entity Framework, elles sont dans une classe et j'utilise les même pour l'instant car je n’exécute pas toutes les méthodes en même temps.

    Je vais faire ce que tu m'as recommander avec pgAdmin, c'est vrai que j'avais pas pensé à le faire pour voir si la méthode fonctionne bien (je ne l'ai jamais utilisé, je suis un utilisateur Linux d'habitude donc je testais les requêtes en ligne de commande...

    Merci pour le lien sur le "Dispose" je regarderai de quoi ça parle.

    Cordialement,
    Alexandre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Npgsql et EdmGen2 => problème génération EDMX
    Par takinelinfo dans le forum Accès aux données
    Réponses: 4
    Dernier message: 25/07/2011, 14h58
  2. Problème de transaction avec nPgSql
    Par GloRex dans le forum Accès aux données
    Réponses: 2
    Dernier message: 19/01/2011, 10h43
  3. Problème de paramétrage de SQL avec NpgSQL.
    Par Jean-Marc68 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/12/2007, 11h36
  4. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18

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