2016-10-09 1 views
2

I Vous souhaitez d'abord exécuter la procédure stockée pl/sql oracle avec les paramètres du code MVC asp.net.Asp.Net MVC Exécution de la procédure stockée Oracle PL/SQL avec les patrimètres

Voici ma procédure stockée:

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; 

Ce retour SGBD SORTIE CNT=135555 comme celui-ci.

J'ai essayé code Asp.Net MVC comme ceci:

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

Mais il n'y a pas de résultat de this.And retour comme une erreur comme ceci:

Impossible de lancer des « System.Data.Odbc .OdbcParameter » à 'Oracle.ManagedDataAccess.Client.OracleParameter'

Comment puis-je résoudre ce problème?

Merci

Répondre

2

Comme l'erreur dit que vous devez passer une instance de Oracle.ManagedDataAccess.Client.OracleParameter au lieu de System.Data.Odbc.OdbcParameter.

Ainsi, vous aurez ceci:

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

Avis je remplace '@' omble chevalier ':' omble chevalier. car les paramètres dans Oracle sont préfixés avec ce dernier alors que '@' est utilisé pour SQL Server.

Si vous souhaitez obtenir la valeur cnt alors réécrire votre code comme ceci:

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. 
+0

Ok Thanks.But à ce moment-retour -1.But je dois compter (cnt). – kodcu

+0

@kodcu Puis j'ai édité ma réponse pour vous montrer comment obtenir la valeur de sortie même si ce n'est pas la question initiale. – CodeNotFound

+0

Très belle réponse.Mais cela ne pouvait pas retourner count.Tout encore il retourne -1.Est-il nécessaire de modifier la procédure stockée? – kodcu