0

我需要使用 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

4

0 回答 0