using System;
using System.Data;
using System.Globalization;
using SDA.DataProvider.Core;
namespace SDA.DataProvider
{
///
/// Adapter
///
public class SDADataAdapter : IDisposable
{
internal SDADataAdapterWrapper DataAdapter;
internal SDACommand InnerDeleteCommand;
internal SDACommand InnerInsertCommand;
internal SDACommand InnerSelectCommand;
internal SDACommand InnerUpdateCommand;
///
/// Előállít egy új adatbázis-kapcsolat példányt.
///
public SDADataAdapter()
{
if (SDAFactory.Instance == null)
{
throw new InvalidOperationException("SDAFactory.Instance");
}
DataAdapter = SDAFactory.Instance.CreateDataAdapter();
}
///
/// Előállít egy új adatbázis-kapcsolat példányt.
///
/// Az adatbázis-kezelő típusa.
public SDADataAdapter(DatabaseType type) : this(type, null)
{
}
///
/// Előállít egy új adatbázis-kapcsolat példányt.
///
/// Az adatbázis-kezelő típusa.
public SDADataAdapter(DatabaseType type, int? commandTimeout)
{
DataAdapter = SDAFactory.GetByDatabaseType(type, commandTimeout).CreateDataAdapter();
}
///
/// Törléshez használt parancsobjektum.
///
public SDACommand DeleteCommand
{
get
{
return InnerDeleteCommand;
}
set
{
DataAdapter.DeleteCommand = value?.Command;
InnerDeleteCommand = value;
}
}
///
/// Beszúráshoz használt parancsobjektum.
///
public SDACommand InsertCommand
{
get
{
return InnerInsertCommand;
}
set
{
DataAdapter.InsertCommand = value?.Command;
InnerInsertCommand = value;
}
}
///
/// Lekérdezéshez használt parancsobjektum.
///
public SDACommand SelectCommand
{
get
{
return InnerSelectCommand;
}
set
{
DataAdapter.SelectCommand = value?.Command;
InnerSelectCommand = value;
}
}
///
/// Módosításhoz használt parancsobjektum.
///
public SDACommand UpdateCommand
{
get
{
return InnerUpdateCommand;
}
set
{
DataAdapter.UpdateCommand = value?.Command;
InnerUpdateCommand = value;
}
}
///
/// Feltölti adattal a táblát.
///
/// A feltöltendő tábla
public void Fill(DataTable table)
{
DataAdapter.Fill(table);
}
///
/// Feltölti adattal a táblát
///
/// A feltöltendő tábla
/// Az első rekord indexe
/// Az utolsó rekord indexe
/// Nem szabványos metódus!
public void Fill(DataTable table, int startRecord, int endRecord)
{
if (table == null)
{
throw new ArgumentNullException(nameof(table));
}
table.TableName = "table";
using (DataSet dts = new DataSet())
{
dts.Locale = CultureInfo.CurrentCulture;
dts.Tables.Add(table);
DataAdapter.Fill(dts, startRecord, endRecord, "table");
}
}
///
/// Feltölti adattal a táblát
///
/// A feltöltendő adathalmaz
public void Fill(DataSet dataSet)
{
DataAdapter.Fill(dataSet);
}
///
/// Frissíti az adatbázist.
///
/// A forrás adathalmaz
public void Update(DataSet dataSet)
{
DataAdapter.Update(dataSet);
}
///
/// Frissíti az adatbázist.
///
/// A forrás tábla
public void Update(DataTable dataTable)
{
DataAdapter.Update(dataTable);
}
bool _disposed;
///
/// Explicit destruktor.
///
/// Programozott felszabadítás?
protected virtual void Dispose(bool disposing)
{
if (_disposed)
{
return;
}
if (disposing)
{
InnerDeleteCommand = null;
InnerInsertCommand = null;
InnerSelectCommand = null;
InnerUpdateCommand = null;
if (DataAdapter != null)
{
DataAdapter.Dispose();
DataAdapter = null;
}
}
_disposed = true;
}
///
/// Eldobja az objektumot.
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}