有人可以建议我如何通过vb.net在oracle中调用存储函数。
从vb.net我应该能够在不知道参数名称的情况下将值传递给该函数的参数吗?
示例:我有一个功能, 创建或重新定义函数Func_Name(param1 Varchar2,param2 varchar2)
为了通过vb.net调用此函数,我们需要提供
parameterargs.paramtername = “参数1”
无论如何,我无法使用参数名称并调用函数
提前致谢 Rupesh
答案 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())。此外,根据函数的结构,您可能必须从中进行选择而不是执行它。