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 :

ExecuteReader via OleDB ne marche pas pour une certaine requête


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut ExecuteReader via OleDB ne marche pas pour une certaine requête
    Bonjour à tous,
    Je suis en train de développer une page web en ASP.NET/C#.
    Pour résumer, j'ai un tableau listant un ensemble de fiches (le tableau est rempli en source de données via une base .accdb), après deux possibilités: créer ou modifier une fiche. Ayant fini la création avec l'envoi dans la base, je planche sur la modif.

    Afin de remplir toutes les "Textbox" et autres champs, voilà sur quoi je suis parti:
    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
     
    oConnection = new OleDbConnection();
    sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\[...].accdb;Persist Security Info=True";
    oConnection.ConnectionString = sConnectionString;
     
            // Ouverture
            [...]
     
            // Requête
            string sql = "SELECT NUMERO FROM matable1 WHERE CODE = '" + code + "'";
     
            try
            {
                OleDbCommand oledb_Command = new OleDbCommand(sql);
                oledb_Command.Connection = oConnection;
                oledb_Command.CommandText = sql;
     
                OleDbDataReader dr = oledb_Command.ExecuteReader();
     
                while (dr.Read())
                {
                    TextBox_blabla.Text = dr["NUMERO"].ToString();                 
                }
            }
            catch(Exception ex)
            {
                Response.Write("<script>alert('Sql failure')</script>");
                Label_error.Text = ex.ToString();
            }
            // Fermeture
            [...]
    Et voilà l'erreur retournée:

    System.Data.OleDb.OleDbException: Type de données incompatible dans l'expression du critère. à System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) à System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) à System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) à System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) à System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) à System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) à System.Data.OleDb.OleDbCommand.ExecuteReader() à _Default.populateFieldsFromDB() dans c:\Users\Geoff\Documents\Visual Studio 2008\WebSites\CLEOR\Fiche_Integration_Modif.aspx.cs:ligne 83
    Mais le plus intrigant et ce que je ne comprend pas, c'est que j'utilise cette méthode pour remplir un champs dans un formulaire et que ça marche...

    voilà pour info:

    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
     
    oConnection = new OleDbConnection();
    sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Geoff\\Desktop\\CLEOR.accdb;Persist Security Info=True";
    oConnection.ConnectionString = sConnectionString;
     
            // Ouverture
            [...]
     
            // Requête
            string sql = "SELECT MAGASIN FROM matable2 WHERE CODE = '" + code + "'";
     
            try
            {
                OleDbCommand oledb_Command = new OleDbCommand(sql);
                oledb_Command.Connection = oConnection;
                oledb_Command.CommandText = sql;
     
                OleDbDataReader dr = oledb_Command.ExecuteReader();
     
                while (dr.Read())
                {
                    TextBox_identification_magasin.Text = dr["MAGASIN"].ToString();                
                }
            }
            catch
            {
                Response.Write("<script>alert('Sql failure')</script>");
            }
     
            // Fermeture
            [...]
            }
    Merci d'avance si vous pensez savoir ce qui pourrait ce passer!

    Cordialement

  2. #2
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    vérifier le type du champs code dans matable1 s'il n'est pas numérique
    faire un debug pour voir si la variable code est bien remplis avant la concaténation dans l'affectation de la variable sql

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Ma variable est correctement affectée, mais en effet "CODE" était en numérique, maintenant qu'il est en texte ça marche. Seulement dans tous mon formulaire, j'ai des "TEXTE", "NUMERIQUE", "OUI/NON" et "DATE HEURE", ce qui veut dire que ça ne marchera pas... Quelle est la solution pour y parvenir?

    Le but étant qu'au lieu de la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT NUMERO FROM matable1 WHERE CODE = '" + code + "'"
    ce soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable1 WHERE CODE = '" + code + "'"
    Cordialement

  4. #4
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    je n'ai pas bien compris ton problème

    si tu veut faire une condition sur un champs qui est numérique tu n'a pas besoin de changer le type de ce champs dans ta table, il te suffit de faire la concaténation qui suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT NUMERO FROM matable1 WHERE CODE = " + code
    sans les quotes, les cotes on les met avec des valeurs de type texte ou date, pour les autres on en a pas besoin

    il y a aussi une meilleure façon de faire en utilisant la collection Parameters de ton objet OleDbCommand renseigne toi sur son utilisation

    pour t'aider un très bon exemple ici

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/06/2007, 10h38
  2. FileGetAttr ne marche pas pour les dossiers ?
    Par WebPac dans le forum Delphi
    Réponses: 13
    Dernier message: 06/07/2006, 14h36
  3. Réponses: 7
    Dernier message: 16/05/2006, 19h12
  4. DATEDIFF() qui ne marche pas sur une version 5.0.xx
    Par vallica dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/05/2006, 17h44
  5. Redirection, ca ne marche pas depuis une page 404 ?
    Par TicTacToe dans le forum Langage
    Réponses: 16
    Dernier message: 02/03/2006, 10h54

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