diff --git a/src/NHibernate/AdoNet/FirebirdDbDataReader.cs b/src/NHibernate/AdoNet/FirebirdDbDataReader.cs
new file mode 100644
index 0000000000..9ff2940b85
--- /dev/null
+++ b/src/NHibernate/AdoNet/FirebirdDbDataReader.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Data.Common;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using NHibernate.Id.Insert;
+
+namespace NHibernate.AdoNet
+{
+ public class FirebirdDbDataReader : DbDataReaderWrapper
+ {
+ public FirebirdDbDataReader(DbDataReader reader) : base(reader) { }
+
+ public override DateTime GetDateTime(int ordinal)
+ {
+ var value = DataReader[ordinal];
+
+ return value switch
+ {
+ string s => DateTime.Parse(s, CultureInfo.InvariantCulture),
+ _ => (DateTime) value
+ };
+ }
+ }
+}
diff --git a/src/NHibernate/Async/Driver/FirebirdClientDriver.cs b/src/NHibernate/Async/Driver/FirebirdClientDriver.cs
new file mode 100644
index 0000000000..86ad67e1ba
--- /dev/null
+++ b/src/NHibernate/Async/Driver/FirebirdClientDriver.cs
@@ -0,0 +1,40 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by AsyncGenerator.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using System.Linq;
+using System.Reflection;
+using System.Text.RegularExpressions;
+using NHibernate.AdoNet;
+using NHibernate.Dialect;
+using NHibernate.SqlCommand;
+using NHibernate.SqlTypes;
+using NHibernate.Util;
+using Environment = NHibernate.Cfg.Environment;
+
+namespace NHibernate.Driver
+{
+ using System.Threading.Tasks;
+ using System.Threading;
+ public partial class FirebirdClientDriver : ReflectionBasedDriver
+ {
+
+ public override async Task ExecuteReaderAsync(DbCommand command, CancellationToken cancellationToken)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ var reader = await (command.ExecuteReaderAsync(cancellationToken)).ConfigureAwait(false);
+
+ return new FirebirdDbDataReader(reader);
+ }
+ }
+}
diff --git a/src/NHibernate/Driver/FirebirdClientDriver.cs b/src/NHibernate/Driver/FirebirdClientDriver.cs
index e2859880ad..6b67e567da 100644
--- a/src/NHibernate/Driver/FirebirdClientDriver.cs
+++ b/src/NHibernate/Driver/FirebirdClientDriver.cs
@@ -5,6 +5,7 @@
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
+using NHibernate.AdoNet;
using NHibernate.Dialect;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
@@ -17,7 +18,7 @@ namespace NHibernate.Driver
/// A NHibernate Driver for using the Firebird data provider located in
/// FirebirdSql.Data.FirebirdClient assembly.
///
- public class FirebirdClientDriver : ReflectionBasedDriver
+ public partial class FirebirdClientDriver : ReflectionBasedDriver
{
private const string SELECT_CLAUSE_EXP = @"(?<=\bselect\b|\bwhere\b).*";
private const string CAST_PARAMS_EXP =
@@ -212,5 +213,12 @@ public void ClearPool(string connectionString)
/// See http://tracker.firebirdsql.org/browse/DNET-766.
///
public override bool SupportsEnlistmentWhenAutoEnlistmentIsDisabled => false;
+
+ public override DbDataReader ExecuteReader(DbCommand command)
+ {
+ var reader = command.ExecuteReader();
+
+ return new FirebirdDbDataReader(reader);
+ }
}
}