private void GetWriteParameterProxy(IBindingParameterInfo paramInfo) { if (paramInfo.Parameter is OracleParameter op) { op.Direction = ParameterDirection.ReturnValue; op.OracleDbType = OracleDbType.RefCursor; } else { throw new InvalidOperationException("Refcursors are only available for parameters of type OracleParameter."); } }
private static void GetParameterWriterProxy(string tvpName, string[] columnNames, MetadataIdentity[] heading, BindingParameterConverter[] converters, IBindingParameterInfo paramInfo) { SqlParameter sqlParam = paramInfo.Parameter as SqlParameter ?? throw new InvalidOperationException("Table-valued parameters are only supported on SqlParameter instances."); Relation relation = new Relation(paramInfo.Field, heading); ITuple refTuple = relation.Row(); IEnumerable <SqlDataRecord> iterator() { SqlDataRecord record = GetDataRecord(columnNames, refTuple); foreach (ITuple tuple in relation) { SetRecordValues(record, tuple, converters); yield return(record); } } if (refTuple == null) { sqlParam.Value = Array.Empty <SqlDataRecord>(); } else { sqlParam.Value = iterator(); } sqlParam.SqlDbType = SqlDbType.Structured; sqlParam.TypeName = tvpName; }