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

Windows Forms Discussion :

[C# 2.0] Probleme avec requete SQL


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut [C# 2.0] Probleme avec requete SQL
    Bonjour !

    J'ai un léger problème avec une requête SQL, et j'y comprends rien !
    Voila, j'ai une méthode qui me renvoit une ArrayList d'identifiants d'une table.
    La requête SQL peut conporter des conditions (clause WHERE), donc je construits la clause selon les conditions.... Mais voila. Je ne comprends pas pourquoi, mais il semblerait qu'un caractère se mette à la fin de ma requête, sans que je sache d'où il vienne. Et ce fichu caractère fait tout planté car a cause de lui, la requête n'est pas validée par MySQL.

    voici le code de construction de la requete :
    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
    string sql = "SELECT id FROM table";
    string thewhere = "";
     
    if (condition1 != "")
    {
    	if (thewhere != "")
    	{
    		thewhere += " AND champ1 = '" + condition1 + "'";
    	}
    	else
    	{
    		thewhere = " WHERE champ1 = '" + condition1 + "'";
    	}
    }
     
    if (condition2 > 0)
    {
    	chonFiche theChon = new chonFiche(ExceptOf);
    	if (thewhere != "")
    	{
    		thewhere += " AND id <> '" + condition2 + "'";
    		thewhere += " AND (date IS NULL OR";
    		thewhere += " date < DATE_FORMAT('" + uneDate + "', '%Y-%m-%d')";
    	}
    	else
    	{
    		thewhere += " WHERE id <> '" + condition2 + "'";
    		thewhere += " AND (date IS NULL OR";
    		thewhere += " date < DATE_FORMAT('" + uneDate + "', '%Y-%m-%d')";
    	}
     
    }
    Ensuite je concatène le where au reste de la requete avec

    sql += thewhere;

    Et quand je lance le déboggueur (je travaille sous SharpDevelop), dans les variables locales, je vois la requete qui semble correcte MAIS avec un petit carré a la fin de la requete, qui ne devrait pas être là !

    l'erreur renvoyé par l'exception est "syntaxe incorrecte pret de '' ligne 1"...

    si la requete n'a pas de condition, tout semble bien se passer, et je n'ai ni erreur ni caractère étrangé.... Mais si il y en a une... tout foire ;(

    Auriez-vous une idée ?

    merci d'avance !

    [EDIT]
    en fait, pour plus de précision, avec la première condition tout se passe bien, mais c'est avec la seconde que tout bascule

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    pourquoi tu ne passe pas par une procedure stoquée ??
    un truc du genre
    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
     
     
    private const string _SELECT = "SP_select_all " // nom de la proc
     
    public void marequete
    {
    try
    {
    	DataTable dt =new DataTable();
    	sqlConnection.Open();
    	SqlCommand sqlCmd;
    	sqlCmd = new Command(_SELECT, sqlConnection);
    	sqlCmd.Parameters.Add(new SqlParameter("@champ1 ", condition1));
    //autant de fois que necessaire 
    	sqlCmd.CommandType = CommandType.StoredProcedure;
    	SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCmd);
    	sqlAdapter.Fill(dt);
    }
    catch(Exception err)
    {
    }
    finally
    {
    sqlConnection.Close();
    }
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    hum.... Je bosse avec MySQL...
    Je n'ai encore jamais fait de Procédures stockées avec MySQL :o

    je vous mets le code de ma methode:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    private static ArrayList getDatas(int condition1, string condition2)
    {
    	ArrayList listIds = new ArrayList();
     
    	try
    	{
    		MySqlConnection myCon = new MySqlConnection();
    		MySqlCommand myCmd = new MySqlCommand();
    		MySqlDataReader myReader = null;
     
    		string conStr = "server=host;user id=user; password=pass; database=bdd; pooling=false";
    		string sql = "SELECT id FROM table";
    		string thewhere = "";
    		condition2 = condition2.Trim();
     
    		if (condition2 != "")
    		{
    			if (thewhere != "")
    			{
    				thewhere += " AND champ1 = '" + condition2 + "'";
    			}
    			else
    			{
    				thewhere = " WHERE champ1 = '" + condition2 + "'";
    			}
    		}
     
    		if (condition1 > 0)
    		{
    			if (thewhere != "")
    			{
    				thewhere += " AND id <> '" + condition1 + "'";
    				thewhere += " AND (date IS NULL OR";
    				thewhere += " date < DATE_FORMAT('" + uneDate + "', '%Y-%m-%d')";
    			}
    			else
    			{
    				thewhere += " WHERE id <> '" + condition1 + "'";
    				thewhere += " AND (date IS NULL OR";
    				thewhere += " date < DATE_FORMAT('" + uneDate + "', '%Y-%m-%d')";
    			}
     
    		}
    		sql += thewhere;
     
    		myCon.ConnectionString = conStr;
    		myCon.Open();
     
    		myCmd.CommandText = sql;
    		myCmd.Connection = myCon;
    		myReader = myCmd.ExecuteReader();
    		while(myReader.Read())
    		{
    			listIds.Add(int.Parse(myReader.GetValue(0).ToString())));
    		}
    		myReader.Close();
    		myReader = null;
    		myCon.Close();
    		myCon = null;
    	}
    	catch(MySqlException ex)
    	{
    		MessageBox.Show(ex.ToString());
    	}
     
    	return listIds;
    }
    voila...
    maintenant, je débute en C# donc je ne procède probablement pas de la meilleure façon

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    un petit truc que je viens de remarquer au déboggage pas a pas... lorsque j'arrive à la dernière ligne de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		if (condition1 > 0)
    		{
    			if (thewhere != "")
    			{
    				thewhere += " AND id <> '" + condition1 + "'";
    				thewhere += " AND (date IS NULL OR";
    je vois dans les variables locales que thewhere vaut
    "SELECT id FROM table WHERE champ1 = 'condition1' AND id <> 'condition2' AND (date IS NULL OR"
    et après le R du OR, un caractère est ajouté de facon aléatoire.... (sur mes tests j'ai eu une fois un D, une fois un 8...

    Je sais plus quoi faire la ^^'
    j'ai voulu essayer d'utiliser MySqlCommand.Parameters.Add(), mais je comprends pas comment je peux dire avec ca que je veux une date null ou une date postérieure à une autre :S

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    j'ai trouvé l'erreur, en fait c'est tout con, il manquait juste une paranthese fermante a la fin de la requete ^^'

    Merci quand meme

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

Discussions similaires

  1. Probleme avec Requete SQL
    Par mfofana dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/04/2014, 21h23
  2. [MySQL] probleme avec requete SQL
    Par hi-wave dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 01/03/2012, 21h03
  3. probleme avec requete SQL dans code VB6
    Par captainamerica75 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/05/2007, 21h36
  4. Réponses: 3
    Dernier message: 18/09/2006, 20h55
  5. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2004, 14h45

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