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í

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 &lt; 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.