【问题标题】:Asp.Net MVC Execute Oracle PL/SQL Stored Procedure With PatrametersAsp.Net MVC 使用参数执行 Oracle PL/SQL 存储过程
【发布时间】:2017-02-18 07:25:01
【问题描述】:

我想先用asp.net MVC代码中的参数执行oracle pl/sql存储过程。

这是我的存储过程:

CREATE OR REPLACE 
PROCEDURE sp_getuserhosps(p_city IN VARCHAR2,cnt OUT DECIMAL) 
AS
BEGIN

SELECT COUNT(1) INTO cnt FROM "PersonStatus" p1 
INNER JOIN HOSPITALS p2 ON P1."HospitalCode"=p2.KURUM_KODU
WHERE P2.IL_KODU=p_city AND p1."Statu"=1;

END;

这会像这样返回 DBMS OUTPUT CNT=135555

我试过这样的 Asp.Net MVC 代码:

var sql = "DECLARE cnt DECIMAL;BEGIN SP_GETUSERHOSPS(@p_city,cnt);END;";
var total = context.Database.ExecuteSqlCommand(sql, new OdbcParameter("@p_city","07"));

但是没有结果。并且像这样返回错误:

无法将“System.Data.Odbc.OdbcParameter”转换为“Oracle.ManagedDataAccess.Client.OracleParameter”

我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: c# asp.net-mvc oracle entity-framework plsql


    【解决方案1】:

    正如错误所说,您需要传递Oracle.ManagedDataAccess.Client.OracleParameter 的实例而不是System.Data.Odbc.OdbcParameter

    所以你会得到这个:

    var sql = "DECLARE cnt DECIMAL;BEGIN SP_GETUSERHOSPS(:p_city,cnt);END;";
    var total = context.Database.ExecuteSqlCommand(sql, new OracleParameter(":p_city","07"));
    

    请注意,我将 '@' 字符替换为 ':' 字符。因为 Oracle 中的参数以后者为前缀,而“@”用于 SQL Server。

    如果您想获得 cnt 值,请像这样重写您的代码:

    var cntParameter = new OracleParameter("cnt", OracleDbType.Number, ParameterDirection.Output);
    var cityParameter = new OracleParameter("p_city", OracleDbType.Number,  "07", ParameterDirection.Input);
    var sql = "BEGIN SP_GETUSERHOSPS(:p_city,:cnt);END;";
    var total = context.Database.ExecuteSqlCommand(sql, cityParameter, cntParameter );
    // Here you check the cntParameter.Value to get cnt parameter value.
    

    【讨论】:

    • 好的,谢谢。但此时返回-1。但我需要计数(cnt)。
    • @kodcu 然后我编辑了我的答案,向您展示如何获得输出值,即使它不是最初的问题。
    • 非常好的答案。但这不能返回计数。仍然返回-1。是否需要更改存储过程?
    • @kodcu 返回 -1 是什么意思。你检查cntParameter.Value吗?你不需要检查totalvariable。
    • 你太棒了 :) 非常感谢
    猜你喜欢
    • 2021-05-27
    • 1970-01-01
    • 2021-02-10
    • 2012-09-29
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多