从 C# 调用 oracle 函数

Posted

技术标签:

【中文标题】从 C# 调用 oracle 函数【英文标题】:Call an oracle function from c# 【发布时间】:2016-12-19 10:23:04 【问题描述】:

我在 oracle 中有一个带有这个签名的函数

test_fun(p_nat_no in number,p_number_type in number)  RETURN test_table

在c#中这是代码

string select = "test_fun"; 
using (OracleConnection connection = new OracleConnection(helper.Global.ConnectionString))



    OracleCommand command = new OracleCommand(select, connection);
   // command.CommandType = CommandType.StoredProcedure;
    OracleParameter PrmnatNo = new OracleParameter("p_nat_no ", natNo);//natNo
    command.Parameters.Add(PrmnatNo);

    OracleParameter pramNumberType = new OracleParameter("p_number_type ", numberType);
    command.Parameters.Add(pramNumberType);

    connection.Open();

    using (OracleDataReader reader = command.ExecuteReader())
    

        if (reader.HasRows)
        

            List<test_table> Tickets = new List<test_table>();

            while (reader.Read())
            
                Tickets.Add(GetPropertyTaxHelper(reader));

            
            return Tickets;

        
        else return null;
    


注意:该功能在 oracle 中可以正常工作。

但是当试图从 c# 调用函数时会出现错误(无效的 sql 语句),即使函数是正确的并从 oracle 返回输出?有什么帮助吗?建议?

【问题讨论】:

错误是什么? 看看这个:***.com/questions/23199713/… 出现错误...嗯... 问题更新了! 错误是(无效的 SQL 语句),但是函数是从数据库编译并正常工作的 【参考方案1】:

您的代码不起作用,因为您使用保留关键字 (select) 作为字符串的名称,因为编译器认为这是 query expression,所以上面的代码将不起作用。

修复显然很容易,将字符串的名称更改为“select”。

【讨论】:

@alicebon 你是否也改变了 OracleCommand 构造函数的第一个参数?

以上是关于从 C# 调用 oracle 函数的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 调用 oracle 函数

Oracle 函数调用的返回值返回 null

C# Oracle 函数调用

从 C# 调用 Oracle 存储过程?

调用返回游标的 oracle 函数

获取从 C# (oracle) 调用的插入语句使用的序列号