Spreminjanje osnovnega razreda TableAdapter v tipkano zbirko podatkov

Datum ustvarjanja strani :

Koda za ustvarjanje in ustvarjanje vnesenega nabora podatkov

Natipkan DataSet vam omogoča, da ustvarite DataTable, ki ima vrsto informacij za vsak stolpec, ki temelji na SQL, ali TableAdapter, ki poenostavi podatkovno interakcijo s DB, ki temelji na natipkan DataTable.

Ker namen ni ustvariti natipkan DataSet tukaj, let ' s hitro ustvariti DataSet z bazo podatkov in miza pripravljena za zdaj. Prav tako lahko storite vse, kar želite, da se določi tabelo.

Prvi korak je, da v projekt dodate nabor podatkov kot nov element. Ime je vse, kar je ostalo tukaj.

Odprite DataSet in dodajte TableAdapter iz oblikovalnika.

Sledite čarovniku za ustvarjanje DataTable in TableAdapter.

Mislim, da je naslednji obrazec lahko primer pridobivanje in uporabo zapisov iz baze podatkov z DataTable in TableAdapter, ki ste ga ustvarili. (To je samo primer.)

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.金額));
    }
  }
}

Običajno ima projekt, ki uporablja ta nabor podatkov, manj kot eno tabelo in ustvarite številne nize podatkov, ki združujejo število tabel ali več tabel. Mislim, da je skupna ization obdelave, da pridejo gor, ko se to zgodi. Morda boste na primer želeli dinamično spremeniti SQL, ki se uporablja interno, da bi spremenili pogoje za pridobivanje zapisov.

Vendar pa je razred TableAdapter, ustvarjen iz nabora podatkov, dejansko samodejno ustvarjen s kodo. Prav tako, ker ta razred TableAdapter podedovali razred Component, ni nobenih metod ali lastnosti, ki se lahko uporabljajo v realnem skupno. Osnovnega razreda ne morete prenesti na način, ki bi poklical operacijo, povezano z namiznimi vmesniki.

Poleg tega, SQL uporablja interno, sqldataadapter uporablja za dostop do baze podatkov, itd so prijavljeni v zaščiteni, tako da jih ne morete dotakniti od zunaj.

Vendar, ko izjavljamo za metode in lastnosti, prijavljene v zaščitenem, se jih lahko dotaknete tako, da ustvarite razred, ki dedi razred TableAdapter, in ta razred TableAdapter ima delni modifikator, tako da lahko deklarirate drugo metodo ali lastnost, da razširite postopek. Ustvarite lahko tudi novo lastnost, da dobite notranjo lastnost, tako kot v naslednji kodi:

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

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

Vi moči zdaj raba to TableAdapter zagledati to vi življati postranski v razširiti premožen.

Vendar pa dostop do notranjih lastnosti ne pomeni, da je proces pogost, in še vedno morate napisati kodo za vsak nabor podatkov, ki ga ustvarite.

Spreminjanje osnovnega razreda TableAdapter

Kot je bilo že omenjeno, razred TableAdapter dedi razred Component, zaradi česar je težko deliti obdelavo. Če spremenite del kode, ki dedira razred, je koda samodejno ustvarjena, tako da posodobitev DataSet ponovno vrne kodo. Če vi moči, vi moči napisati a delni sloj to podedovali se vmesna ploskev v a oddeljen pila, šele to doesnt ' izdelovanje veliko čut zato ker vi življati pisati prav toliko Tableadapterji kot youve ' zagnati krik in vik.

V bistvu, obstaja mehanizem za spremembo podedovali razred tega TableAdapter. Rad bi razložil postopek.

Najprej ustvarite razred, ki ga želite podedovati. TableAdapter je prvotno podedoval razred Component, zato morate podedovati razred Component, tudi če ga ustvarite. Bom napisati kodo želim deliti tukaj, ampak bom samo napisati razred. Ujemanje imenskega prostora s tem, kar ste ustvarili.

using System.ComponentModel;

namespace DataSetBaseAdapter
{
  public class BaseAdapter : Component
  {
  }
}

Nato odprite Oblikovalnik DataSet in izberite TableAdapter, ki ste ga ustvarili.

Če želite odpreti lastnost, kliknite z desno tipko miške. Obstaja lastnost, imenovano BaseClass, ki naj bi sprva "System. ComponentModel. komponenta". Reportaža to v razred, ki ste ga pravkar ustvarili. Pisal bom vse, vključno z imenskim prostorom.

Če ga shranite, boste videli, da se je osnovni razred TableAdapter spremenil. Z nastavitvijo tega za vsak TableAdapter, lahko pišete skupno obdelavo v osnovni razred.

Če želite na primer dostopati do notranjega SQL ali SQLDataAdapter, napišite: Adapterji in ukazne zbirke, ki so ustvarjene samodejno, so le lastnosti, ki jih je ustvaril razred podedoval, tako da jih ni mogoče dotakniti neposredno od naslednika. Naslednja koda uporablja odsev za vsiljenje dostopa.

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);
      }
    }
  }
}

Lahko vidite, da lahko dejansko uporabite TableAdapter za dostop do lastnosti podedovanega razreda.