Chcę zmodyfikować wywołania ODBC bezpośrednio przed naciśnięciem stosu ODBC lub między stosem ODBC a sterownikiem dll dla połączenia, którego używam. Na przykład, jeśli aplikacja wykonuje polecenie SELECT, chcę go zmodyfikować na SELECT_ALL. Jak mogę to zrobić?Jak mogę przechwytywać/przepisywać połączenia ODBC systemu Windows?
Odpowiedz
Informacje o konfiguracji ODBC wskazują na DLL sterownika. Można go zastąpić własną biblioteką DLL z punktami wejścia ODBC. Po prostu spraw, aby wszystkie te, których nie obchodzi, były zwykłymi połączeniami z "prawdziwą" biblioteką DLL. Wykonanie i przygotowanie punktów początkowych może zmodyfikować podaną instrukcję przed przekazaniem jej do biblioteki DLL sterownika.
Na przykład, jeśli używasz DSN użytkownika, możesz zastąpić wartość w HKCU \ Software \ ODBC.ini \ datasourcename \ Driver własną biblioteką shim.
Po odrobinie wyszukiwania google nie znajduję oczywistego projektu pustej powłoki, który byłby idealnym punktem wyjścia. Numer API reference zawiera informacje o interfejsie API. Ogólnie rzecz biorąc, nie powinieneś naprawdę potrzebować tam informacji. Trzeba tylko przekazać parametry dla każdego interfejsu API do biblioteki DLL sterownika. Prototypy funkcji można wyodrębnić z sql.h
i sqlext.h
.
Alternatywną metodą, która może być łatwiejsza niż pisanie biblioteki shim DLL, jest podpięcie tylko funkcji wykonywania i przygotowania (prawdopodobnie tylko SQLExecDirect i SQLPrepare). This article to pierwsze trafienie, które zobaczyłem.
- 1. Skuteczny sposób testowania połączenia ODBC
- 2. Ciąg połączenia przy użyciu uwierzytelniania systemu Windows
- 3. Nodejs ODBC Connection na Windows
- 4. Jak uzyskać listę dostępnych tabel z połączenia ODBC?
- 5. Jak zapobiec uruchamianiu systemu Windows przy uruchamianiu systemu Windows?
- 6. Najprostszy sposób testowania ODBC na WIndows
- 7. Emulator systemu Windows Phone 7: Czy mogę zasymulować połączenie telefoniczne?
- 8. Jak mogę zainstalować sterownik systemu Windows, który nie dotyka sprzętu?
- 9. Jak mogę wyświetlić moją usługę systemu Windows na pasku zadań?
- 10. Jak mogę zmienić szerokość okna konsoli systemu Windows?
- 11. Jak mogę zmienić wyświetlaną nazwę wydawcy systemu Windows 8?
- 12. Programowo twórz połączenia ODBC i tabele linków w MS Access
- 13. Jak napisać aplikację systemu Windows?
- 14. Błąd połączenia Hortonworks Hive ODBC w programie Excel 2013
- 15. Jaka jest opcja = N w ciągu połączenia MySQL ODBC?
- 16. Czy mogę wykonywać asynchroniczne wywołania ODBC? Wszelkie materiały referencyjne?
- 17. Skalowanie usług systemu Windows
- 18. Jak połączyć się z serwerem SQL przez sqlalchemy przy użyciu uwierzytelniania systemu Windows?
- 19. Zapobieganie zamykaniu systemu Windows
- 20. Usługa wdrażania systemu Windows
- 21. Ręczne uwierzytelnianie systemu Windows
- 22. Sterowniki ODBC dla systemu Mac OS X 10.6
- 23. Usługa systemu Windows a aplikacja systemu Windows - najlepsza praktyka
- 24. C# Czytaj Windows Mobile Broadband właściwości połączenia
- 25. Odpowiednik polecenia systemu Windows egrep
- 26. Foldery instalacji systemu Windows
- 27. Systrace dla systemu Windows
- 28. odpowiednik systemu Windows inet_aton
- 29. Regex.h dla systemu Windows
Dzięki za radę, pomyślałem o tym. Próbowałem zrobić DLL C++, który przekazał wszystkie wyeksportowane metody, ale nie miał szczęścia, aby to zadziałało. Jakieś dobre słowa kluczowe do google? Dzięki jeszcze raz. – TwoBitsShort
@Christian: Upewnij się, że używasz 'extern" C "' w eksporcie, aby nazwy nie były zniekształcone. Możesz użyć 'dumpbin/exports' na DLL, aby upewnić się, że nie są one udekorowane. Pokłębię się trochę z Google i zobaczę, czy coś mogę znaleźć. Najlepiej byłoby uzyskać pustą powłokę, która ma zdefiniowane wszystkie funkcje punktu wejścia. ... Wygląda na to, że coś takiego powinno istnieć. –
@mark: Zeskanowałem za pomocą dumpbin, a następnie użyłem plików .def, aby zadeklarować wszystkie wyeksportowane funkcje. Główna rutyna wykonuje loadlibrary sterownika orig odbc i zmieniłem rejestr tak, aby wskazywało na moją bibliotekę shim. Próbowałem także podejścia pragma. Za każdym razem dostaję informację, że sterownik nie obsługuje metody SQLDirectConnectW. DirectConnectW nie znajduje się w tabeli eksportu i jest tylko wersją DirectConnect w standardzie Unicode. Jakieś pomysły? – TwoBitsShort