Tabletiadapteri alusklassi muutmine tipitud andmekogumis

Lehe loomise kuupäev :

Kood luua ja luua tipitud DataSet

Tipitud DataSet võimaldab teil luua DataTable, mis on Tippige teave iga veeru põhineb SQL või TableAdapter, mis lihtsustab andmete koostoime DB põhineb tipitud DataTable.

Kuna eesmärk ei ole luua tipitud DataSet siin, loome kiiresti DataSet andmebaasi ja tabeli valmis nüüd. Võite teha ka seda, mida soovite tabeli välja panna.

Esimene samm on lisada DataSet uue üksuse projekti. Nimi on midagi, kuid see on jäetud siia.

Avage DataSet ja lisage TableAdapter kujundaja.

Järgige viisardi luua DataTable ja TableAdapter.

Arvan, et järgmine vorm võib olla näiteks andmebaasi kirjete toomine ja kasutamine loodud DataTable ' i ja Tableadapteri abil. (See on lihtsalt näide.)

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

Tavaliselt on projekti, mis kasutab seda DataSet on vähem kui üks tabel ja loote palju andmekogumitest, mis ühendavad tabelite või mitme tabeli arvu. Ma arvan, et see on töötlemise ühine töötlemine, et tulla, kui see juhtub. Näiteks võib-olla soovite muuta dünaamiliselt kasutatavat SQL-i, et muuta kirjete allalaadimise tingimusi.

Kuid TableAdapter klassi loodud DataSet tegelikult luuakse automaatselt koodi. Samuti, kuna see TableAdapter klassi päriab komponendi klassi, puuduvad meetodid või atribuudid, mida saab kasutada päris levinud. Te ei saa läbida baasi klassi meetodit, et helistada tableadapter seotud toiming.

Lisaks SQL kasutatakse sisemiselt, sqldataadapter kasutada juurdepääsu andmebaasi jne on tunnistatud kaitstud, nii et sa ei saa puudutada neid väljastpoolt.

Kuid nagu te deklareerite kaitstud meetodeid ja atribuute, saate neid puudutada, luues klassi, mis pärivad TableAdapter klassi ja see TableAdapter klassi on osaline modifikaator, nii et saate deklareerida teise meetodi või atribuudi laiendada protsessi. Sisemise atribuudi saamiseks saate luua ka uue atribuudi, nagu järgmises koodis:

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

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

Te saate tegelikult kasutada seda TableAdapter, et näha, et teil on juurdepääs Laiendatud atribuute.

Kuid sisemine atribuutide juurdepääs ei tähenda, et protsess on levinud, ja teil on veel kirjutada koodi iga loodud DataSet.

Tableadapteri alusklassi muutmine

Nagu varem mainitud, TableAdapter klassi päriab komponendi klassi, mistõttu on raske jagada töötlemist. Kui muudate klassi pärivale koodi osa, on kood automaatselt loodud, nii et DataSet uuesti värskendamine tagastab koodi. Kui saate, saate kirjutada osalise klassi, mis pärivad kasutajaliidese eraldi failis, kuid see ei ole loogiline, sest sa pead kirjutama nii palju TableAdapters kui olete loonud.

Tegelikult on mehhanism muuta selle TableAdapter pärimine klassi. Ma sooviksin protseduuri seletada.

Esmalt looge klass, mida soovite pärima. TableAdapter algselt pärandas komponent klassi, nii et peaksite pärima komponendi klassi isegi siis, kui loote selle. Ma kirjutan koodi ma tahan jagada siin, kuid ma lihtsalt kirjutada klassi. Sobita nimeruumi, mida loodud.

using System.ComponentModel;

namespace DataSetBaseAdapter
{
  public class BaseAdapter : Component
  {
  }
}

Seejärel avage DataSet kujundaja ja valige TableAdapter, mille lõite.

Paremklõpsake atribuudi avamiseks. Seal on kinnisvara nimega BaseClass, mis peaks esialgu olema "System. ComponentModel. komponent". Kirjuta see äsja loodud klassile ümber. Ma kirjutan kõik, sealhulgas nimeruumi.

Kui salvestate selle, näete, et Tableadapteri Alusklass on muutunud. Määrates selle iga TableAdapter, saate kirjutada levinud töötlemise baasi klassi.

Näiteks kui soovite pääseda sisemise SQL-i või SQLDataAdapter, kirjutage: Adapterid ja CommandCollections, mis on loodud automaatselt on ainult atribuudid, mis on loodud päritav klassi, nii et neid ei saa puudutada otse päritor. Järgmine kood kasutab peegeldus juurdepääsu.

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

Näete, et saate tegelikult kasutada TableAdapter päritud klassi atribuutide juurdepääsuks.