public void TryGetAdoTypeForClrType_TypeNull_ThrowsArgumentNullException() { Type type = null; var actual = new ADODB.DataTypeEnum(); Assert.Throws <ArgumentNullException>(() => DataTypes.TryGetAdoTypeForClrType(type, out actual)); }
public void TryGetAdoTypeForClrType_UnsupportedType_IsNotConverted() { bool expected = false; var type = new ADODB.DataTypeEnum(); bool actual = DataTypes.TryGetAdoTypeForClrType(typeof(object), out type); Assert.Equal(expected, actual); }
protected ADODB.DataTypeEnum DbTypeToDataType(DbType t) { ADODB.DataTypeEnum ret = ADODB.DataTypeEnum.adChar; switch (t) { case DbType.AnsiString: ret = ADODB.DataTypeEnum.adChar; break; case DbType.Binary: ret = ADODB.DataTypeEnum.adBinary; break; case DbType.Boolean: ret = ADODB.DataTypeEnum.adBoolean; break; case DbType.Byte: ret = ADODB.DataTypeEnum.adUnsignedTinyInt; break; case DbType.Currency: ret = ADODB.DataTypeEnum.adCurrency; break; case DbType.Date: ret = ADODB.DataTypeEnum.adDate; break; case DbType.DateTime: ret = ADODB.DataTypeEnum.adDBTimeStamp; break; case DbType.Decimal: ret = ADODB.DataTypeEnum.adDecimal; break; case DbType.Double: ret = ADODB.DataTypeEnum.adDouble; break; case DbType.Guid: ret = ADODB.DataTypeEnum.adGUID; break; case DbType.Int16: ret = ADODB.DataTypeEnum.adSmallInt; break; case DbType.Int32: ret = ADODB.DataTypeEnum.adInteger; break; case DbType.Int64: ret = ADODB.DataTypeEnum.adBigInt; break; case DbType.Object: ret = ADODB.DataTypeEnum.adUserDefined; break; case DbType.SByte: ret = ADODB.DataTypeEnum.adTinyInt; break; case DbType.Single: ret = ADODB.DataTypeEnum.adSingle; break; case DbType.String: ret = ADODB.DataTypeEnum.adVarWChar; break; case DbType.StringFixedLength: ret = ADODB.DataTypeEnum.adWChar; break; case DbType.Time: ret = ADODB.DataTypeEnum.adDBTime; break; case DbType.UInt16: ret = ADODB.DataTypeEnum.adUnsignedSmallInt; break; case DbType.UInt32: ret = ADODB.DataTypeEnum.adUnsignedInt; break; case DbType.UInt64: ret = ADODB.DataTypeEnum.adUnsignedBigInt; break; case DbType.VarNumeric: ret = ADODB.DataTypeEnum.adVarNumeric; break; default: throw new ArgumentOutOfRangeException("t"); } return(ret); }
public void TryGetAdoTypeForClrType_SupportedType_IsConverted() { var expected = ADODB.DataTypeEnum.adBoolean; var actual = new ADODB.DataTypeEnum(); DataTypes.TryGetAdoTypeForClrType(typeof(bool), out actual); Assert.Equal(expected, actual); }
/// <summary> /// Get the appropriate ADODB type for a given CLR type. /// </summary> /// <param name="clrType">The CLR type to look for.</param> /// <param name="adoType">The ADODB type that matches the CLR type, if any.</param> /// <returns>True if an ADODB type was found.</returns> public static bool TryGetAdoTypeForClrType(Type clrType, out ADODB.DataTypeEnum adoType) { var type = clrType; if (type != null && clrType.IsGenericType && clrType.GetGenericTypeDefinition() == typeof(Nullable <>)) { type = Nullable.GetUnderlyingType(clrType); } return(Types.TryGetValue(type, out adoType)); }
/// <summary> /// Creates an ADODB.Recordset from an System.Collections.Generic.IEnumerable(T). /// </summary> /// <typeparam name="T">The type of the elements of input.</typeparam> /// <param name="input">The System.Collections.Generic.IEnumerable(T) to create an ADODB.Recordset from.</param> /// <returns>An ADODB.Recordset that contains elements from the input sequence.</returns> public static ADODB.Recordset ToRecordset <T>(this IEnumerable <T> input) { var adoType = new ADODB.DataTypeEnum(); if (DataTypes.TryGetAdoTypeForClrType(typeof(T), out adoType)) { throw new ArgumentException("The T of IEnumerable<T> must be a custom POCO, not an ADO compatible type.", "input"); } var rs = new ADODB.Recordset(); var type = typeof(T); BindingFlags flags = BindingFlags.Public | BindingFlags.Instance; PropertyInfo[] properties = type.GetProperties(flags); // create properties foreach (var property in properties) { if (DataTypes.TryGetAdoTypeForClrType(property.PropertyType, out adoType)) { int definedSize = 0; if (property.PropertyType == typeof(string)) { // TODO: set string size to length of longest string in POCO? definedSize = 1000; } if (property.PropertyType == typeof(Guid)) { definedSize = 38; } rs.Fields.Append(property.Name, adoType, definedSize, ADODB.FieldAttributeEnum.adFldIsNullable); } } // insert data rs.Open(); if (input.Any()) { foreach (var item in input) { rs.AddNew(); foreach (var property in properties) { var value = property.GetValue(item, null); if (property.PropertyType == typeof(Guid)) { value = value.ToString(); } if (value != null) { rs.Fields[property.Name].Value = value; } } rs.Update(); } } return(rs); }
private DbType GetDbType(ADODB.DataTypeEnum type) { switch (type) { case ADODB.DataTypeEnum.adBigInt: return(DbType.Int64); case ADODB.DataTypeEnum.adBinary: return(DbType.Binary); case ADODB.DataTypeEnum.adBoolean: return(DbType.Boolean); case ADODB.DataTypeEnum.adBSTR: return(DbType.AnsiString); case ADODB.DataTypeEnum.adChapter: return(DbType.Object); // TODO: Investigate data type. case ADODB.DataTypeEnum.adChar: return(DbType.AnsiStringFixedLength); case ADODB.DataTypeEnum.adCurrency: return(DbType.Currency); case ADODB.DataTypeEnum.adDate: return(DbType.DateTime); case ADODB.DataTypeEnum.adDBDate: return(DbType.DateTime); case ADODB.DataTypeEnum.adDBTime: return(DbType.Time); case ADODB.DataTypeEnum.adDBTimeStamp: return(DbType.Binary); case ADODB.DataTypeEnum.adDecimal: return(DbType.Decimal); case ADODB.DataTypeEnum.adDouble: return(DbType.Decimal); case ADODB.DataTypeEnum.adEmpty: return(DbType.Object); // TODO: Investigate data type. case ADODB.DataTypeEnum.adError: return(DbType.Object); // TODO: Investigate data type. case ADODB.DataTypeEnum.adFileTime: return(DbType.Object); // TODO: Investigate data type. case ADODB.DataTypeEnum.adGUID: return(DbType.Guid); case ADODB.DataTypeEnum.adIDispatch: return(DbType.Object); // TODO: Investigate data type. case ADODB.DataTypeEnum.adInteger: return(DbType.Int32); case ADODB.DataTypeEnum.adIUnknown: return(DbType.Object); // TODO: Investigate data type. case ADODB.DataTypeEnum.adLongVarBinary: return(DbType.Binary); case ADODB.DataTypeEnum.adLongVarChar: return(DbType.String); case ADODB.DataTypeEnum.adLongVarWChar: return(DbType.String); case ADODB.DataTypeEnum.adNumeric: return(DbType.Decimal); case ADODB.DataTypeEnum.adPropVariant: return(DbType.Object); case ADODB.DataTypeEnum.adSingle: return(DbType.Decimal); case ADODB.DataTypeEnum.adSmallInt: return(DbType.Int16); case ADODB.DataTypeEnum.adTinyInt: return(DbType.SByte); case ADODB.DataTypeEnum.adUnsignedBigInt: return(DbType.UInt64); case ADODB.DataTypeEnum.adUnsignedInt: return(DbType.UInt32); case ADODB.DataTypeEnum.adUnsignedSmallInt: return(DbType.UInt16); case ADODB.DataTypeEnum.adUnsignedTinyInt: return(DbType.Byte); case ADODB.DataTypeEnum.adUserDefined: return(DbType.Object); case ADODB.DataTypeEnum.adVarBinary: return(DbType.Binary); case ADODB.DataTypeEnum.adVarChar: return(DbType.AnsiString); case ADODB.DataTypeEnum.adVariant: return(DbType.Object); case ADODB.DataTypeEnum.adVarNumeric: return(DbType.Decimal); case ADODB.DataTypeEnum.adVarWChar: return(DbType.String); case ADODB.DataTypeEnum.adWChar: return(DbType.StringFixedLength); default: return(DbType.Object); } }
public static bool TryGetAdoTypeForClrType(Type clrType, out ADODB.DataTypeEnum adoType) { return(Types.TryGetValue(clrType, out adoType)); }