通过vb.net调用存储的函数,而不知道参数名称

时间:2011-12-13 16:53:34

标签: sql vb.net oracle11g

有人可以建议我如何通过vb.net在oracle中调用存储函数

从vb.net我应该能够在不知道参数名称的情况下将值传递给该函数的参数吗?

示例:我有一个功能, 创建或重新定义函数Func_Name(param1 Varchar2,param2 varchar2)

为了通过vb.net调用此函数,我们需要提供

parameterargs.paramtername = “参数1”

无论如何,我无法使用参数名称并调用函数

提前致谢 Rupesh

3 个答案:

答案 0 :(得分:0)

我不确定您是否可以在Oracle中使用命名参数。

创建参数化查询时,请尝试使用问号作为占位符:

Select col1, col2 From tablename Where col1 = ? and col2 = ?

然后,确保以正确的顺序将参数添加到命令对象。

答案 1 :(得分:0)

您不需要知道要调用的参数名称。 您需要知道它们的数量和类型 在呼叫中添加参数名称意味着您不必通过所有这些名称和/或您可以以不同的顺序将它们传递给SP的签名。

将其称为参数化查询。

伪代码

int customer_ID = 786;
Command.CommandText = 'Exec SP_MYProc @MyVar';
Command.Parameters.Add(new Parameter('MyVar',DbType.Int,customer_ID));
Command.Exec

答案 2 :(得分:0)

我们处理它的方式是通过OleDbConnection打开Oracle DB,然后调用GetOleDbSchemaTable询问Procedure_Columns。

例如:

DataTable dtTable;

dtData = this.Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Procedure_Columns, new object[] {null, null, sName, null});
foreach (DataRow theRow in dtData.Rows)
{
    // Columns available in the row include: 
    // column_name, data_type, type_name, precision, and scale
}

然后,如果您需要在没有有效参数的情况下执行它(例如,为了获取它公开的列),您可以使用DbNull.Value为每个参数执行它。

另外,我无法确切记住Oracle的运行方式,但在SQL Server中,您需要在执行函数时包含命名空间(即select * from dbo.fn_my_test())。此外,根据函数的结构,您可能必须从中进行选择而不是执行它。