private IEnumerable<KeyValuePair<ResultInfo, IReadOnlyList<ColumnHeader>>> AcquireImplicitRefCursors(OracleCommand command) { #if ORACLE_MANAGED_DATA_ACCESS_CLIENT yield break; #else if (command.ImplicitRefCursors == null) { yield break; } for (var i = 0; i < command.ImplicitRefCursors.Length; i++) { var cursorInfo = new RefCursorInfo { CursorName = $"Implicit cursor {i + 1}", ImplicitCursorIndex = i }; var refCursor = command.ImplicitRefCursors[i]; if (!refCursor.IsNull) { yield return AcquireRefCursor(command, refCursor, cursorInfo); } } #endif }
private KeyValuePair<ResultInfo, IReadOnlyList<ColumnHeader>> AcquireRefCursor(OracleCommand command, OracleRefCursor refCursor, RefCursorInfo refCursorInfo) { var reader = refCursor.GetDataReader(); var resultInfo = new ResultInfo($"RefCursor{reader.GetHashCode()}", refCursorInfo.CursorName, ResultIdentifierType.UserDefined); _commandReaders.Add(resultInfo, new CommandReader { Reader = reader, Command = command, RefCursorInfo = refCursorInfo } ); return new KeyValuePair<ResultInfo, IReadOnlyList<ColumnHeader>>(resultInfo, GetColumnHeadersFromReader(reader)); }
private IEnumerable<KeyValuePair<ResultInfo, IReadOnlyList<ColumnHeader>>> UpdateBindVariables(StatementExecutionModel executionModel, OracleCommand userCommand) { var bindVariableModels = executionModel.BindVariables.ToDictionary(v => v.Name, v => v); foreach (OracleParameter parameter in userCommand.Parameters) { var bindVariableModel = bindVariableModels[parameter.ParameterName]; var value = parameter.Value; if (parameter.Value is OracleDecimal) { var oracleNumber = new OracleNumber((OracleDecimal)parameter.Value); value = oracleNumber.IsNull ? String.Empty : oracleNumber.ToSqlLiteral(); } if (parameter.Value is OracleString) { var oracleString = (OracleString)parameter.Value; value = oracleString.IsNull ? String.Empty : oracleString.Value; } if (parameter.Value is OracleDate) { var oracleDate = (OracleDate)parameter.Value; value = oracleDate.IsNull ? (DateTime?)null : oracleDate.Value; } if (parameter.Value is OracleTimeStamp) { var oracleTimeStamp = (OracleTimeStamp)parameter.Value; value = oracleTimeStamp.IsNull ? (DateTime?)null : oracleTimeStamp.Value; } if (!bindVariableModel.IsFilePath) { if (parameter.Value is OracleBinary) { var oracleBinary = (OracleBinary)parameter.Value; value = oracleBinary.IsNull ? null : oracleBinary.Value.ToHexString(); } var clob = parameter.Value as OracleClob; if (clob != null) { value = clob.IsNull ? String.Empty : clob.Value; } var blob = parameter.Value as OracleBlob; if (blob != null) { value = blob.IsNull ? null : blob.Value.ToHexString(); } } var refCursor = parameter.Value as OracleRefCursor; if (refCursor != null) { if (refCursor.IsNull) { continue; } var refCursorInfo = new RefCursorInfo { CursorName = parameter.ParameterName, Parameter = parameter }; yield return AcquireRefCursor(userCommand, refCursor, refCursorInfo); } else { if (!bindVariableModel.IsFilePath) { bindVariableModel.Value = value; } } } }