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

Services Web Discussion :

query sql avec paramètres


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Par défaut query sql avec paramètres
    Bonjour à tous,

    Je suis vraiment bloqué sur une query sql avec paramètres.

    Je cherche a voir le résultat de la query complétée avant son exécution pour la debugger car la methode ExecuteNonQuery() me renvoi une erreur:
    Oracle.DataAccess.Client.OracleException: ORA-00911: Caractère non valide


    je cherche à exécuter une query du type:
    INSERT INTO TEST6( DATE_IMPORT, PERIOD_ID, ID, NAME, ROLE ) VALUES ( TO_TIMESTAMP('25/11/2008 16:09:49','DD/MM/YYYY HH24:MI:SS') , 'Q3' , ? , ? , ? )

    pour cela :
    OracleCommand commandInsert = connection.CreateCommand();
    commandInsert.CommandType = CommandType.Text;
    commandInsert.CommandText = sb.ToString();

    et je complète les Parameter en simplifiant
    commandInsert.Parameters.Add(name,oracledbtype)
    commandInsert.Parameters[0] = (castTypeDbValideC#) "VariableVoulue"

    en mode debug les paramètre semble être bien du bon type et avec la bonne donnée?

    Est-ce que qqun à une idée? ou peu-être un update() sur la command SQL

    Merci

    Adrien

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Par défaut
    Vérifie bien ton insert via sql plus en ajoutant des données "en dures".
    Si tu es est alors sur que ce n'est pas ta requête qui pose problème,
    essaie en passant les mêmes paramètres dans tes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commandInsert.Parameters[0]
    Sinon montre nous plus de code.

    Une question au passage, ta CommandText semble être un stringbuilder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commandInsert.CommandText = sb.ToString();
    pourquoi un stringbuilder alors que tu passes des paramètres ?

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Par défaut voici le code
    sb est bien une StringBuilder qui crée la requêtre insert:
    si je l'utilise c'est que c'est plus performant et la table est dynamique et contient des paramètres variable, pour faire un mini ETL.

    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
     
     
    StringBuilder sb = new StringBuilder();
            sb.Append("INSERT INTO " + tableName+ "( DATE_IMPORT, PERIOD_ID");  
            for (int i = 0; i < columnName.Length; i++)
            {
                //don't take into account that column
                if (columnName[i] == null) continue;
                sb.Append( ", "+ columnName[i]);
            }
            /*ADD the parameter "?" */
            sb.Append(" ) VALUES ( TO_TIMESTAMP(\'" + dateImport.ToString() + "\','DD/MM/YYYY HH24:MI:SS') , \'" + periodId + "\'");
            for (int i = 0; i < numberColumn; i++)
            {
                //the ? is a parameter completed later
                sb.Append(" , ?");
            }
            sb.Append(" )");
    je boucle sur un DataSet data
    pour trouver le type équivalent OracleDbType j'utilise une sorte de HashMap

    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
     
     DataRowCollection row = data.Tables[0].Rows;
            for (int i = 0; i < data.Tables[0].Rows.Count - 1; i++)
            {
                commandInsert = connection.CreateCommand();
                commandInsert.CommandType = CommandType.Text;
                commandInsert.CommandText = @sb.ToString();
                OracleParameter[] parameter= new OracleParameter[numberColumnDataSet];
                for(int j = 0 ; j< numberColumnDataSet; j++){
                    parameter[j] = new OracleParameter(columnNameDataSet[j], oracleTypeMap[columnTypeDataSet[j]], row[i][j], ParameterDirection.Input);
                    commandInsert.Parameters.Add(parameter[j]);
     
                }
     
                commandInsert.Prepare();
                commandInsert.ExecuteNonQuery();
            }

    N'y a t-il pas moyen de rendre l'exception plus verbeuse?
    ou une commande pour voir le code sql executé réellement?

    En tout cas merci

  4. #4
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Par défaut ?
    Personne n'a d'idée?

    N'y a t-il pas moyen de rendre l'exception plus verbeuse?
    ou une commande pour voir le code sql executé réellement?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Par défaut
    Comme tes requêtes sont générées, es tu sûr déjà qu'elles sont bien valides dans sql plus ???.
    Tu peux tracer tes requêtes et leur params en ajoutant des
    System.Diagnostics.Debug.WriteLine(...,..)
    Ce sera plus pratique que le débugueur.

    Sur oracle , dans les tables sytèmes il est possible de voir ces infos en fonction de ta session, mais j'avoue que je n'ai plus la méthodologie en tête.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Par défaut
    mess requêtes INSERT sont correct.
    J'ai remplacé les ? par mes valeurs en ajoutant les \' pour les String,....

    j'ai aussi ajouter mes paramètres manuellement avec toujours la même erreur.
    rmq: pour les String j'ai aussi testé sans les \' et @
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    OracleParameter[] parameter= new OracleParameter[numberColumnDataSet];
                parameter[0] = new OracleParameter("ID", OracleDbType.Int32,(Int32) 1, ParameterDirection.Input);
                parameter[1] = new OracleParameter("@NAME", OracleDbType.Varchar2, (String) "\'adrien\'" , ParameterDirection.Input);
                parameter[2] = new OracleParameter("@ROLE", OracleDbType.Varchar2, (String)"\'employee\'", ParameterDirection.Input);
                commandInsert.Parameters.Add(parameter[0]);
                commandInsert.Parameters.Add(parameter[1]);
                commandInsert.Parameters.Add(parameter[2]);
    Où est-ce que je peux aller lire le résultat de System.Diagnostics.Debug.WriteLine(...,..)?


    Merci

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

Discussions similaires

  1. query sql avec paramètres
    Par adrione dans le forum Accès aux données
    Réponses: 2
    Dernier message: 26/11/2008, 11h50
  2. Requète SQL avec paramètres
    Par Stouille89 dans le forum C++Builder
    Réponses: 6
    Dernier message: 08/01/2008, 07h54
  3. Requête SQL avec paramètre sur BDD Access
    Par BigMike dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/06/2007, 12h21
  4. Query SQL avec Like
    Par thierry007 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 02/04/2007, 18h28
  5. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33

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