如何从Elixir通过ODBC选择数据?

Edw*_*ler 8 odbc elixir

我找不到任何文档或示例.到目前为止,我可以成功连接,但我不知道选择和返回数据的语法.

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

**(UndefinedFunctionError)未定义函数:: odbc.execute_stmt/2(odbc):odbc.execute_stmt(#PID <0.85.0>,'从mytable中选择计数(*)')


2015年10月6日更新

我发现了怎么做.我相信我找不到有关Elixir的任何文档,因为Elixir只是对Erlang库进行了传递.

在任何情况下,它是sql_queryselect_count:

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

{:已选中,['COUNT'],[{'182'}]}

{:ok, count} = :odbc.select_count(conn, 'select * from mytable')
Run Code Online (Sandbox Code Playgroud)

{:好的,182}


2015年10月7日更新

这是我的最终代码,我认为这更加惯用:

: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()
Run Code Online (Sandbox Code Playgroud)

Ono*_*cci 4

这里有几件事:

1.)我认为你想要:odbc.sql_query/2。去年,我使用 ODBC 构建了一个相当大的应用程序来与 SQLServer 通信,并且几乎在任何地方都使用了 sql_query。我想分享来源,但我不能。

2.)我在官方 Erlang ODBC 文档(v2.11.1)中找不到任何关于execute_stmt 的文档,因此我认为它可能已被弃用。我确实找到了一个使用execute_stmt的示例,但数量是四而不是二。看起来所涉及的 ODBC 版本(从链接本身来看)相当旧——v1.0 之前的版本。

3.) 在 Elixir 中,我们倾向于回避重建已经在 Erlang 中构建的东西,除非有迫切需要这样做。由于 ODBC 已经存在于 Erlang 中并且运行得很好,我猜一般的指导是调用 Elixir 的 Erlang lib。Elixir 的设计目的是让调用 Erlang 代码变得更加容易。