title: Call Oracle package function using Odbc from C#
body: <p>I have a function defined inside an Oracle package:</p>
  
  <pre><code>CREATE OR REPLACE PACKAGE BODY TESTUSER.TESTPKG as
    FUNCTION testfunc(n IN NUMBER) RETURN NUMBER as
    begin
      return n + 1;
    end testfunc;
  end testpkg;
  /
  </code></pre>
  
  <p>How can I call it from C# using Odbc? I tried the following:</p>
  
  <pre><code>using System;
  using System.Data;
  using System.Data.Odbc;
  
  class Program {
      static void Main(string[] args) {
          using (OdbcConnection connection = new OdbcConnection("DSN=testdb;UID=testuser;PWD=testpwd")) {
              connection.Open();
  
              OdbcCommand command = new OdbcCommand("TESTUSER.TESTPKG.testfunc", connection);
              command.CommandType = System.Data.CommandType.StoredProcedure;
  
              command.Parameters.Add("ret", OdbcType.Int).Direction = ParameterDirection.ReturnValue;
  
              command.Parameters.Add("n", OdbcType.Int).Direction = ParameterDirection.Input;
              command.Parameters["n"].Value = 42;
  
              command.ExecuteNonQuery();
              Console.WriteLine(command.Parameters["ret"].Value);
          }
      }
  }
  </code></pre>
  
  <p>But I get an exception saying "Invalid SQL Statement".<br>
  What am I doing wrong?</p>