Zmena základnej triedy TableAdapter v zadanej množine údajov

Dátum vytvorenia strany :

Kód na vytvorenie a generovanie zadanej množiny údajov

Zadaná množina údajov umožňuje vytvoriť DataTable, ktorý má typ informácie pre každý stĺpec na základe SQL alebo TableAdapter, ktorý zjednodušuje interakciu údajov s DB na základe zadaného DataTable.

Vzhľadom k tomu, že účelom nie je vytvoriť zadali množinu údajov tu, poďme rýchlo vytvoriť množinu údajov s databázou a tabuľky pripravené pre teraz. Môžete tiež urobiť, čo chcete vyložiť stola.

Prvým krokom je pridanie množiny údajov ako novej položky do projektu. Názov je niečo, ale je tu vľavo.

Otvorte množinu údajov a pridajte TableAdapter z návrhára.

Postupujte podľa sprievodcu vytvoriť DataTable a TableAdapter.

Myslím, že nasledujúci formulár môže byť príkladom načítanie a používanie záznamov z databázy pomocou DataTable a TableAdapter, ktoré ste vytvorili. (To je len príklad.)

public Form1()
{
  InitializeComponent();

  using (var adapter = new 金額集計TestTableAdapter())
  {
    var table = adapter.GetData();

    foreach (var row in table)
    {
      Trace.WriteLine(string.Format("{0}:{1}", row.年月, row.金額));
    }
  }
}

Projekt, ktorý používa túto množinu údajov, zvyčajne obsahuje menej ako jednu tabuľku a vytvára množstvo množín údajov, ktoré kombinujú počet tabuliek alebo viacerých tabuliek. Myslím si, že je to spoločná izácia spracovania prísť, keď sa to stane. Napríklad, možno budete chcieť dynamicky zmeniť SQL použité interne zmeniť podmienky pre načítanie záznamov.

Avšak, TableAdapter trieda vytvorená z množiny údajov je skutočne automaticky generované kódom. Tiež, pretože tento TableAdapter trieda zdedí komponent triedy, neexistujú žiadne metódy alebo vlastnosti, ktoré môžu byť použité v reálnom bežné. Základnú triedu nemôžete odovzdať metóde nazývať operáciu súvisiacu s TableAdapter.

Okrem toho, SQL používa interne, SqlDataAdapter používa na prístup k databáze, atď sú deklarované v chránenom, takže sa nemôžete dotknúť zvonku.

Avšak, ako ste deklarovať pre metódy a vlastnosti deklarované v chránenom, môžete ich dotknúť vytvorením triedy, ktorá zdedí TableAdapter triedy, a táto trieda TableAdapter má čiastočný modifikátor, takže môžete vyhlásiť inú metódu alebo vlastnosť rozšíriť proces. Môžete tiež vytvoriť novú vlastnosť získať interné vlastníctvo, ako v nasledujúcom kóde:

using System.Data.SqlClient;
namespace DataSetBaseAdapter {
    public partial class DataSet1 {
    }
}

namespace DataSetBaseAdapter.DataSet1TableAdapters
{
  public partial class 金額集計TestTableAdapter
  {
    public SqlDataAdapter InnerAdapter
    {
      get { return Adapter; }
    }
  }
}

Môžete skutočne použiť tento TableAdapter vidieť, že máte prístup k rozšírenej vlastnosti.

Prístup k vnútorným vlastnostiach však neznamená, že proces je bežný a stále musíte napísať kód pre každú množinu údajov, ktorú vytvoríte.

Zmena základnej triedy tabuľového adaptéra

Ako už bolo spomenuté, trieda TableAdapter zdedí komponent triedy, takže je ťažké zdieľať spracovanie. Ak zmeníte časť kódu, ktorá zdedí triedu, kód sa automaticky generuje, takže aktualizácia množiny údajov znova vráti kód. Ak môžete, môžete napísať čiastočnú triedu, ktorá zdedí rozhranie v samostatnom súbore, ale to nedáva moc zmysel, pretože musíte napísať toľko Tableadaptérov, ako ste vytvorili.

V skutočnosti existuje mechanizmus na zmenu zdedenie triedy tohto TableAdapter. Chcel by som vysvetliť postup.

Najprv vytvorte triedu, ktorú chcete zdediť. TableAdapter pôvodne zdedil triedu súčastí, takže by ste mali zdediť triedu súčastí, aj keď ju vytvoríte. Napíšem kód chcem zdieľať tu, ale budem len napísať triedu. Zápas priestor názvov na to, čo ste vytvorili.

using System.ComponentModel;

namespace DataSetBaseAdapter
{
  public class BaseAdapter : Component
  {
  }
}

Potom otvorte DataSet Designer a vyberte TableAdapter, ktorý ste vytvorili.

Kliknutím pravým tlačidlom myši otvorte vlastnosť. Tam je nehnuteľnosť s názvom BaseClass, ktorá by mala byť spočiatku "System. ComponentModel. Component". Prepísať túto triedu, ktorú ste práve vytvorili. Napíšem všetko, vrátane priestoru názvov.

Ak ho uložíte, uvidíte, že základná trieda tabuľového adaptéra sa zmenila. Nastavením tohto pre každý TableAdapter, môžete napísať spoločné spracovanie základnej triedy.

Napríklad, ak chcete získať prístup k internej SQL alebo SQLDataAdapter, napíšte: Adaptéry a CommandCollections, ktoré sú vytvorené automaticky sú len vlastnosti vytvorené dedičalebo triedy, takže sa nedá dotknúť priamo dedor. Nasledujúci kód používa odraz prinútiť prístup.

using System.ComponentModel;
using System.Data.SqlClient;
using System.Reflection;

namespace DataSetBaseAdapter
{
  public class BaseAdapter : Component
  {
    public SqlDataAdapter InnerAdapter
    {
      get
      {
        return (SqlDataAdapter)GetType().GetProperty("Adapter",
          BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null);
      }
    }

    public SqlCommand[] InnerCommandCollection
    {
      get
      {
        return (SqlCommand[])GetType().GetProperty("CommandCollection",
          BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null);
      }
    }
  }
}

Môžete vidieť, že môžete skutočne použiť TableAdapter pre prístup k vlastnosti zdedené triedy.