Page 1 of 1
Альтернативы DatabaseLayer?
Posted: Thu Apr 19, 2012 2:54 am
by alex_rain
Есть ли альтернативы DatabaseLayer с поддержкой баз данных MySQL и MS SQL Server (ODBC или напрямую). Хотелось бы также полноценную поддержку хранимых процедур.
Code::Blocks svn 7789, wxPack 2.8.12.01, TDM MinGW GCC 4.4.1, DatabaseLayer 1.8
Re: Альтернативы DatabaseLayer?
Posted: Thu Apr 19, 2012 11:03 am
by borr_1
http://debea.net/trac/wiki/WxDba
полноценную поддержку хранимых процедур
это вообще что-то не понятное, какие-то проблемы с Execute ХП или SELECT FROM ХП?
Re: Альтернативы DatabaseLayer?
Posted: Thu Apr 19, 2012 12:47 pm
by Mojo
Для Firebird я использовал IBPP -
http://www.ibpp.org/
Могу предположить, что для PostgreSQL и MySQL есть так же свои С++ клиентские-библиотеки
Re: Альтернативы DatabaseLayer?
Posted: Thu Apr 19, 2012 12:50 pm
by Mojo
Есть еще SOCI
http://soci.sourceforge.net/ но этого фрукта я не использовал, поэтому не могу сказать, что он из себя представляет.
Re: Альтернативы DatabaseLayer?
Posted: Fri Apr 20, 2012 12:47 am
by alex_rain
это вообще что-то не понятное, какие-то проблемы с Execute ХП или SELECT FROM ХП?
Требуется поддержка параметров INPUT, OUTPUT и INPUT_OUTPUT.
Например SOCI, как я понял, не поддерживает ХП в ODBC (
http://soci.sourceforge.net/doc/backends/index.html).
У DatabaseLayer вроде бы поддержка параметров ХП есть (по крайней мере в исходниках встречается SQLBindParameter). Правда пока не понял как использовать.
Code::Blocks svn 7932, wxPack 2.8.12.01, TDM MinGW GCC 4.4.1, DatabaseLayer 1.8
Re: Альтернативы DatabaseLayer?
Posted: Fri Apr 20, 2012 5:27 am
by borr_1
Ни одна либа отдельно параметры ХП не держит ей это не нужно ибо параметры к ХП задаются в самом запросе типа
EXECUTE MYSP (par1, par2) или EXECUTE PROCEDURE MYSP (par1, par2) - это если ничего не нужно возвращать из ХП
и
SELECT * FROM MYSP(par1, par2) - ели ХП что-то возвращает
Ты ж почему-то про параметры от SELECT не спрашиваешь.
В зависимости от SQL сервера синтаксис может меняться
Re: Альтернативы DatabaseLayer?
Posted: Fri Apr 20, 2012 6:22 am
by alex_rain
SELECT * FROM MYSP(par1, par2) - ели ХП что-то возвращает
Для MySQL это сработает, а для MS SQL нет.
Например в OTL можно работать непосредственно с параметрами (
http://otl.sourceforge.net/otl3_ex24.htm).
Code::Blocks svn 7932, wxPack 2.8.12.01, TDM MinGW GCC 4.4.1, DatabaseLayer 1.8
Re: Альтернативы DatabaseLayer?
Posted: Fri Apr 20, 2012 6:33 am
by borr_1
А ты OPENROWSET и OPENQUERY для MS пробовал?
Code: Select all
otl_stream o(1, // buffer size should be equal to 1 in case of stored procedure call
"{call my_proc("
" :A<int,inout>, "//запросы с параметрами есть и в wxDbe и в databaselayer при чем тут ХП вообще
" :B<char[31],out>, "
" :C<char[31],in> "
")}",
// stored procedure call
db // connect object
);
Почему тогда не используешь OTL в связке с wx?
Re: Альтернативы DatabaseLayer?
Posted: Fri Apr 20, 2012 6:51 am
by alex_rain
А ты OPENROWSET и OPENQUERY для MS пробовал?
Не пробовал. Примером поделишься?
Code::Blocks svn 7932, wxPack 2.8.12.01, TDM MinGW GCC 4.4.1, DatabaseLayer 1.8
Re: Альтернативы DatabaseLayer?
Posted: Fri Apr 20, 2012 6:58 am
by borr_1
Code: Select all
SELECT *
INTO #tmp FROM
OPENQUERY(YOURSERVERNAME, 'EXEC MyProc @parameters')
или
SELECT * FROM OPENROWSET('SQLNCLI', 'connection string', 'name of sp')
повторю
У тебя вопрос про параметризованный запрос или про ХП? Почему не используешь OTL?
Re: Альтернативы DatabaseLayer?
Posted: Fri Apr 20, 2012 7:22 am
by alex_rain
повторю
У тебя вопрос про параметризованный запрос или про ХП?
Для непонятливых:
Требуется поддержка параметров INPUT, OUTPUT и INPUT_OUTPUT.
Вопрос про использование входных, выходных, входных-выходных параметров ХП.
А за пример спасибо.
Почему не используешь OTL?
И правильно. Зачем тогда DatabaseLayer и wxDba, если можно юзать OTL.
И вдогонку: DatabaseLayer запрос через MySQL API выполняет в 2-5 раз медленнее, чем через ODBC (вроде должно быть наоборот).
Реальную альтернативу замороженному проекту нашли, можно тему закрывать.
Code::Blocks svn 7932, wxPack 2.8.12.01, TDM MinGW GCC 4.4.1