2015-10-05 2 views
6

Ich kann keine Dokumentation oder Beispiele dafür finden. Bisher kann ich erfolgreich eine Verbindung herstellen, obwohl ich die Syntax zum Auswählen und Zurückgeben von Daten nicht kenne.Wie wählt man Daten über ODBC von Elixir?

:odbc.start() 
{:ok, conn} = :odbc.connect('DSN=mydsn;UID=myuid;PWD=mypwd', []) 
:odbc.execute_stmt(conn, 'select count(*) from mytable') 
:odbc.stop() 

** (UndefinedFunctionError) nicht definierte Funktion: odbc.execute_stmt/2 (ODBC): odbc.execute_stmt (#PID < 0.85.0> 'select count (*) from mytable')


aktualisieren 10/6/2015

ich fand, wie dies zu tun. Ich glaube, ich konnte für Elixir keine Dokumentation darüber finden, weil Elixir einfach eine Durchleitung zur Erlang-Bibliothek macht.

In jedem Fall ist es sql_query oder select_count:

{:selected, colNames, rows} = :odbc.sql_query(conn, 'select count(*) from mytable') 

{: ausgewählt, [ 'COUNT'], [{ '182'}]}

{:ok, count} = :odbc.select_count(conn, 'select * from mytable') 

{: ok, 182}


aktualisieren 10/7/2015

Hier ist meine letzte Code, die ich glaube, mehr idiomatische ist:

:odbc.start() 
case :odbc.connect('DSN=mydsn;UID=#{System.get_env("MY_UID")};PWD=#{System.get_env("MY_PASSWORD")}', []) do 
    {:ok, conn} -> 
    case :odbc.sql_query(conn, 'select count(*) from mytable') do 
     {:selected, _colNames, [{count}]} -> IO.puts "count = #{count}" 
     {:error, err} -> {:error, err} 
    end 
    {:error, err} -> {:error, err} 
end 
:odbc.stop() 

Antwort

2

Es gibt ein paar Dinge hier:

1.) Ich denke du willst :odbc.sql_query/2. Ich habe letztes Jahr eine ziemlich umfangreiche Anwendung mit ODBC erstellt, um mit SQLServer zu kommunizieren, und ich habe sql_query so ziemlich überall verwendet. Ich würde die Quelle teilen, aber ich kann nicht.

2.) Ich kann keine Dokumentation zu execute_stmt in der official Erlang ODBC docs (v2.11.1) finden, daher denke ich, dass es veraltet sein kann. Ich fand an example, die execute_stmt verwendet, aber die Arity war vier nicht zwei. Und es sieht so aus, als wäre die Version von ODBC (nach dem Link selbst) ziemlich alt - vor Version 1.0.

3.) In Elixir tendieren wir dazu, Dinge, die bereits in Erlang gebaut wurden, wieder aufzubauen, es sei denn, es besteht eine zwingende Notwendigkeit, dies zu tun. Da ODBC bereits in Erlang vorhanden ist und es ziemlich gut funktioniert, würde ich annehmen, dass die allgemeine Anleitung die Erlang-Bibliothek von Elixir ist. Elixir wurde entwickelt, um den Erlang-Code einfach zu nennen.