有人可以建议我如何通过vb.net在oracle中调用存储函数。通过vb.net调用存储函数而不知道参数名称
从vb.net我应该能够将值传递给该函数的参数而不知道参数名称?
例子:我有一个函数, 创建或Repalce功能FUNC_NAME(参数1 VARCHAR2,参数2 VARCHAR2)
中序调用通过vb.net这个功能,我们需要给
parameterargs.paramtername = “参数1”
反正是有这样我可以不使用参数名称和调用函数
在此先感谢 Rupesh
有人可以建议我如何通过vb.net在oracle中调用存储函数。通过vb.net调用存储函数而不知道参数名称
从vb.net我应该能够将值传递给该函数的参数而不知道参数名称?
例子:我有一个函数, 创建或Repalce功能FUNC_NAME(参数1 VARCHAR2,参数2 VARCHAR2)
中序调用通过vb.net这个功能,我们需要给
parameterargs.paramtername = “参数1”
反正是有这样我可以不使用参数名称和调用函数
在此先感谢 Rupesh
,我们处理它是通过一个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()),需要包含名称空间。另外,根据函数的结构,您可能需要从中选择而不是执行它。
我不确定您是否可以在Oracle中使用命名参数。
当您创建参数化查询,请尝试使用问号作为占位符:
Select col1, col2 From tablename Where col1 = ? and col2 = ?
然后,务必将参数添加到命令对象以正确的顺序。
您不需要知道调用它的参数名称。 您需要知道它们的数量和类型 将参数名称添加到呼叫中意味着您不必传递所有这些参数,并且/或者您可以以不同的顺序将它们传递给SP的签名。
称之为参数化查询。
伪
int customer_ID = 786;
Command.CommandText = 'Exec SP_MYProc @MyVar';
Command.Parameters.Add(new Parameter('MyVar',DbType.Int,customer_ID));
Command.Exec
感谢托尼,但我有一个存储的功能,而不是一个过程...是否有任何区别。它给我一个错误,如“函数名称不是一个过程或未定义” – Rupesh
现在是同一种技巧是不是。选择myfunc(myvalue) –