private static void SetInValueInternalWithOdbType <TKey>(this DB2ParametersWrapper <TKey> paramWrapper, TKey key, object value, DB2Type odbType, ParameterDirection pDir = ParameterDirection.Input) { value = value ?? DBNull.Value; //aggiorno if (paramWrapper.ContainsKey(key)) { paramWrapper[key].Value = value; } else { var p = new DB2Parameter { Direction = pDir, ParameterName = "@par_" + key, DB2Type = odbType, Value = value, }; paramWrapper[key] = p; } }
public static object GetValue <TKey>(this DB2ParametersWrapper <TKey> paramWrapper, TKey key, TypeCode type) { object value = null; if (paramWrapper.ContainsKey(key)) { switch (type) { case TypeCode.Int16: if (paramWrapper[key].DB2Type != DB2Type.SmallInt) { ThrowArgumentException(key, paramWrapper[key].DB2Type); } value = ((short)(DB2Int16)paramWrapper[key].Value); break; case TypeCode.Int32: if (paramWrapper[key].DB2Type != DB2Type.Integer) { ThrowArgumentException(key, paramWrapper[key].DB2Type); } value = ((int)(DB2Int32)paramWrapper[key].Value); break; case TypeCode.Int64: if (paramWrapper[key].DB2Type != DB2Type.BigInt) { ThrowArgumentException(key, paramWrapper[key].DB2Type); } value = ((long)(DB2Int64)paramWrapper[key].Value); break; case TypeCode.Decimal: if (paramWrapper[key].DB2Type != DB2Type.Decimal) { ThrowArgumentException(key, paramWrapper[key].DB2Type); } value = ((decimal)(DB2Decimal)paramWrapper[key].Value); break; case TypeCode.Double: if (paramWrapper[key].DB2Type != DB2Type.Double) { ThrowArgumentException(key, paramWrapper[key].DB2Type); } value = ((double)(DB2Double)paramWrapper[key].Value); break; case TypeCode.String: var odbType = paramWrapper[key].DB2Type; if (odbType != DB2Type.Char || odbType != DB2Type.VarChar || odbType != DB2Type.Graphic || odbType != DB2Type.VarGraphic || odbType != DB2Type.Clob || //CLOB is a string odbType != DB2Type.DbClob ) { ThrowArgumentException(key, paramWrapper[key].DB2Type); } value = ((string)(DB2String)paramWrapper[key].Value); break; case TypeCode.DateTime: if (paramWrapper[key].DB2Type == DB2Type.Date) { value = ((DateTime)(DB2Date)paramWrapper[key].Value); } else if (paramWrapper[key].DB2Type == DB2Type.Timestamp) { value = (DateTime)((DB2TimeStamp)paramWrapper[key].Value); } else if (paramWrapper[key].DB2Type == DB2Type.Time) { value = (TimeSpan)((DB2Time)paramWrapper[key].Value); } else { ThrowArgumentException(key, paramWrapper[key].DB2Type); } break; case TypeCode.DBNull: //will return default value break; //IMPLEMENT OTHER TYPES HERE default: throw new ArgumentException($"Not a valid TypeCode {Enum.GetName(typeof(TypeCode), type)}"); } return(value); } else { throw new DataException(string.Format($"Output parameter key {key} does not exist")); } }
private static void SetInValueInternal <TValue, TKey>(this DB2ParametersWrapper <TKey> paramWrapper, TKey key, object value, ParameterDirection pDir = ParameterDirection.Input) { value = value ?? DBNull.Value; if (paramWrapper.ContainsKey(key)) { paramWrapper[key].Value = value; } else { var p = new DB2Parameter { Direction = pDir, ParameterName = "@par_" + key }; var type = typeof(TValue); switch (Type.GetTypeCode(type)) { case TypeCode.Int16: p.DB2Type = DB2Type.SmallInt; p.Value = value; break; case TypeCode.Int32: p.DB2Type = DB2Type.Integer; p.Value = value; break; case TypeCode.Int64: p.DB2Type = DB2Type.BigInt; p.Value = value; break; case TypeCode.Decimal: p.DB2Type = DB2Type.Decimal; p.Value = value; break; case TypeCode.Double: p.DB2Type = DB2Type.Double; p.Value = value; break; case TypeCode.String: p.DB2Type = DB2Type.VarChar; p.Value = value; break; case TypeCode.DateTime: p.DB2Type = DB2Type.Date; p.Value = value; break; default: throw new ArgumentException("Error to map specified type to an DB2Type."); } paramWrapper[key] = p; } }