簡體   English   中英

Asp.Net MVC使用參數表執行Oracle PL / SQL存儲過程

[英]Asp.Net MVC Execute Oracle PL/SQL Stored Procedure With Patrameters

我想先使用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”

我該如何解決?

謝謝

如錯誤所述,您需要傳遞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"));

注意,我將'@'char替換為':'char。 因為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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM