我在Oracle包中定义了一个函数:
CREATE OR REPLACE PACKAGE BODY TESTUSER.TESTPKG as
FUNCTION testfunc(n IN NUMBER) RETURN NUMBER as
begin
return n + 1;
end testfunc;
end testpkg;
/
如何使用Odbc从C#调用它?我尝试了以下方法:
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);
}
}
}
但我得到一个例外,说“无效的SQL语句” 我做错了什么?
答案 0 :(得分:3)
答案 1 :(得分:2)
尝试
OdbcCommand command = new OdbcCommand("begin ? := TESTUSER.TESTPKG.testfunc(?) end;", connection);
答案 2 :(得分:1)
我设法像这样调用包函数:
command.CommandText = @"begin
:ret := ILMTEST.testpkg.testfunc(:n);
end;";
command.CommandType = System.Data.CommandType.Text;
答案 3 :(得分:0)
我认为你应该考虑改用Oracle Client
。
如果您选择ODBC只是为了创建DSN
然后连接到它以某种方式与数据库无关,请考虑使用Enterprise Library
Data Access Application Block
。