Προγραμματισμός

Τρόπος εργασίας με το ADO.Net σε κατάσταση αποσύνδεσης

Το πλαίσιο πρόσβασης δεδομένων της Microsoft ADO.Net χρησιμοποιείται εδώ και πάνω από δύο δεκαετίες. Μπορείτε να αξιοποιήσετε το ADO.Net για να εκτελέσετε λειτουργίες CRUD σε μια μεγάλη ποικιλία βάσεων δεδομένων από το διαχειριζόμενο περιβάλλον του .Net CLR.

Ο πάροχος δεδομένων είναι ένα στοιχείο λογισμικού που ενσωματώνει τα πρωτόκολλα που χρησιμοποιούνται για τη σύνδεση και την αλληλεπίδραση με την υποκείμενη βάση δεδομένων από το διαχειριζόμενο περιβάλλον. Μερικοί από τους δημοφιλείς παρόχους δεδομένων περιλαμβάνουν: Πάροχος δεδομένων διακομιστή SQL, Πάροχος δεδομένων Oracle και πάροχος δεδομένων OLEDB. Το ADO.Net μπορεί να λειτουργήσει τόσο σε συνδεδεμένες όσο και σε αποσυνδεδεμένες λειτουργίες.

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

Όταν εργάζεστε με το ADO.Net σε αποσυνδεδεμένο τρόπο λειτουργίας, συνήθως χρησιμοποιείτε το DataAdapter, το DataSet, το DataTable και το DataTableReader. Ενώ το DataAdapter λειτουργεί ως γέφυρα μεταξύ της εφαρμογής και της βάσης δεδομένων, ένα DataSet είναι μια μνήμη, αποσυνδεδεμένη αναπαράσταση της βάσης δεδομένων και μπορεί να περιέχει μία ή περισσότερες παρουσίες DataTable. Ένα DataTableReader είναι παρόμοιο με το DataReader εκτός από το ότι λειτουργεί σε αποσυνδεδεμένη λειτουργία.

Ας ψάξουμε σε κάποιον κωδικό

Έχουμε αρκετές από τις έννοιες - ας πάρουμε έναν κώδικα. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να ανακτήσετε δεδομένα από μια βάση δεδομένων σε αποσυνδεδεμένη λειτουργία. Σημειώστε ότι αυτό το παράδειγμα συνδέεται στη βάση δεδομένων AdventureWorks μόνο για λόγους απεικόνισης.

static void Main (συμβολοσειρά [] args)

        {

string connectionString = ConfigurationManager.ConnectionStrings ["AdventureWorksDB"]. ConnectionString;

δοκιμάστε

            {

χρησιμοποιώντας (SqlConnection sqlConnection = νέο SqlConnection (connectionString))

                {

sqlConnection.Open ();

SqlDataAdapter sqlDataAdapter = νέος SqlDataAdapter ("SELECT * FROM [AdventureWorks2014]. [HumanResources]. [Department]", sqlConnection);

DataSet dataSet = νέο σύνολο δεδομένων ();

sqlDataAdapter.Fill (dataSet);

                }                

            }

αλίευση (πρώην εξαίρεση)

            {

// Γράψτε κώδικα εδώ για να χειριστείτε την εξαίρεση

            }

        }

Στην παραπάνω λίστα κωδικών, δημιουργείται σύνδεση με τη βάση δεδομένων χρησιμοποιώντας μια παρουσία της κλάσης SqlConnection. Στη συνέχεια δημιουργείται μια παρουσία DataAdapter και χρησιμοποιείται για τη συμπλήρωση μιας παρουσίας DataSet χρησιμοποιώντας τη μέθοδο Fill () της κλάσης DataAdapter. Η σύνδεση με τη βάση δεδομένων κλείνει αυτόματα όταν το στοιχείο ελέγχου βγαίνει από το μπλοκ "using" καθώς η μέθοδος Dispose () καλείται αυτόματα στην παρουσία SqlConnection. Τα δεδομένα που είναι αποθηκευμένα στην παρουσία του DataSet βρίσκονται στη μνήμη και δεν εξαρτώνται από μια ενεργή σύνδεση βάσης δεδομένων, καθώς το DataSet λειτουργεί σε αποσυνδεδεμένη λειτουργία. Μόλις τα δεδομένα ανακτηθούν από τη βάση δεδομένων και αποθηκευτούν στη μνήμη σε μια παρουσία DataSet, μπορείτε επίσης να αλλάξετε τα δεδομένα εάν θέλετε και, στη συνέχεια, να διατηρήσετε ξανά τα δεδομένα όταν χρειάζεται.

