Αλλαγή της βασικής κλάσης ενός προσαρμογέα πίνακα σε ένα πληκτρολογηθέν Σύνολο δεδομένων

Ημερομηνία δημιουργίας σελίδας :

Κώδικας για τη δημιουργία και τη δημιουργία ενός πληκτρολογηθείτοdataSet

Ένα πληκτρολογημένο DataSet σάς επιτρέπει να δημιουργήσετε ένα DataTable που έχει πληροφορίες τύπου για κάθε στήλη που βασίζεται σε SQL ή έναν προσαρμογέα πίνακα πίνακα που απλοποιεί την αλληλεπίδραση δεδομένων με db με βάση ένα πληκτρολογημένο DataTable.

Δεδομένου ότι ο σκοπός δεν είναι να δημιουργήσετε ένα πληκτρολογηθέν DataSet εδώ, ας δημιουργήσουμε γρήγορα ένα DataSet με τη βάση δεδομένων και τον πίνακα έτοιμο για τώρα. Μπορείτε επίσης να κάνετε ό, τι θέλετε να απλώσετε το τραπέζι.

Το πρώτο βήμα είναι να προσθέσετε ένα DataSet ως νέο στοιχείο στο έργο σας. Το όνομα είναι κάθε άλλο παρά μένει εδώ.

Ανοίξτε το DataSet και προσθέστε έναν προσαρμογέα πίνακα από τη σχεδίαση.

Ακολουθήστε τον οδηγό για να δημιουργήσετε ένα DataTable και ένα TableAdapter.

Νομίζω ότι η παρακάτω φόρμα μπορεί να είναι ένα παράδειγμα ανάκτησης και χρήσης εγγραφών από τη βάση δεδομένων χρησιμοποιώντας το DataTable και tableadapter που δημιουργήσατε. (Αυτό είναι μόνο ένα παράδειγμα.)

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

Συνήθως, ένα έργο που χρησιμοποιεί αυτό το DataSet έχει λιγότερους από έναν πίνακες και δημιουργείτε πολλά DataSet που συνδυάζουν τον αριθμό των πινάκων ή πολλών πινάκων. Πιστεύω ότι είναι σύνηθες η επεξεργασία να εμφανίζεται όταν συμβαίνει. Για παράδειγμα, μπορεί να θέλετε να αλλάξετε δυναμικά την SQL που χρησιμοποιείται εσωτερικά για να αλλάξετε τις συνθήκες ανάκτησης εγγραφών.

Ωστόσο, η κλάση TableAdapter που δημιουργήθηκε από το DataSet δημιουργείται στην πραγματικότητα αυτόματα από τον κώδικα. Επίσης, επειδή αυτή η κλάση TableAdapter κληρονομεί την κλάση Component, δεν υπάρχουν μέθοδοι ή ιδιότητες που μπορούν να χρησιμοποιηθούν σε πραγματικά κοινό. Δεν μπορείτε να μεταβιβάσετε μια βασική κλάση σε μια μέθοδο για να καλέσετε μια λειτουργία που σχετίζεται με προσαρμογέα πίνακα.

Επιπλέον, sql χρησιμοποιείται εσωτερικά, sqldataadapter χρησιμοποιείται για την πρόσβαση στη βάση δεδομένων, κ.λπ.

Ωστόσο, όπως δηλώνετε για μεθόδους και ιδιότητες που δηλώνονται προστατευμένες, μπορείτε να τις αγγίξετε δημιουργώντας μια κλάση που κληρονομεί την κλάση TableAdapter και αυτή η κλάση TableAdapter έχει μερική τροποποίηση, ώστε να μπορείτε να δηλώσετε μια άλλη μέθοδο ή ιδιότητα για να επεκτείνετε τη διαδικασία. Μπορείτε επίσης να δημιουργήσετε μια νέα ιδιότητα για να λάβετε την εσωτερική ιδιότητα, όπως στον ακόλουθο κώδικα:

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

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

