public OracleDataReader(IDataReader dbDataReader)
        {
            if (dbDataReader == null)   
                throw new ArgumentNullException("dbDataReader");

            _reader = (DbDataReader) dbDataReader;
            _readerType = _reader.GetType();
        }
Exemplo n.º 2
0
        protected override System.Data.Spatial.DbSpatialDataReader GetDbSpatialDataReader(DbDataReader fromReader, string manifestToken)
        {
            if (fromReader == null)
                throw new ArgumentNullException("fromReader must not be null");

            ValidateVersion(manifestToken);

            SqlDataReader underlyingReader = fromReader as SqlDataReader;
            if (underlyingReader == null)
            {
                throw new ArgumentException(
                    string.Format(
                        "Spatial readers can only be produced from readers of type SqlDataReader.   A reader of type {0} was provided.",
                        fromReader.GetType()));
            }

            return new SqlSpatialDataReader(underlyingReader);
        }
        protected override Spatial.DbSpatialDataReader GetDbSpatialDataReader(DbDataReader fromReader, string versionHint) 
        {    
            EntityUtil.CheckArgumentNull(fromReader, "fromReader");

            ValidateVersionHint(versionHint);

            SqlDataReader underlyingReader = fromReader as SqlDataReader;
            if (underlyingReader == null)
            {
                throw EntityUtil.ProviderIncompatible(Strings.SqlProvider_NeedSqlDataReader(fromReader.GetType()));
            }


             return new SqlSpatialDataReader(underlyingReader);
        }
Exemplo n.º 4
0
		/// <summary>
		/// Execute a command against a data source, mapping the data reader GetSchemaTable() result to an enumerable of record dictionaries.
		/// This method perfoms LAZY LOADING/DEFERRED EXECUTION.
		/// Note that THE DATA READER WILL NOT BE DISPOSED UPON ENUMERATION OR FOREACH BRANCH OUT.
		/// </summary>
		/// <param name="dbDataReader"> The target data reader. </param>
		/// <param name="recordsAffectedCallback"> Executed when the output count of records affected is available to return (post enumeration). </param>
		/// <returns> An enumerable of record dictionary instances, containing key/value pairs of schema metadata. </returns>
		public IEnumerable<IRecord> GetSchemaRecordsFromReader(DbDataReader dbDataReader, Action<int> recordsAffectedCallback)
		{
			ReadOnlyCollection<DbColumn> dbColumns;
			DbColumn dbColumn;
			PropertyInfo[] propertyInfos;
			PropertyInfo propertyInfo;
			Record record;
			int recordsAffected;
			string key;
			object value;

			OnlyWhen._PROFILE_ThenPrint(string.Format("{0}::GetSchemaRecordsFromReader(...): enter", typeof(AdoNetStreamingFascade).Name));

			if ((object)dbDataReader == null)
				throw new ArgumentNullException(nameof(dbDataReader));

			OnlyWhen._PROFILE_ThenPrint(string.Format("{0}::GetSchemaRecordsFromReader(...): before yield", typeof(AdoNetStreamingFascade).Name));

			if (!dbDataReader.CanGetColumnSchema())
				throw new NotSupportedException(string.Format("The connection command type '{0}' does not support schema access.", dbDataReader.GetType().FullName));

			dbColumns = dbDataReader.GetColumnSchema();
			{
				OnlyWhen._PROFILE_ThenPrint(string.Format("{0}::GetSchemaRecordsFromReader(...): use table", typeof(AdoNetStreamingFascade).Name));

				if ((object)dbColumns != null)
				{
					for (int index = 0; index < dbColumns.Count; index++)
					{
						dbColumn = dbColumns[index];

						propertyInfos = dbColumn.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);

						record = new Record();
						record.Context = dbColumn;

						if ((object)propertyInfos != null)
						{
							for (int i = 0; i < propertyInfos.Length; i++)
							{
								propertyInfo = propertyInfos[i];

								if (propertyInfo.GetIndexParameters().Any())
									continue;

								key = propertyInfo.Name;
								value = propertyInfo.GetValue(dbColumn);
								value = value.ChangeType<object>();

								record.Add(key, value);
							}
						}

						OnlyWhen._PROFILE_ThenPrint(string.Format("{0}::GetSchemaRecordsFromReader(...): on yield", typeof(AdoNetStreamingFascade).Name));

						yield return record; // LAZY PROCESSING INTENT HERE / DO NOT FORCE EAGER LOAD
					}
				}

				OnlyWhen._PROFILE_ThenPrint(string.Format("{0}::GetSchemaRecordsFromReader(...): dispose table", typeof(AdoNetStreamingFascade).Name));
			}

			OnlyWhen._PROFILE_ThenPrint(string.Format("{0}::GetSchemaRecordsFromReader(...): after yield", typeof(AdoNetStreamingFascade).Name));

			recordsAffected = dbDataReader.RecordsAffected;

			if ((object)recordsAffectedCallback != null)
				recordsAffectedCallback(recordsAffected);

			OnlyWhen._PROFILE_ThenPrint(string.Format("{0}::GetSchemaRecordsFromReader(...): leave", typeof(AdoNetStreamingFascade).Name));
		}
        /// <summary>
        /// Gets a spatial data reader for SQL Server.
        /// </summary>
        /// <param name="fromReader"> The reader where the spatial data came from. </param>
        /// <param name="versionHint"> The manifest token associated with the provider manifest. </param>
        /// <returns> The spatial data reader. </returns>
        protected override DbSpatialDataReader GetDbSpatialDataReader(DbDataReader fromReader, string versionHint)
        {
            var underlyingReader = fromReader as SqlDataReader;
            if (underlyingReader == null)
            {
                throw new ProviderIncompatibleException(Strings.SqlProvider_NeedSqlDataReader(fromReader.GetType()));
            }

            return SupportsSpatial(versionHint)
                       ? new SqlSpatialDataReader(
                             GetSpatialServices(new DbProviderInfo(ProviderInvariantName, versionHint)),
                             new SqlDataReaderWrapper(underlyingReader))
                       : null;
        }
        protected override DbSpatialDataReader GetDbSpatialDataReader(DbDataReader fromReader, string versionHint)
        {
            ValidateVersionHint(versionHint);

            var underlyingReader = fromReader as SqlDataReader;
            if (underlyingReader == null)
            {
                throw new ProviderIncompatibleException(Strings.SqlProvider_NeedSqlDataReader(fromReader.GetType()));
            }
            return new SqlSpatialDataReader(GetSpatialServices(versionHint), new SqlDataReaderWrapper(underlyingReader));
        }