DataRow dataRow = dataSet.Tables [0] .NewRow (); // Δημιουργεί μια νέα σειρά δεδομένων

//Μπορείς τώρα καθορίστε το τιμές για καθεμία από τις στήλες της σειράς δεδομένων

dataSet.Tables [0] .Rows.Add (dataRow); // Προσθέστε τη σειρά δεδομένων

sqlDataAdapter.Update (σύνολο δεδομένων); // Εισάγει μια νέα εγγραφή

Σημειώστε ότι μπορείτε να χρησιμοποιήσετε το μπλοκ "using" σε τύπους που εφαρμόζουν τη διεπαφή IDisposable. Ολόκληρο το μπλοκ "χρησιμοποιώντας" είναι τυλιγμένο μέσα σε ένα μπλοκ δοκιμαστικής κίνησης για χειρισμό εξαιρέσεων που ενδέχεται να προκύψουν κατά την εκτέλεση του προγράμματος. Σημειώστε ότι η συμβολοσειρά σύνδεσης σε αυτό το παράδειγμα ανακτάται από ένα αρχείο διαμόρφωσης - είναι καλή πρακτική να απομονώσετε τη συμβολοσειρά σύνδεσης από τον κώδικα της εφαρμογής σας. Μπορείτε επίσης να κρυπτογραφήσετε τη συμβολοσειρά σύνδεσης, εάν χρειάζεται.

Μπορείτε επίσης να συμπληρώσετε έναν πίνακα δεδομένων με τον ίδιο τρόπο που συμπληρώνετε ένα σύνολο δεδομένων. Εδώ είναι ένα παράδειγμα που το εξηγεί αυτό.

string connectionString = ConfigurationManager.ConnectionStrings ["AdventureWorksDB"]. ConnectionString;

δοκιμάστε

            {

χρησιμοποιώντας (SqlConnection sqlConnection = νέο SqlConnection (connectionString))

                {

sqlConnection.Open ();

SqlDataAdapter sqlDataAdapter = νέος SqlDataAdapter ("SELECT * FROM [AdventureWorks2014]. [HumanResources]. [Department]", sqlConnection);

DataTable dataTable = νέο DataTable ();

sqlDataAdapter.Fill (dataTable);

                }                

            }

αλίευση (πρώην εξαίρεση)

            {

// Γράψτε κώδικα εδώ για να χειριστείτε την εξαίρεση

            }

Ένα DataTableReader συνδυάζει τα καλύτερα και των δύο κόσμων, δηλαδή είναι σαν ένα DataReader που λειτουργεί σε αποσυνδεδεμένη λειτουργία και είναι ταχύτερο από το DataTable και το DataReader. Για να δημιουργήσετε ένα DataTableReader, το μόνο που χρειάζεται να κάνετε είναι να καλέσετε τη μέθοδο CreateDataReader () στην παρουσία DataTable.

DataTableReader dataTableReader = dataTable.CreateDataReader ();

Η ακόλουθη λίστα κωδικών δείχνει πώς μπορείτε να εμφανίσετε τα ονόματα όλων των τμημάτων χρησιμοποιώντας το DataTableReader.

static void Main (συμβολοσειρά [] args)

        {

string connectionString = ConfigurationManager.ConnectionStrings ["AdventureWorksDB"]. ConnectionString;

δοκιμάστε

            {

χρησιμοποιώντας (SqlConnection sqlConnection = νέο SqlConnection (connectionString))

                {

sqlConnection.Open ();

SqlDataAdapter sqlDataAdapter = νέος SqlDataAdapter ("SELECT * FROM [AdventureWorks2014]. [HumanResources]. [Department]", sqlConnection);

DataTable dataTable = νέο DataTable ();

sqlDataAdapter.Fill (dataTable);

DataTableReader dataTableReader = dataTable.CreateDataReader ();

ενώ (dataTableReader.Read ())

                    {

Console.WriteLine (dataTableReader ["Όνομα"]. ToString ());

                    }      

                }                

            }

αλίευση (πρώην εξαίρεση)

            {

// Γράψτε κώδικα εδώ για να χειριστείτε την εξαίρεση

            }

Κονσόλα. Διαβάστε ();

        }