Μπορείτε πραγματικά να χρησιμοποιήσετε αυτόν τον προσαρμογέα πίνακα για να δείτε ότι έχετε πρόσβαση στις εκτεταμένες ιδιότητες.

Ωστόσο, η πρόσβαση σε εσωτερικές ιδιότητες δεν σημαίνει ότι η διαδικασία είναι κοινή και πρέπει να συντάξετε κώδικα για κάθε DataSet που δημιουργείτε.

Αλλαγή της βασικής κλάσης ενός προσαρμογέα πίνακα

Όπως αναφέρθηκε παραπάνω, η κλάση TableAdapter κληρονομεί την κλάση Component, καθιστώντας δύσκολη την κοινή χρήση της επεξεργασίας. Εάν αλλάξετε το τμήμα του κώδικα που κληρονομεί μια κλάση, ο κώδικας δημιουργείται αυτόματα, επομένως η ενημέρωση του DataSet επιστρέφει ξανά τον κώδικα. Εάν μπορείτε, μπορείτε να γράψετε μια μερική κλάση που κληρονομεί τη διασύνδεση σε ξεχωριστό αρχείο, αλλά δεν έχει πολύ νόημα, επειδή πρέπει να γράψετε όσους προσαρμογές πίνακα έχετε δημιουργήσει.

Στην πραγματικότητα, υπάρχει ένας μηχανισμός για να αλλάξετε την κλάση μεταβίβασης αυτού του προσαρμογέα πίνακα. Θα ήθελα να εξηγήσω τη διαδικασία.

Πρώτα, δημιουργήστε την κλάση που θέλετε να κληρονομήσετε. Ο Προσαρμογέας πίνακα κληρονόμησε αρχικά την κλάση Component, επομένως θα πρέπει να κληρονομήσετε την κλάση Component ακόμα και αν τη δημιουργήσετε. Θα γράψω τον κώδικα που θέλω να μοιραστώ εδώ, αλλά θα γράψω μόνο μια τάξη. Αντιστοιχίστε το χώρο ονομάτων με αυτό που δημιουργήσατε.

using System.ComponentModel;

namespace DataSetBaseAdapter
{
  public class BaseAdapter : Component
  {
  }
}

Στη συνέχεια, ανοίξτε τη σχεδίαση DataSet και επιλέξτε τον προσαρμογέα πίνακα που δημιουργήσατε.

Κάντε δεξιό κλικ για να ανοίξετε την ιδιότητα. Υπάρχει μια ιδιότητα που ονομάζεται BaseClass, η οποία θα πρέπει αρχικά να είναι "System.ComponentModel.Component". Ξαναγράψτε αυτό στην τάξη που μόλις δημιουργήσατε. Θα γράψω τα πάντα, συμπεριλαμβανομένου του χώρου ονομάτων.

Εάν το αποθηκεύσετε, θα δείτε ότι η βασική κλάση του Προσαρμογέα πίνακα έχει αλλάξει. Ορίζοντας αυτήν τη ρύθμιση σε κάθε Προσαρμογέα πίνακα, μπορείτε να συντάξετε κοινή επεξεργασία στη βασική κλάση.

Για παράδειγμα, εάν θέλετε να αποκτήσετε πρόσβαση σε ένα εσωτερικό SQL ή SQLDataAdapter, γράψτε: Οι προσαρμογείς και οι συλλογές εντολών που δημιουργούνται αυτόματα είναι μόνο ιδιότητες που δημιουργούνται από την κλάση μεταβίβασης, επομένως δεν είναι δυνατή η άγγιξή τους απευθείας από τον κληρονομητή. Ο ακόλουθος κώδικας χρησιμοποιεί αντανάκλαση για να επιβάλει την πρόσβαση.

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

Μπορείτε να δείτε ότι μπορείτε πραγματικά να χρησιμοποιήσετε τον προσαρμογέα πίνακα για να αποκτήσετε πρόσβαση στις ιδιότητες της μεταβιβαζόμενης κλάσης.