[VisualC++ CLI \ MySQL] Syntax error w zapytaniu, które zawiera USER VARIABLE.
Ostatnio zmodyfikowano 2016-03-24 07:55
SmthIsNoYes Temat założony przez niniejszego użytkownika |
[VisualC++ CLI \ MySQL] Syntax error w zapytaniu, które zawiera USER VARIABLE. » 2016-03-24 07:55:05 Witam, Mam tutaj dosyć irytujący problem z zapytaniem, które działa jak marzenie z poziomu MySQL Workbench, ale wywala błąd w trakcie działania programu. Workbench: select * from (select zid, szw1+szw2 as pkt, @rank:=@rank+1 as rank from zlecenie_pkt, (select @rank:=0) r order by pkt desc) a where zid=263;
C++ CLI: zapytanie = "select * from (select zid, szw1+szw2 as pkt, @rank:=@rank+1 as top from zlecenie_pkt, (select @rank:=0) r order by pkt desc) a where zid=" + m_zid + ";"; To samo tyczy się prodcedur MySQL. Działają bez problemu z poziomu Workbench, ale "call ranking();' już wywala syntax error w skompilowanym programie. Przeszukałem całe internety, znalazłem kilka popularnych rozwiązań ale żadne z nich się nie sprawdziło w moim przypadku. Dodam tylko, że połączenie do bazy nawiązuje z parametrem "Allow User Variables=True" więc teoretycznie, problem nie powinien w ogóle występować. /////////////////////////////////////////////// EDIT //////////////////////////////////////////// Udało mi się znaleźć rozwiązanie problemu - chodziło o zasięg zmiennej @rank, którą definiowałem wewnątrz mojego zapytania. Rozwiązaniem jest wywołanie cmd->ExecuteNonQuery() przed wywołaniem cmd->ExecuteReader(). Swoją drogą, jestem trochę zaskoczony tym rozwiązaniem bo byłem przekonany że ExecuteNonQuery stosuje się do poleceń jak INSERT albo UPDATE, które nie zwracają wyniku i nie przyszłoby mi do głowy żebym w ten sposób rozwiązać problem z zasięgiem. Tutaj oryginalne rozwiązanie problemu: If you want to be able to use variables, use one MySqlCommand object, and call ExecNonQuery() once.
Your best bet is to create a stored procedure. Perhaps it'll need 2 parameters for your "guid"/integer values.
The reason it works in SQLYog is that all those statements are running in the same context, rather than in different sessions. |
|
|
« 1 » |