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

VB.NET Discussion :

Erreur Select Datatable


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut Erreur Select Datatable
    Bonjour à tous et à toutes,
    Je bute contre une erreur

    "Une exception non gérée du type 'System.Data.EvaluateException' s'est produite dans System.Data.dll

    Informations supplémentaires : Impossible d'effectuer une opération '<=' sur System.DateTime et System.Double."


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RequeteSql = "client='" & DicoClient.Keys(X) & "' AND [Date anomalie]>=" & DateDebut & " AND [Date anomalie]<=" & DateFin
     
                Dim Result() As DataRow = DtBase.Tables(0).Select(RequeteSql)
    valeur de RequeteSQL au moment du plantage :
    client='PEINTURES DU CENTRE' AND [Date anomalie]>=01/07/2016 AND [Date anomalie]<=30/06/2017

    JE bute dessus je vais regarder dans un datagridview les valeurs de la table ( il se peut que j'ai un couac vu que c'est un dataset généré par une fiche excel qui lui même est un export d'un logiciel, il se peut qu'il comprenne la date en version US ???).
    Merci

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    et avec des DbParameters bien typés ça ne fonctionne pas mieux ? (en plus d'être plus propre et plus sûr).

  3. #3
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Merci,
    Peux tu développer un peu je ne connais pas dbparameters ?
    Cdt

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Vu que tu mets des crochets pour tes noms de table je vais assumer que tu utilises Sql Server.

    Tout d'abord la fiche MSDN du SqlParameter (il y a des info, des exemples et plein de liens utiles).

    L'idée c'est d'utiliser des objets pour générer ta requête plutôt que faire une concaténation à la mano qui peut poser des soucis (injections SQL et erreurs de typage/formatage) et peut être plus difficile à maintenir.

    Voici un petit exemple avec une SqlConnection, une SqlCommand et un SqlDataReader (en C#, je sais pas faire le VB.NET) :

    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
    public void PrintSomeData(string cnxString, int iVal, string strVal, DateTime dtVal) {
    	// on ouvre une connexion en se servant du 'using' qui se charge des closes/dispose
    	using (SqlConnection cnx = new SqlConnection(cnxString)) {
    		// une command pour construire notre requête
    		SqlCommand cmd = new SqlCommand("SELECT someField_1, someField_2 FROM someTable"
    			+ " WHERE someIntegerField = @iField"
    			+ " AND someStringField = @strField"
    			+ " AND someDatetimeField = @dtField", cnx);
    		// on y colle nos paramètres typés, directement valorisés
    		cmd.Parameters.Add("@iField", SqlDbType.Int).Value = iVal;
    		cmd.Parameters.Add("@strField", SqlDbType.VarChar).Value = strVal;
    		cmd.Parameters.Add("@dtField", SqlDbType.VarChar).Value = dtVal;
    		// on utilise un reader pour avoir les données sous forme de flux, et pas un gros paquet en mémoire
    		SqlDataReader rdr = cmd.ExecuteReader();
    		// tant que le reader nous renvoie des tuples
    		while (rdr.Read()) {
    			// on affiche ce qu'on trouve histoire de dire qu'on a pas requêter pour rien
    			Console.Write("> " + rdr["someField_1"].ToString() + " / " + rdr["someField_2"].ToString() + "\r\n");
    		}
    		// on pense bien à fermer le reader
    		rdr.Close();
    	}
    }
    Si t'as du mal à traduire en VB.NET, tu peux voir les exemples de code sur la MSDN.

    Bon dev.

  5. #5
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Merci de ta réponse,
    Je pense que si je fais des commandes SQL j'aurai un résultat mais il sera abracadabrant.
    Je m'explique, je viens de vérifier les données dans un datagridview.
    Mes dates sont au format Européennes du coup par exemple il doit mal comprendre une date tel que le 30/01/2014 par exemple il essai de comprendre la version US 01/30/2014 ( vu qu'on est en VB.net) et c'est une date impossible du coup il plante en pensant que c'est une valeur numérique.
    Enfin je crois.

    Si je fais tout en requeteSQL avec des command je vais avoir effectivement un resultat en retour mais les données ne seront pas exploitables.

    Table.select ressemble a du SQL en a l'odeur mais ça n'en est pas. ( la preuve je devrai en SQL ecrire un truc genre Between [colonne]<= 124 AND [colonne]>=105 )

    JE vais creuser de ce cote la
    Merci

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Si tu passes par des objets les locales sont, normalement, gérées automatiquement. Et comme tu sembles être situé en France ta locale doit être fr-FR. Pour la connaitre tu peux regarder la valeur que te renvoie CultureInfo.CurrentCulture.Name (dans System.Globalization). A noter que si ta date en entrée est d'abord une string tu peux lui donner un format lors du parse.

    Dans ta requête concaténée il pense que c'est un chiffre car il n'a aucune indication qu'il s'agit d'autre chose (pas de quote, ni d'appel à une fonction SQL, il tombe directement sur un chiffre). Tu dois pouvoir trouver des fonctions de parse dans SQL Server qui sauront transformer ta string en vraie date, par contre n'oublie pas les quotes ... et ça reste une concat' toute moche :p

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

Discussions similaires

  1. Erreur "SELECT INTO" dans une fonction
    Par mercure07 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 20/02/2009, 11h34
  2. Erreur SELECT INTO dans une procédure stockée
    Par mercure07 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/12/2008, 08h54
  3. erreur avec datatable
    Par samir dans le forum XMLRAD
    Réponses: 7
    Dernier message: 28/11/2006, 18h09
  4. erreur select case
    Par maximedrouet dans le forum ASP
    Réponses: 4
    Dernier message: 15/05/2006, 14h40
  5. erreur select case
    Par maximedrouet dans le forum ASP
    Réponses: 12
    Dernier message: 06/01/2005, 15h33

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