Cara bekerja dengan ADO.Net dalam mode terputus

Kerangka akses data ADO.Net Microsoft telah digunakan selama lebih dari dua dekade sekarang. Anda dapat memanfaatkan ADO.Net untuk melakukan operasi CRUD pada berbagai macam database dari lingkungan terkelola .Net CLR.

Penyedia data adalah komponen perangkat lunak yang merangkum protokol yang digunakan untuk menyambungkan dan berinteraksi dengan database yang mendasari dari lingkungan yang dikelola. Beberapa penyedia data populer antara lain: Penyedia Data SQL Server, Penyedia Data Oracle, dan Penyedia Data OLEDB. ADO.Net dapat bekerja dalam mode terhubung dan terputus.

Modus operasi terhubung di ADO.Net adalah salah satu di mana koneksi ke database yang mendasarinya hidup selama masa operasi. Sementara itu, mode operasi terputus adalah mode dimana ADO.Net mengambil data dari database yang mendasarinya, menyimpan data yang diambil sementara di memori, dan kemudian menutup koneksi ke database.

Saat bekerja dengan ADO.Net dalam mode operasi terputus, Anda biasanya akan memanfaatkan DataAdapter, DataSet, DataTable, dan DataTableReader. Meskipun DataAdapter bertindak sebagai jembatan antara aplikasi dan database, DataSet adalah representasi database dalam memori yang terputus dan dapat berisi satu atau beberapa instance DataTable. Sebuah DataTableReader mirip dengan DataReader kecuali ia bekerja dalam mode terputus.

Mari kita gali beberapa kode

Kita sudah muak dengan konsep - mari kita masuk ke beberapa kode. Cuplikan kode berikut menunjukkan bagaimana Anda dapat mengambil data dari database dalam mode terputus. Perhatikan bahwa contoh ini terhubung ke database AdventureWorks hanya untuk tujuan ilustrasi.

static void Main(string[] args)

        {

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

            try

            {

                using (SqlConnection sqlConnection = new SqlConnection(connectionString))

                {

                    sqlConnection.Open();

                    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("SELECT *  FROM [AdventureWorks2014].[HumanResources].[Department]", sqlConnection);

                    DataSet dataSet = new DataSet();

                    sqlDataAdapter.Fill(dataSet);

                }                

            }

            catch (Exception ex)

            {

                //Write code here to handle exception

            }

        }

Dalam daftar kode di atas, koneksi ke database dibuat menggunakan instance kelas SqlConnection. Kemudian instance DataAdapter dibuat dan digunakan untuk mengisi instance DataSet menggunakan metode Fill () dari kelas DataAdapter. Koneksi ke database ditutup secara otomatis ketika kontrol keluar dari blok "using" karena metode Dispose () dipanggil pada instance SqlConnection secara otomatis. Data yang disimpan dalam contoh DataSet berada di memori dan tidak bergantung pada koneksi database aktif karena DataSet bekerja dalam mode terputus. Setelah data diambil dari database dan disimpan dalam memori dalam instance DataSet, Anda juga dapat mengubah data jika Anda mau dan kemudian mempertahankan data tersebut saat diperlukan.

DataRow dataRow = dataSet.Tables[0].NewRow(); //Creates a new data row

//You can now tentukan values for each of the columns of the data row

dataSet.Tables[0].Rows.Add(dataRow); //Add the data row

sqlDataAdapter.Update(dataSet); // Inserts a new record

Perhatikan bahwa Anda dapat menggunakan blok "menggunakan" pada jenis yang menerapkan antarmuka IDisposable. Seluruh blok "using" dibungkus di dalam blok coba-tangkap untuk menangani pengecualian yang mungkin muncul saat program sedang dijalankan. Perhatikan bahwa string koneksi dalam contoh ini diambil dari file konfigurasi - merupakan praktik yang baik untuk mengisolasi string koneksi dari kode aplikasi Anda. Anda juga dapat mengenkripsi string koneksi Anda jika perlu.

Anda juga dapat mengisi DataTable dengan cara yang sama seperti Anda mengisi DataSet. Berikut adalah contoh yang menggambarkan hal ini.

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

            try

            {

                using (SqlConnection sqlConnection = new SqlConnection(connectionString))

                {

                    sqlConnection.Open();

                    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("SELECT *  FROM [AdventureWorks2014].[HumanResources].[Department]", sqlConnection);

                    DataTable dataTable = new DataTable();

                    sqlDataAdapter.Fill(dataTable);                   

                }                

            }

            catch (Exception ex)

            {

                //Write code here to handle exception

            }

DataTableReader menggabungkan yang terbaik dari kedua dunia, yaitu seperti DataReader yang bekerja dalam mode terputus dan lebih cepat daripada DataTable dan DataReader. Untuk membuat DataTableReader, yang perlu Anda lakukan adalah memanggil metode CreateDataReader () pada instance DataTable.

DataTableReader dataTableReader = dataTable.CreateDataReader();

Daftar kode berikut menunjukkan bagaimana Anda dapat menampilkan nama semua departemen menggunakan DataTableReader.

static void Main(string[] args)

        {

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

            try

            {

                using (SqlConnection sqlConnection = new SqlConnection(connectionString))

                {

                    sqlConnection.Open();

                    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("SELECT *  FROM [AdventureWorks2014].[HumanResources].[Department]", sqlConnection);

                    DataTable dataTable = new DataTable();

                    sqlDataAdapter.Fill(dataTable);

                    DataTableReader dataTableReader = dataTable.CreateDataReader(); 

                    while(dataTableReader.Read())

                    {

                        Console.WriteLine(dataTableReader["Name"].ToString());

                    }      

                }                

            }

            catch (Exception ex)

            {

                //Write code here to handle exception

            }

            Console.Read();

        }