ผู้แต่ง: Grasshopper Jun ที่มา: Blog Hall
มาดูโค้ดบริการเว็บกันก่อน
[วิธีการเว็บ]
DataTable GetInfo สาธารณะ ()
-
OleDbConnection nwindConn = OleDbConnection ใหม่ (
"ผู้ให้บริการ=Microsoft.Jet.OLEDB.4.0;" +
"แหล่งข้อมูล=D:\Northwind\northwind.mdb;");
OleDbCommand selectCMD =
ใหม่ OleDbCommand ("เลือก CustomerID, CompanyName จากลูกค้า"
, nwindConn);
selectCMD.CommandTimeout = 30;
OleDbDataAdapter custDA = ใหม่ OleDbDataAdapter();
custDA.SelectCommand = selectCMD;
ชุดข้อมูล custDS = ชุดข้อมูลใหม่ ();
custDA.Fill(custDS, "ลูกค้า");
กลับ custDS.Tables[0];
}
ใน .net 1.1 นี่เป็นข้อผิดพลาดทั่วไป ใน .net 1.1 และ 1.0 พารามิเตอร์การส่งคืนหรืออินพุตของ WEB Service ไม่สามารถเป็น DataTable ได้ นี่เป็นจุดความรู้ที่รู้จักกันดี เหตุผลก็คือ DataTable ไม่รองรับการทำให้เป็นอนุกรมเช่น DataSet ใน .net 1.1 วิธีแก้ไขปัญหานี้คือการใช้ DataSet แต่เมื่อใช้ DataSet ก็มักจะรู้สึกว่าเกินกำลังไป
เอกสารแนบ: การใช้ DataTable เป็นค่าตอบแทนของบริการเว็บใน .net 1.1 จะรายงานข้อยกเว้นต่อไปนี้:
สมาชิก System.ComponentModel.MarshalByValueComponent.Site ประเภท System.ComponentModel.ISite เป็นอินเทอร์เฟซ ดังนั้นจึงไม่สามารถทำให้เป็นอนุกรมได้
ใน .net 2.0 รหัสเดียวกันข้างต้นใช้งานได้โดยไม่มีปัญหาใดๆ เหตุผลก็คือ DataTable ใน 2.0 ใช้การทำให้เป็นอนุกรมและดีซีเรียลไลซ์
ในเอกสารประกอบของ VS2005 Beta2 เราจะเห็นว่า DataTable ใน 2.0 ใช้อินเทอร์เฟซต่อไปนี้:
การใช้งานอินเทอร์เฟซที่ชัดเจน
System.ComponentModel.IListSource.get_ContainsListCollection
System.ComponentModel.IListSource.GetList
System.Xml.Serialization.IXmlSerializable.GetSchema
System.Xml.Serialization.IXmlSerializable.ReadXml
System.Xml.Serialization.IXmlSerializable.WriteXml
ใน 1.1 DataTable ใช้งานอินเทอร์เฟซเดียวเท่านั้น:
การใช้งานอินเทอร์เฟซที่ชัดเจน
System.ComponentModel.IListSource.ContainsListCollection
ย้ายฟังก์ชันบางอย่างในชุดข้อมูลไปยัง DataTable นอกจากนี้ยังมีวิธีการผสานใน 2.0 ซึ่งผสานชุดข้อมูลหลายชุด
สำหรับการรวมโค้ดของ DataTable โปรดดูโค้ดด้านล่าง
โมฆะคงที่ส่วนตัว DemonstrateMergeTable()
-
DataTable table1 = ใหม่ DataTable("รายการ");
DataColumn column1 = ใหม่ DataColumn("id", typeof(System.Int32));
DataColumn column2 = ใหม่ DataColumn("item", typeof(System.Int32));
table1.Columns.Add(column1);
table1.Columns.Add(column2);
table1.PrimaryKey = ใหม่ DataColumn[] ...{ column1 };
table1.RowChanged += ใหม่ System.Data.DataRowChangeEventHandler (Row_Changed)
;
สำหรับ (int i = 0; i <= 3; i++)
-
แถว = table1.NewRow();
แถว["id"] = ฉัน;
แถว["รายการ"] = i;
table1.Rows.Add(แถว);
}
//ยอมรับการเปลี่ยนแปลง
table1.AcceptChanges();
DataTable table2 = table1.Clone();
แถว = table2.NewRow();
แถว["id"] = 14;
แถว["รายการ"] = 774;
table2.Rows.Add(แถว);
แถว = table2.NewRow();
แถว["id"] = 12;
แถว["รายการ"] = 555;
table2.Rows.Add(แถว);
แถว = table2.NewRow();
แถว["id"] = 13;
แถว["รายการ"] = 665;
table2.Rows.Add(row);
// รวม table2 เข้ากับ table1.
table1.ผสาน(table2);
}
โดยสรุปข้างต้น DataTable ใน .net 2.0 ได้เปลี่ยนจากทหารที่ไม่รู้จักอยู่เบื้องหลังมาเป็นนายพลที่รับผิดชอบ