首先使用实体框架代码和DevArt驱动程序调用Oracle存储过程
我有一个Oracle存储过程,我正试图首先使用EF代码(首先使用实体框架代码和DevArt驱动程序调用Oracle存储过程,oracle,entity-framework,stored-procedures,entity-framework-6,devart,Oracle,Entity Framework,Stored Procedures,Entity Framework 6,Devart,我有一个Oracle存储过程,我正试图首先使用EF代码(DbContext)使用DevArt Oracle驱动程序(最新版本)调用它。我不知道为什么这么难(我希望我使用的是SQL Server),但我无法让它工作。我正在做中描述的事情 我遵循了DevArt团队自己提供的答案,但仍然得到一个Oracle例外,尽管略有不同: ora-01036非法变量名称/编号 这是我的存储过程的签名: create or replace PROCEDURE GP_PARTICIPANTDETAILS ( p
DbContext
)使用DevArt Oracle驱动程序(最新版本)调用它。我不知道为什么这么难(我希望我使用的是SQL Server),但我无法让它工作。我正在做中描述的事情
我遵循了DevArt团队自己提供的答案,但仍然得到一个Oracle例外,尽管略有不同:
ora-01036非法变量名称/编号
这是我的存储过程的签名:
create or replace PROCEDURE GP_PARTICIPANTDETAILS
(
p_contracts_list VARCHAR2,
p_participant_type CHAR DEFAULT NULL,
p_dob_range_begin DATE DEFAULT NULL,
p_dob_range_end DATE DEFAULT NULL,
p_part_name VARCHAR DEFAULT NULL,
p_ssn VARCHAR DEFAULT NULL,
p_status_list VARCHAR2 DEFAULT NULL,
p_start_index IN INT DEFAULT 0,
p_records_to_take IN INT DEFAULT 0,
cp_result OUT SYS_REFCURSOR
)
我创建的所有参数都是这样的(我不想把它们都放在这里,因为有这么多,但我定义了所有参数的名称、值、类型和方向)
游标参数的定义如下:
OracleParameter paramOutputCursor = new OracleParameter("cp_cresult", OracleDbType.Cursor, System.Data.ParameterDirection.Output);
string sqlQuery = "BEGIN OMNIDB.GP_PARTICIPANTDETAILS(:p_contracts_list, :p_participant_type, :p_dob_range_begin, :p_dob_range_end, :p_part_name, :p_ssn, :p_status_list, :p_start_index, :p_records_to_take, :cp_result); END;";
var details = context.Database.SqlQuery<ParticipantDetail>(sqlQuery, paramContracts, paramPartType, paramDobBegin, paramDobEnd, paramPartName, paramSSN, paramStatuses, paramStartIndex, paramRecordsToTake, paramOutputCursor).ToList();
然后我这样称呼它:
OracleParameter paramOutputCursor = new OracleParameter("cp_cresult", OracleDbType.Cursor, System.Data.ParameterDirection.Output);
string sqlQuery = "BEGIN OMNIDB.GP_PARTICIPANTDETAILS(:p_contracts_list, :p_participant_type, :p_dob_range_begin, :p_dob_range_end, :p_part_name, :p_ssn, :p_status_list, :p_start_index, :p_records_to_take, :cp_result); END;";
var details = context.Database.SqlQuery<ParticipantDetail>(sqlQuery, paramContracts, paramPartType, paramDobBegin, paramDobEnd, paramPartName, paramSSN, paramStatuses, paramStartIndex, paramRecordsToTake, paramOutputCursor).ToList();
string sqlQuery=“BEGIN OMNIDB.GP_PARTICIPANTDETAILS(:p_contracts_list,:p_participant_type,:p_dob_range_BEGIN,:p_dob_range_end,:p_part_name,:p_ssn,:p_status_list,:p_start_index,:p_records_to_take,:cp_result);end;”;
var details=context.Database.SqlQuery(SqlQuery、paramContracts、paramPartType、paramDobBegin、paramDobEnd、paramPartName、paramSSN、paramStatuses、paramStartIndex、paramRecordsToTake、paramOutputCursor);
我尝试的每件事都会产生同样的错误。在参数名称前面加上:
,而不加:
。。。我验证了代码中参数的拼写是否与过程的声明相匹配
这里出了什么问题?我们复制了这个问题并正在调查。我们会通知你结果的。如果您对Devart产品有任何疑问,请通过联系我们。请更正代码中的参数名称:cp\u cresult->cp\u result。这应该可以解决这个问题。