using System;
using System.Data;
using System.Data.Common;

namespace TwoLayer.DataAccess
{
   /// <summary>
   /// 
   /// </summary>
   public class PublisherDA : AbstractDA
   {

      protected override string SelectStatement
      {
         get { return "SELECT PublisherId, PublisherName FROM Publishers"; }
      }

      /// <summary>
      /// Zwraca tabelę z danymi zawierającą informacje o tabeli wydawcy dla określonego identyfikatora.
      /// Ten zbiór danych będzie zawierać 0 lub 1 wiersz danych.
      /// </summary>
      public override DataTable GetById(object oId)
      {
         int id = (int)oId;

         // utwórz sparametryzowaną instrukcję zapytania
         string sql = SelectStatement + " WHERE PublisherId=@id";

         // utwórz tablicę parametrów
         DbParameter[] parameters = new DbParameter[] {
			   MakeParameter("@id", id, DbType.Int32)
			};

         // zwróć wynik
         return GetDataTable(sql, parameters);
      }

      /// <summary>
      /// Zwraca tabelę z danymi zawierającą informacje o tabeli wydawcy dla określonego identyfikatora.
      /// Ten zbiór danych będzie zawierać 0 lub 1 wiersz danych.
      /// </summary>
      public DataTable GetByName(string name)
      {
         // utwórz sparametryzowaną instrukcję zapytania
         string sql = SelectStatement + " WHERE PublisherName=@name";

         // utwórz tablicę parametrów
         DbParameter[] parameters = new DbParameter[] {
			   MakeParameter("@name", name, DbType.String)
			};

         // zwróć wynik
         return GetDataTable(sql, parameters);
      }


      public void UpdatePublisher(int publisherId, string publisherName)
      {
         string sql = "UPDATE Publishers SET PublisherName=@PublisherName";
         sql += " WHERE PublisherId=@PublisherId";

         // utwórz tablicę parametrów
         DbParameter[] parameters = new DbParameter[] {
            MakeParameter("@PublisherId", publisherId, DbType.Int32),
            MakeParameter("@PublisherName", publisherName, DbType.String)
			};

         // uruchom określoną instrukcję
         RunNonQuery(sql, parameters);
      }

      public void InsertPublisher(string publisherName)
      {
         string sql = "INSERT INTO Publishers (PublisherName) ";
         sql += " VALUES (@PublisherName)";

         // utwórz tablicę parametrów
         DbParameter[] parameters = new DbParameter[] {
            MakeParameter("@PublisherName", publisherName, DbType.String)
			};

         // uruchom określoną instrukcję
         RunNonQuery(sql, parameters);
      }

      public void DeletePublisher(int publisherId)
      {
         string sql = "DELETE FROM Publishers WHERE PublisherId=@PublisherId";

         // utwórz tablicę parametrów
         DbParameter[] parameters = new DbParameter[] {
            MakeParameter("@PublisherId", publisherId, DbType.Int32)
			};

         // uruchom określoną instrukcję
         RunNonQuery(sql, parameters);
      }

   }
}