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