using System; using System.Data; using System.Diagnostics.CodeAnalysis; using SDA.DataProvider.Core; namespace SDA.DataProvider { /// /// Adatbázis lekérdezések eredményhalmazának felolvasását végző osztály. /// public class SDADataReader : IDisposable { internal SDADataReaderWrapper Reader; internal SDADataReader() { } internal SDADataReader(SDADataReaderWrapper reader) { Reader = reader; } bool _disposed; /// /// Explicit destruktor. /// /// Programozott felszabadítás? protected virtual void Dispose(bool disposing) { if (_disposed) { return; } if (disposing) { if (Reader != null) { Reader.Dispose(); Reader = null; } } _disposed = true; } /// /// Eldobja az objektumot. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// Lezárja az objektumot. /// public void Close() { Reader.Close(); } /// /// A következő rekordra áll. /// /// public bool Read() { return Reader.Read(); } /// /// A következő eredményre áll. /// /// True, ha van még eredmény; egyébként False. public bool NextResult() { return Reader.NextResult(); } /// /// Megvizsgálja, hogy a jelenlegi rekord adott oszlopának van-e értéke. /// /// Az oszlop sorszáma /// True, ha nincs értéke; egyébként False public bool IsDBNull(int index) { return Reader.IsDBNull(index); } /// /// A megadott oszlop értékét logikai típusként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public bool GetBoolean(int index) { return Reader.GetBoolean(index); } /// /// A megadott oszlop értékét bájtként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public byte GetByte(int index) { return Reader.GetByte(index); } /// /// A megadott oszlop értékét karakterként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public char GetChar(int index) { return Reader.GetChar(index); } /// /// A megadott oszlop értékét dátum-időként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public DateTime GetDateTime(int index) { return Reader.GetDateTime(index); } /// /// A megadott oszlop értékét számként (decimal) adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public decimal GetDecimal(int index) { return Reader.GetDecimal(index); } /// /// A megadott oszlop értékét lebegőpontos típusként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public double GetDouble(int index) { return Reader.GetDouble(index); } /// /// A megadott oszlop értékét 16 bites előjeles egész típusként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public short GetInt16(int index) { return Reader.GetInt16(index); } /// /// A megadott oszlop értékét 32 bites egész típusként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public int GetInt32(int index) { return Reader.GetInt32(index); } /// /// A megadott oszlop értékét 64 bites egész típusként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public long GetInt64(int index) { return Reader.GetInt64(index); } /// /// A megadott oszlop értékét karakterláncként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public string GetString(int index) { return Reader.GetString(index); } /// /// A megadott oszlop értékét karakterláncként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public string GetLongString(int index) { return Reader.GetLongString(index); } /// /// A megadott oszlop értékét objektumként adja vissza. /// /// Az oszlop sorszáma /// Az oszlop értéke public object GetValue(int index) { return Reader.GetValue(index); } /// /// A megadott oszlop Guid értékét adja vissza. /// /// Az oszlop sorszáma /// Az oszlop Guid értéke public Guid GetGuid(int index) { return Reader.GetGuid(index); } /// /// Visszaadja a jelenlegi rekord összes oszlopának értékét. /// /// Objektumtömb, amibe az értékeket kell másolni /// Tömbbe másolt objektumok száma public int GetValues(object[] values) { return Reader.GetValues(values); } /// /// Visszaadja az objektum metaadatait. /// /// Egy DataTable objektum, ami az oszlopok leírását tartalmazza [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] public DataTable GetSchemaTable() { return Reader.GetSchemaTable(); } /// /// Visszaadja a megadott nevű oszlop értékét. /// public object this[string name] => Reader[name]; /// /// Visszaadja a megadott indexű oszlop értékét. /// public object this[int index] { get { return Reader[index]; } } /// /// Lezárult-e az olvasás? /// public bool IsClosed { get { return Reader.IsClosed; } } /// /// Az aktuális sor oszlopainak száma. /// public int FieldCount { get { return Reader.FieldCount; } } /// /// Megadja egy mező indexét. /// /// A kért mező neve /// Az oszlop indexe public int GetOrdinal(string fieldName) { return Reader.GetOrdinal(fieldName); } #region Nem szabványos kényelmi funkciók /// /// A megadott oszlop értékét logikai típusként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public bool? GetBoolean(int index, bool? defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetBoolean(index); } /// /// A megadott oszlop értékét bájtként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public byte? GetByte(int index, byte? defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetByte(index); } /// /// A megadott oszlop értékét karakterként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public char? GetChar(int index, char? defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetChar(index); } /// /// A megadott oszlop értékét dátum-időként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public DateTime? GetDateTime(int index, DateTime? defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetDateTime(index); } /// /// A megadott oszlop értékét számként (decimal) adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public decimal? GetDecimal(int index, decimal? defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetDecimal(index); } /// /// A megadott oszlop értékét lebegőpontos típusként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public double? GetDouble(int index, double? defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetDouble(index); } /// /// A megadott oszlop értékét 16 bites előjeles egész típusként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public short? GetInt16(int index, short? defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetInt16(index); } /// /// A megadott oszlop értékét 32 bites egész típusként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public int? GetInt32(int index, int? defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetInt32(index); } /// /// A megadott oszlop értékét 64 bites egész típusként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public long? GetInt64(int index, long? defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetInt64(index); } /// /// A megadott oszlop értékét karakterláncként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public string GetString(int index, string defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetString(index); } /// /// A megadott oszlop értékét objektumként adja vissza. /// /// Az oszlop sorszáma /// Null esetén mivel térjen vissza. /// Az oszlop értéke public object GetValue(int index, object defaultValue) { return IsDBNull(index) ? defaultValue : Reader.GetValue(index); } #endregion } }