2011-12-13 90 views
0

有人可以建议我如何通过vb.net在oracle中调用存储函数通过vb.net调用存储函数而不知道参数名称

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

例子:我有一个函数, 创建或Repalce功能FUNC_NAME(参数1 VARCHAR2,参数2 VARCHAR2)

中序调用通过vb.net这个功能,我们需要给

parameterargs.paramtername = “参数1”

反正是有这样我可以不使用参数名称和调用函数

在此先感谢 Rupesh

回答

0

,我们处理它是通过一个OleDbConnection打开Oracle数据库了道路,然后调用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()),需要包含名称空间。另外,根据函数的结构,您可能需要从中选择而不是执行它。

0

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

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

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

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

0

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

称之为参数化查询。

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

感谢托尼,但我有一个存储的功能,而不是一个过程...是否有任何区别。它给我一个错误,如“函数名称不是一个过程或未定义” – Rupesh

+0

现在是同一种技巧是不是。选择myfunc(myvalue) –

相关问题