diff --git a/src/Spring/Spring.Scheduling.Quartz/Scheduling/Quartz/SpringDbProviderAdapter.cs b/src/Spring/Spring.Scheduling.Quartz/Scheduling/Quartz/SpringDbProviderAdapter.cs index 36587c0c..1b7f9484 100644 --- a/src/Spring/Spring.Scheduling.Quartz/Scheduling/Quartz/SpringDbProviderAdapter.cs +++ b/src/Spring/Spring.Scheduling.Quartz/Scheduling/Quartz/SpringDbProviderAdapter.cs @@ -32,7 +32,7 @@ namespace Spring.Scheduling.Quartz public class SpringDbProviderAdapter : IDbProvider { private readonly Data.Common.IDbProvider dbProvider; - private DbMetadata metadata; + private readonly DbMetadata metadata; /// /// Initializes a new instance of the class. @@ -82,13 +82,41 @@ namespace Spring.Scheduling.Quartz } } + /// + /// Helper class to map between Quartz and Spring DB metadata. + /// public class SpringMetadataAdapter : DbMetadata { - private IDbMetadata metadata; + private readonly IDbMetadata metadata; + private readonly Enum dbTypeBinary; + /// + /// Initializes a new instance of the class. + /// + /// The metadata to wrap and adapt. public SpringMetadataAdapter(IDbMetadata metadata) { this.metadata = metadata; + // determine correct binary enum type + Type parameterType = metadata.ParameterDbType; + FieldInfo blobField = parameterType.GetField("Blob"); + FieldInfo imageField = parameterType.GetField("Image"); + if (blobField != null) + { + // uses Blob, for example Oracle + dbTypeBinary = (Enum) blobField.GetValue(Activator.CreateInstance(parameterType)); + } + else if (imageField != null) + { + // uses Image, SQL Server + dbTypeBinary = (Enum) imageField.GetValue(Activator.CreateInstance(parameterType)); + } + else + { + // use standard binary type + dbTypeBinary = DbType.Binary; + } + } public override string ProductName @@ -165,7 +193,7 @@ namespace Spring.Scheduling.Quartz public override Enum DbBinaryType { - get { return DbType.Binary; } + get { return dbTypeBinary; } } public override bool UseParameterNamePrefixInParameterCollection