/// <summary>
 /// NewDataReader
 /// </summary>
 public static IWhizzDataReader NewDataReader(IDataReader reader, string name, DataStorageType storageType)
 {
     IWhizzDataReader dataReader = null;
     switch (storageType)
     {
         case DataStorageType.Firebird:
             dataReader = new FirebirdDataReader(reader, name);
             break;
         case DataStorageType.SQLServer:
             dataReader = new SQLServerDataReader(reader, name);
             break;
     }
     return dataReader;
 }
        /// <summary>
        /// Executes the current command and returns a SafeDataReader 
        /// so the caller can iterate through the returned data.
        /// </summary>
        public IWhizzDataReader ExecuteReader()
        {
            CheckDisposedState();

            //Make sure if the user tries to open a second DataReader on the same
            //connection that we throw an exception.  This is probably due to a
            //programming error which needs to be fixed.
            if (this.DataReader != null)
            {
                throw new Exception();
            }

            FbDataReader reader = null;
            try
            {
                // Execute the reader...
                reader = this.Command.ExecuteReader();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // Make it safe...
            this.DataReader = new FirebirdDataReader(reader, this.connection.Database);

            // Return...
            return this.DataReader;
        }
        /// <summary>
        /// Executes the current command and returns a SafeDataReader 
        /// so the caller can iterate through the returned data.
        /// Specifies a timeout value, in seconds...
        /// </summary>
        public IWhizzDataReader ExecuteReader(int timeOut)
        {
            CheckDisposedState();

            //Make sure if the user tries to open a second DataReader on the same
            //connection that we throw an exception.  This is probably due to a
            //programming error which needs to be fixed.
            if (this.DataReader != null)
            {
                throw new Exception();
            }

            //Execute the datareader and store a reference so that we can close
            //the reader gracefully in the future.

            // Set the timeout...
            this.Command.CommandTimeout = timeOut;

            FbDataReader reader = null;

            try
            {
                // Execute the reader...
                reader = this.Command.ExecuteReader();
            }
            catch (ThreadAbortException ex)
            {
                throw new Exception(ex.Message);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // Make it safe...
            this.DataReader = new FirebirdDataReader(reader, this.connection.Database);

            // Return...
            return this.DataReader;
        }
 /// <summary>
 /// Checks if the data reader object of this FirebirdDBProvider is disposed and, if not, closes it and disposes it.
 /// This is needed for code that plans to execute a reader more than once on the same provider object, as
 /// this FirebirdDBProvider only allows one instance of a reader to exist at a time.
 /// </summary>
 public void CloseDataReader()
 {
     if (this.DataReader != null)
     {
         this.DataReader.Dispose();
         this.DataReader = null;
     }
 }