har*_*ark 16 .net c# oracle dapper
如何将Dapper与返回游标的Oracle存储过程一起使用?
var p = new DynamicParameters();
p.Add("foo", "bar");
p.Add("baz_cursor", dbType: DbType.? , direction: ParameterDirection.Output);
Run Code Online (Sandbox Code Playgroud)
这里,DbType是System.Data.DbType,它没有Cursor成员.我尝试过使用DbType.Object,但这对OracleClient和OracleDataAcess都不起作用.
相反,使用OracleType或OracleDbType的可能方法是什么?
谢谢你的解决方案.我使用一个简单的DynamicParameter装饰器以更少的代码实现了同样的目的:
public class OracleDynamicParameters : SqlMapper.IDynamicParameters
{
private readonly DynamicParameters dynamicParameters = new DynamicParameters();
private readonly List<OracleParameter> oracleParameters = new List<OracleParameter>();
public void Add(string name, object value = null, DbType? dbType = null, ParameterDirection? direction = null, int? size = null)
{
dynamicParameters.Add(name, value, dbType, direction, size);
}
public void Add(string name, OracleDbType oracleDbType, ParameterDirection direction)
{
var oracleParameter = new OracleParameter(name, oracleDbType, direction);
oracleParameters.Add(oracleParameter);
}
public void AddParameters(IDbCommand command, SqlMapper.Identity identity)
{
((SqlMapper.IDynamicParameters)dynamicParameters).AddParameters(command, identity);
var oracleCommand = command as OracleCommand;
if (oracleCommand != null)
{
oracleCommand.Parameters.AddRange(oracleParameters.ToArray());
}
}
}
Run Code Online (Sandbox Code Playgroud)
你必须实现:
public interface IDynamicParameters
{
void AddParameters(IDbCommand command, Identity identity);
}
Run Code Online (Sandbox Code Playgroud)
然后在AddParameters回调中,您将IDbCommand转换为OracleCommand并添加DB特定的参数.
将此类添加到您的项目中
并且您的代码应该如下所示:-
var p = new OracleDynamicParameters();
p.Add("param1", pAuditType);
p.Add("param2", pCommnId);
p.Add("outCursor", dbType: OracleDbType.RefCursor, direction: ParameterDirection.Output);
using (var multi = cnn.QueryMultiple("procedure_name", param: p, commandType: CommandType.StoredProcedure))
{
var data = multi.Read();
return data;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15852 次 |
| 最近记录: |