ASP.NET Core 6中OracleDynamicParameters未找到错误的解决方法
解决Dapper调用Oracle存储过程时OracleDynamicParameters找不到的问题
错误原因
OracleDynamicParameters并非Dapper或Oracle.ManagedDataAccess.Core的内置类型,它是Dapper的Oracle专用扩展包提供的,你当前未安装该扩展,因此出现类型找不到的编译错误。
解决方案一:安装Dapper.Oracle扩展包
安装扩展包
通过NuGet包管理器控制台执行:Install-Package Dapper.Oracle或使用.NET CLI命令:
dotnet add package Dapper.Oracle如果你使用的是
Oracle.ManagedDataAccess.Core,更推荐适配性更好的Dapper.Oracle.Managed包:dotnet add package Dapper.Oracle.Managed添加命名空间引用
在你的C#代码文件顶部补充引用:using Dapper.Oracle;
解决方案二:不依赖扩展包,用原生参数实现
如果不想安装额外包,可以直接使用Dapper或Oracle原生的参数类型:
方法1:使用Dapper的DynamicParameters
var parameters = new DynamicParameters(); parameters.Add("sUserID", sUserID, DbType.String, ParameterDirection.Input); parameters.Add("rResultSet", dbType: DbType.Object, direction: ParameterDirection.Output);
方法2:使用OracleParameter数组
var parameters = new OracleParameter[] { new OracleParameter("sUserID", OracleDbType.Varchar2, sUserID, ParameterDirection.Input), new OracleParameter("rResultSet", OracleDbType.RefCursor, ParameterDirection.Output) };
额外代码修正提示
你的代码存在两处逻辑错误,需要同步修正:
- 变量名不匹配:
if (fcubsHeader != null)中的fcubsHeader应为student,需和前面查询结果的变量名保持一致 - 异常处理逻辑冲突:
return response;后又执行throw;,会导致返回响应后再次抛出异常,需移除throw;语句
修正后的核心代码片段:
var student = await _dbConnection.QueryFirstOrDefaultAsync<StudentResponse>(query, parameters, commandType: CommandType.StoredProcedure); if (student != null) { var studentDtos = _mapper.Map<StudentResponseDto>(student); response.Successful = true; response.Data = studentDtos; response.StatusCode = (int)HttpStatusCode.OK; return response; } else { response.Message = $"Data Not Found!"; response.Successful = true; response.StatusCode = (int)HttpStatusCode.NoContent; return response; }
内容的提问来源于stack exchange,提问作者Ayobamilaye
相关产品推荐
相关产品推荐

