OdbcProxy
Petr Wiedemann, 10. květen 2015
OdbcProxy je program, který umožňuje přes HTTP protokol pracovat s ODBC nebo OLE DB zdroji v počítači, na kterém běží. Po spuštění naslouchá na portu 47115 a poskytuje metody pro otevření spojení, jeho uzavření, výběr a úpravu dat v použitém zdroji.
Program vznikl z důvodu odstranění podpory pro ODBC v Javě 8 a nemožnosti aktualizovat ovladače na používaném zdroji dat, které by umožnily komunikaci přímo přes JDBC. OdbcProxy vytváří webovou službu, přes kterou je možné pracovat s ODBC nebo OLE DB zdroji. Je možné jej nainstalovat i jako Windows službu a spouštět po startu serveru. OdbcProxy pro svůj běh potřebuje nainstalovaný Microsoft .NET 3.5.
Po spuštění jsou k dispozici následující URL:
- http://localhost:47115/odbcproxy/connect
- http://localhost:47115/odbcproxy/select
- http://localhost:47115/odbcproxy/execute
- http://localhost:47115/odbcproxy/close
Všechny adresy přijímají POST metodou XML data a XML data také vrací. HTTP klient musí poslat také hlavičku Content-Type: application/xml
Soubory ke stažení
- Program odbcproxy včetně zdrojových souborů (Zip, 116 kB)
Aplikace je v adresáři bin/Debug. Soubor odbcproxy.exe stačí kamkoliv nakopírovat, pokud ho nechcete spouštět z adresáře projektu.
Pro spuštění potřebuje administrátorská práva. Pokud je spuštěn z konzole, zkusí se navázat na port 47115. V případě úspěchu začne na tomto portu zpracovávat dotazy a program je možné ukončit stiskem klávesy Enter.
Pro instalaci programu jako Windows služby můžete použít aplikaci installutil.exe, která je součástí .NET Frameworku. Více informací o tomto programu je k dispozici například na Programování Windows Services nebo How to: Install and Uninstall Services. - Ukázka klienta v Javě (Zip, 4.5 MB)
- XSD soubor pro vytvoření tříd klienta
- Projekt na github.com
Metoda connect
Slouží k otevření ODBC nebo OLE DB spojení se zadaným zdrojem.
Vstupní data
XML element | Popis |
---|---|
ConnectionString | Definice datového zdroje a jeho parametrů. |
UsingOleDb | Určuje, zda ConnectionString popisuje zdroj pro ODBC nebo OLE DB. Hodnoty: true / false. |
<?xml version="1.0" encoding="utf-8"?>
<ConnectRequest>
<ConnectionString>
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\UserData\Documents\AccessTest01.accdb;Persist Security Info=False;
</ConnectionString>
<UsingOleDb>true</UsingOleDb>
</ConnectRequest>
Odpověď
XML element | Popis |
---|---|
ConnectionAutoCloseTime | Čas, kdy dojde k automatickému uzavření spojení, pokud jej klient neuzavře metodou close. |
ConnectionID | Identifikátor nově vytvořeného spojení. |
Error | Textový popis chyby, pokud se nepovedlo spojení vytvořit. |
Success | Určuje, zda byla operace úspěšně dokončena. |
<?xml version="1.0" encoding="utf-8"?>
<ConnectResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ConnectionAutoCloseTime>2015-05-09T15:26:25.6425929+02:00</ConnectionAutoCloseTime>
<ConnectionID>70e2623e-c01a-4764-8f48-1d6a1fcbc3c1</ConnectionID>
<Error i:nil="true"/>
<Success>true</Success>
</ConnectResponse>
Metoda close
Uzavře dříve otevřené spojení ke zdroji dat.
Vstupní data
XML element | Popis |
---|---|
ConnectionID | Identifikátor spojení. |
<?xml version="1.0" encoding="utf-8"?>
<CloseRequest>
<ConnectionID>70e2623e-c01a-4764-8f48-1d6a1fcbc3c1</ConnectionID>
</CloseRequest>
Odpověď
XML element | Popis | Error | Textový popis chyby, pokud se nepovedlo spojení uzavřít. |
---|---|
Success | Určuje, zda byla operace úspěšně dokončena. |
<?xml version="1.0" encoding="utf-8"?>
<CloseResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Error i:nil="true"/>
<Success>true</Success>
</CloseResponse>
Metoda select
Slouží k výběru dat.
Vstupní data
XML element | Popis |
---|---|
ConnectionID | Identifikátor spojení. |
Query | SELECT dotaz. |
<?xml version="1.0" encoding="utf-8"?>
<SelectRequest>
<ConnectionID>70e2623e-c01a-4764-8f48-1d6a1fcbc3c1</ConnectionID>
<Query>select * from Tabulka1 where quantity < 5</Query>
</SelectRequest>
Odpověď
XML element | Popis |
---|---|
ConnectionAutoCloseTime | Čas, kdy dojde k automatickému uzavření spojení, pokud jej klient neuzavře metodou close. |
Error | Textový popis chyby, pokud došlo během provádění dotazu k chybě. |
Success | Určuje, zda byla operace úspěšně dokončena. |
Rows | Seznam dat, které vrátil dotaz. |
<?xml version="1.0" encoding="utf-8"?>
<SelectResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ConnectionAutoCloseTime>2015-05-10T08:02:17.806343+02:00</ConnectionAutoCloseTime>
<Error i:nil="true"/>
<Rows>
<Row>
<Column>
<Header>ID</Header>
<Value i:type="a:int" xmlns:a="http://www.w3.org/2001/XMLSchema">6</Value>
</Column>
<Column>
<Header>CODE</Header>
<Value i:type="a:string" xmlns:a="http://www.w3.org/2001/XMLSchema">P101205</Value>
</Column>
<Column>
<Header>HEADER</Header>
<Value i:type="a:string" xmlns:a="http://www.w3.org/2001/XMLSchema">TEST06</Value>
</Column>
<Column>
<Header>PRICE_VAT</Header>
<Value i:type="a:decimal" xmlns:a="http://www.w3.org/2001/XMLSchema">799</Value>
</Column>
<Column>
<Header>VAT</Header>
<Value i:type="a:double" xmlns:a="http://www.w3.org/2001/XMLSchema">21</Value>
</Column>
<Column>
<Header>QUANTITY</Header>
<Value i:type="a:double" xmlns:a="http://www.w3.org/2001/XMLSchema">3</Value>
</Column>
<Column>
<Header>PRICE_WO_VAT</Header>
<Value i:type="a:decimal" xmlns:a="http://www.w3.org/2001/XMLSchema">660.3306</Value>
</Column>
<Column>
<Header>TOTAL</Header>
<Value i:type="a:decimal" xmlns:a="http://www.w3.org/2001/XMLSchema">2397</Value>
</Column>
</Row>
<Row>
<Column>
<Header>ID</Header>
<Value i:type="a:int" xmlns:a="http://www.w3.org/2001/XMLSchema">7</Value>
</Column>
<Column>
<Header>CODE</Header>
<Value i:type="a:string" xmlns:a="http://www.w3.org/2001/XMLSchema">P101206</Value>
</Column>
<Column>
<Header>HEADER</Header>
<Value i:type="a:string" xmlns:a="http://www.w3.org/2001/XMLSchema">TEST07</Value>
</Column>
<Column>
<Header>PRICE_VAT</Header>
<Value i:type="a:decimal" xmlns:a="http://www.w3.org/2001/XMLSchema">200</Value>
</Column>
<Column>
<Header>VAT</Header>
<Value i:type="a:double" xmlns:a="http://www.w3.org/2001/XMLSchema">21</Value>
</Column>
<Column>
<Header>QUANTITY</Header>
<Value i:type="a:double" xmlns:a="http://www.w3.org/2001/XMLSchema">2</Value>
</Column>
<Column>
<Header>PRICE_WO_VAT</Header>
<Value i:type="a:decimal" xmlns:a="http://www.w3.org/2001/XMLSchema">165.2893</Value>
</Column>
<Column>
<Header>TOTAL</Header>
<Value i:type="a:decimal" xmlns:a="http://www.w3.org/2001/XMLSchema">400</Value>
</Column>
</Row>
</Rows>
<Success>true</Success>
</SelectResponse>
Metoda execute
Slouží k úpravě dat (INSERT / UPDATE / DELETE).
Vstupní data
XML element | Popis |
---|---|
ConnectionID | Identifikátor spojení. |
Query | Dotaz na změnu dat. |
<?xml version="1.0" encoding="utf-8"?>
<ExecuteRequest>
<ConnectionID>70e2623e-c01a-4764-8f48-1d6a1fcbc3c1</ConnectionID>
<Query>
INSERT INTO Tabulka1(CODE, HEADER, PRICE_VAT, VAT, QUANTITY) VALUES('X100201', 'ODBC Proxy Test 01', 1500, 21, 14)
</Query>
</ExecuteRequest>
Odpověď
XML element | Popis |
---|---|
AffectedRows | Počet ovlivněných řádků. |
ConnectionAutoCloseTime | Čas, kdy dojde k automatickému uzavření spojení, pokud jej klient neuzavře metodou close. |
Error | Textový popis chyby, pokud došlo během provádění dotazu k chybě. |
Success | Určuje, zda byla operace úspěšně dokončena. |
<?xml version="1.0" encoding="utf-8"?>
<ExecuteResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<AffectedRows>1</AffectedRows>
<ConnectionAutoCloseTime>2015-05-10T08:18:14.229503+02:00</ConnectionAutoCloseTime>
<Error i:nil="true"/>
<Success>true</Success>
</ExecuteResponse>
Ukázky vytvoření spojení k různým zdrojům
Microsoft Access
<?xml version="1.0" encoding="utf-8"?>
<ConnectRequest>
<ConnectionString>
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\UserData\Documents\AccessTest01.accdb;Persist Security Info=False;
</ConnectionString>
<UsingOleDb>true</UsingOleDb>
</ConnectRequest>
Microsoft Excel
<?xml version="1.0" encoding="utf-8"?>
<ConnectRequest>
<ConnectionString>
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=D:\UserData\Documents\openxml01.xlsx;
</ConnectionString>
<UsingOleDb>false</UsingOleDb>
</ConnectRequest>
Microsoft Visual FoxPro
<?xml version="1.0" encoding="utf-8"?>
<ConnectRequest>
<ConnectionString>
Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=D:\UserData\Documents\dbf_directory;Exclusive=No;
</ConnectionString>
<UsingOleDb>false</UsingOleDb>
</ConnectRequest>
SQLBase
<?xml version="1.0" encoding="utf-8"?>
<ConnectRequest>
<ConnectionString>
PROVIDER=SQLBASEOLEDB.1;Data Source=Island;User ID=SYSADM;Password=SYSADM
</ConnectionString>
<UsingOleDb>true</UsingOleDb>
</ConnectRequest>
Více příkladů je k dispozici na www.connectionstrings.com.