ODBC Oracle连接器:用于存储过程参数的getSchema

时间:2013-11-04 14:02:17

标签: c# oracle stored-procedures odbc

我需要使用ODBC连接器检索Oracle存储过程的参数信息。 一个非常简单的存储过程示例:

create or replace
PROCEDURE          TESTPROC(param1 IN INTEGER)
AS
  BEGIN
    //body
  END TESTPROC;

现在我想检索“TESTPROC”的参数信息。

我尝试的第一个解决方案是使用 OdbcCommandBuilder 。我构造了一个带命令类型的OdbcCommand:存储过程和命令文本:过程名称(例如TESTPROC)。然后我使用了像这样的派生函数:“ OdbcCommandBuilder.DeriveParameters(cmd);

问题是我在调用此函数时遇到无效的强制转换异常:“指定的强制转换无效。”;堆栈跟踪:

   at System.Data.Odbc.OdbcDataReader.GetInt16(Int32 i)
   at System.Data.Odbc.OdbcCommandBuilder.DeriveParametersFromStoredProcedure(OdbcConnection connection, OdbcCommand command)
   at System.Data.Odbc.OdbcCommandBuilder.DeriveParameters(OdbcCommand command)

如果我将参数类型声明为NUMERIC,则错误也会重现。 奇怪的是,如果参数是char或string类型,我可以获得正确的参数信息。尝试转换Oracle数字类型时似乎存在错误。

我还尝试获取这样的过程参数的模式,但没有成功:

string[] restrictions = new string[3];
restrictions[0] = null;
restrictions[1] = null;
restrictions[2] = "MyOwner.TESTPORC";

DataTable dt = conn.GetSchema(OdbcMetaDataCollectionNames.ProcedureParameters, restrictions);

这里的问题是我无法检索DataTable中的任何行,我想这是因为相同的类型转换问题。

我想知道是否有一些解决此问题的解决方法。 我使用的平台是Windows 8 x64,Oracle客户端是instantclient_12_1

0 个答案:

没有答案