2015-08-01 1 views
1

Je n'arrive pas à trouver la moindre solution à ce problème. J'utilise cette fonction générique pour extraire des données d'une base de données comme ceci: int id = 29 ArrayList^ classes = getClassesGeneric("dep_id", "=", id.ToString());La requête paramétrée ne renvoie aucun résultat à l'aide de C++ .Net MySQL Connector

Cependant, cela ne donne aucun résultat. Si j'interroge la base de données via MySQL Workbench ou sans paramètres, cela fonctionne très bien. Qu'est-ce que je rate?

ArrayList^ Accessor::getClassesGeneric(String^ col, String^ op, String^ value) 
    { 
      ArrayList^ result = gcnew ArrayList(); 
      this->cmd = gcnew MySqlCommand("SELECT * FROM rpos_db.classes WHERE @col @op @value;", this->con); 
      try 
      { 
       this->cmd->Parameters->AddWithValue("@col", col); 
       this->cmd->Parameters->AddWithValue("@op", op); 
       this->cmd->Parameters->AddWithValue("@value", value); 
       this->cmd->Prepare(); 
       MySqlDataReader^ r = this->cmd->ExecuteReader(); 

       while (r->Read()) 
       { 
        Class^ c = gcnew Class(); 

        c->id = r->GetInt32(0); 
        c->dep_id = r->GetInt32(1); 
        c->name = r->GetString(2); 
        c->code = r->GetString(3); 

        result->Add(c); 
       } 
       r->Close(); 
      } 
      catch (Exception^ ex) 
      { 
       MessageBox::Show(ex->StackTrace, ex->Message); 
      } 
      return result; 
    } 

En utilisant la fonction comme ceci produit le résultat échancré: classes = getClassesGeneric("1", "=", "1");

Répondre

0

Les paramètres ne peuvent être utilisés pour remplacer les noms littéraux, objet ou non des éléments syntaxiques, tels que l'opérateur =. Vous devrez soit le coder en dur. Si vous voulez les transmettre dynamiquement, vous devrez utiliser la manipulation de chaînes:

ArrayList^ Accessor::getClassesGeneric(String^ col, String^ op, String^ value) 
{ 
     ArrayList^ result = gcnew ArrayList(); 
     this->cmd = gcnew MySqlCommand 
        ("SELECT * FROM rpos_db.classes WHERE " + 
        col + " " + op + " @value;", this->con); 
     try 
     { 
      this->cmd->Parameters->AddWithValue("@value", value); 
      this->cmd->Prepare(); 
      MySqlDataReader^ r = this->cmd->ExecuteReader(); 
+0

Je vois ce que vous dites, mais comment cela fonctionne-t-il de cette façon? 'getClassesGeneric (" 1 "," = "," 1 ");' –

+0

cela a résolu mon problème cependant. Merci! –