2016-10-09 37 views
2

私はasp.net MVCコードのパラメータを持つoracle pl/sqlストアドプロシージャを最初に実行したいと思います。ここでAsp.Net MVC Patrameterで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")); 

をしかしthis.Andは、このようなエラーとして戻ってから、結果がない:

キャストできません「がSystem.Data.Odbc .OdbcParameter 'to' Oracle.ManagedDataAccess.Client.OracleParameter '

これをどのように解決できますか?

おかげエラーとして

答えて

2

あなたは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値は、このようなあなたのコードを書き換える取得したい場合は

:-1.But返す

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をこの時点で私はカウント(CNT)が必要です。 – kodcu

+0

@kodcuその後、出力値を得る方法を最初の質問ではなく、私の答えを編集しました。 – CodeNotFound

+0

非常に良い答えです。しかし、これはカウントを返すことができませんでした。それは-1を返します。ストアドプロシージャを変更する必要がありますか? – kodcu

関連する問題