Параметризованный запрос не возвращает результатов с использованием C ++ .Net MySQL Connector

Я не могу найти решение этой проблемы самостоятельно. Я использую эту универсальную функцию для извлечения данных из базы данных следующим образом:

int id = 29
ArrayList^ classes = getClassesGeneric("dep_id", "=", id.ToString());

Однако это не дает никаких результатов. Если я запрашиваю базу данных через MySQL Workbench или без параметров, она работает нормально. Что мне не хватает?

    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;
}

Использование такой функции дает результат с отступом:
classes = getClassesGeneric("1", "=", "1");

1

Решение

Параметры могут использоваться только для замены литералов, а не имен объектов или синтаксических элементов, таких как = оператор. Вы должны либо жестко закодировать это. Если вы хотите передать их динамически, вам придется использовать строковые манипуляции:

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

Другие решения


По вопросам рекламы [email protected]