Penulis: Grasshopper Jun Sumber: Blog Hall
Pertama-tama mari kita lihat sepotong kode Layanan WEB.
[Metode Web]
GetInfo Tabel Data publik()
...{
OleDbConnection nwindConn = OleDbConnection baru(
"Penyedia=Microsoft.Jet.OLEDB.4.0;" +
"Sumber Data=D:\Northwind\northwind.mdb;");
OleDbCommand selectCMD =
new OleDbCommand("PILIH ID Pelanggan, Nama Perusahaan DARI Pelanggan"
, nwindConn);
pilihCMD.CommandTimeout = 30;
OleDbDataAdapter custDA = OleDbDataAdapter();
custDA.SelectCommand = pilihCMD
;
custDA.Fill(custDS, "Pelanggan");
kembalikan custDS.Tabel[0];
}
Di .net 1.1, ini adalah kesalahan umum. Di .net 1.1 dan 1.0, parameter pengembalian atau input Layanan WEB tidak boleh berupa DataTable. Alasannya adalah DataTable tidak mendukung serialisasi seperti DataSet. Di .net 1.1, cara kami mengatasi masalah ini adalah dengan menggunakan DataSet. Namun saat menggunakan DataSet, sering kali ada perasaan berlebihan.
Lampiran: Menggunakan DataTable sebagai nilai kembalian Layanan WEB di .net 1.1 akan melaporkan pengecualian berikut:
Anggota System.ComponentModel.MarshalByValueComponent.Site bertipe System.ComponentModel.ISite adalah antarmuka, sehingga tidak dapat diserialkan.
Di .net 2.0, kode yang sama di atas berfungsi tanpa masalah. Alasannya adalah DataTable di 2.0 mengimplementasikan serialisasi dan deserialisasi.
Dalam dokumentasi VS2005 Beta2, kita dapat melihat bahwa DataTable di 2.0 mengimplementasikan antarmuka berikut:
Implementasi Antarmuka Eksplisit
Sistem.ComponentModel.IListSource.get_ContainsListCollection
Sistem.ComponentModel.IListSource.GetList
Sistem.Xml.Serialization.IXmlSerializable.GetSchema
Sistem.Xml.Serialization.IXmlSerializable.ReadXml
System.Xml.Serialization.IXmlSerializable.WriteXml
Di 1.1, DataTable hanya mengimplementasikan satu antarmuka:
Implementasi Antarmuka Eksplisit
System.ComponentModel.IListSource.ContainsListCollection
memindahkan beberapa fungsi di DataSet ke DataTable. Ada juga metode Penggabungan di 2.0, yang menggabungkan beberapa kumpulan data.
Untuk penggabungan kode DataTable, silakan lihat kode di bawah ini.
kekosongan statis pribadi DemonstrateMergeTable()
...{
DataTable table1 = new DataTable("Item");
DataColumn kolom1 = new DataColumn("id", typeof(System.Int32));
DataColumn kolom2 = new DataColumn("item", typeof(System.Int32));
tabel1.Kolom.Tambahkan(kolom1);
table1.Columns.Add(column2);
table1.PrimaryKey = Kolom Data baru[] ...{ kolom1 };
table1.RowChanged += System.Data.DataRowChangeEventHandler baru(
baris DataRow);
untuk (int saya = 0; saya <= 3; saya++)
...{
baris = tabel1.BarisBaru();
baris["id"] = saya;
baris["barang"] = saya;
tabel1.Baris.Tambahkan(baris);
}
//Terima perubahan.
table1.AcceptChanges();
DataTable table2 = table1.Clone();
baris = tabel2.BarisBaru();
baris["id"] = 14;
baris["barang"] = 774;
tabel2.Baris.Tambahkan(baris);
baris = tabel2.Baris Baru();
baris["id"] = 12;
baris["barang"] = 555;
tabel2.Baris.Tambahkan(baris);
baris = tabel2.Baris Baru();
baris["id"] = 13;
baris["barang"] = 665;
table2.Rows.Add(row);
// Gabungkan tabel2 ke dalam tabel1.
tabel1.Gabung(tabel2);
}
Singkatnya di atas, DataTable di .net 2.0 telah berubah dari seorang prajurit tak dikenal di latar belakang menjadi seorang jenderal yang bertanggung jawab.