ADO.NET เป็นสะพานเชื่อมระหว่างส่วนควบคุมส่วนหน้าและฐานข้อมูลส่วนหลัง วัตถุ ADO.NET สรุปการดำเนินการเข้าถึงข้อมูลและการควบคุมที่โต้ตอบกับวัตถุที่แสดงข้อมูล รายละเอียดการเคลื่อนย้ายข้อมูลจึงถูกซ่อนไว้
แผนภาพต่อไปนี้แสดงวัตถุ ADO.NET โดยรวม:
ชุดข้อมูลแสดงถึงชุดย่อยของฐานข้อมูล ไม่มีการเชื่อมต่อกับฐานข้อมูลอย่างต่อเนื่อง จำเป็นต้องมีการเชื่อมต่อใหม่เพื่ออัพเกรดฐานข้อมูล ชุดข้อมูลประกอบด้วยวัตถุ DataTable และ DataRelation วัตถุ DataRelation แสดงถึงความสัมพันธ์ระหว่างสองตาราง
ตารางต่อไปนี้เป็นคุณสมบัติที่สำคัญบางประการของคลาส DataSet:
คุณสมบัติ | อธิบาย |
---|---|
คำนึงถึงขนาดตัวพิมพ์ | ระบุว่าสตริงที่จะเปรียบเทียบกับตารางข้อมูลเป็นแบบคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่หรือไม่ |
คอนเทนเนอร์ | รับพื้นที่สำหรับส่วนประกอบ |
ชื่อชุดข้อมูล | รับหรือตั้งชื่อของการรวบรวมข้อมูลที่มีอยู่ |
DefaultViewManager | ส่งกลับมุมมองของข้อมูลในการรวบรวมข้อมูล |
โหมดการออกแบบ | ระบุว่าส่วนประกอบอยู่ในโหมดการออกแบบหรือไม่ |
บังคับใช้ข้อจำกัด | ระบุว่ามีการเคารพข้อจำกัดหรือไม่เมื่อพยายามอัปโหลดไฟล์ |
กิจกรรม | รับรายชื่อตัวจัดการเหตุการณ์ที่เกี่ยวข้องกับส่วนประกอบนี้ |
คุณสมบัติเพิ่มเติม | รับชุดข้อมูลผู้ใช้ที่กำหนดเองที่เกี่ยวข้องกับชุดข้อมูล |
มีข้อผิดพลาด | ระบุว่ามีข้อผิดพลาดประการใด |
เป็นค่าเริ่มต้น | บ่งชี้ว่าชุดข้อมูลถูกเตรียมใช้งานหรือไม่ |
สถานที่ | รับหรือตั้งค่าข้อมูลที่ใช้ในการเปรียบเทียบสตริงกับตาราง |
เนมสเปซ | รับหรือตั้งค่าเนมสเปซของชุดข้อมูล |
คำนำหน้า | รับหรือตั้งค่าคำนำหน้า XML ที่เป็นนามแฝงสำหรับเนมสเปซ |
ความสัมพันธ์ | ส่งกลับคอลเลกชันของวัตถุ DataRelation |
ตาราง | ส่งกลับคอลเลกชันของวัตถุ DataTable |
ตารางต่อไปนี้แสดงวิธีการที่สำคัญบางอย่างของคลาส DataSet:
วิธี | อธิบาย |
---|---|
ยอมรับการเปลี่ยนแปลง | ยอมรับการเปลี่ยนแปลงทั้งหมดเนื่องจากการโหลดชุดข้อมูลหรือวิธีนี้ |
เริ่มต้นInit | เริ่มต้นการเริ่มต้นของชุดข้อมูล การเริ่มต้นนี้เกิดขึ้นเมื่อรันไทม์ |
ชัดเจน | ล้างข้อมูล |
โคลน | โคลนโครงสร้างของชุดข้อมูลรวมถึงโครงสร้าง DataTable ความสัมพันธ์ และข้อจำกัดทั้งหมด แต่ข้อมูลไม่ได้ถูกโคลน |
สำเนา | คัดลอกข้อมูลและโครงสร้าง |
สร้าง DataReader() | ส่งกลับ DataTableReader พร้อมชุดผลลัพธ์สำหรับแต่ละ DataTable ในลำดับเดียวกับตารางในคอลเลกชัน Tables ที่ปรากฏ |
CreateDataReader(ตารางข้อมูล[]) | ส่งกลับ DataTableReader พร้อมชุดผลลัพธ์หนึ่งชุดสำหรับแต่ละ DataTable |
สิ้นสุดเริ่มต้น | สิ้นสุดการเริ่มต้นของชุดข้อมูลที่ใช้ในแบบฟอร์มหรือใช้โดยส่วนประกอบอื่น การเริ่มต้นเกิดขึ้นเมื่อรันไทม์ |
เท่ากับ(วัตถุ) | กำหนดว่าวัตถุที่ระบุเท่ากับวัตถุปัจจุบันหรือไม่ |
จบ | ปล่อยทรัพยากรเพื่อดำเนินการล้างข้อมูลเพิ่มเติม |
รับการเปลี่ยนแปลง | รับสำเนาของชุดข้อมูลที่มีการเปลี่ยนแปลงชุดข้อมูลทั้งหมดตั้งแต่ถูกโหลดหรือตั้งแต่ครั้งล่าสุดที่เรียก AcceptChanges |
รับการเปลี่ยนแปลง (DataRowState) | รับสำเนาของชุดข้อมูลที่กรองโดย DataRowState ที่มีการเปลี่ยนแปลงทั้งหมดกับชุดข้อมูลนับตั้งแต่โหลดครั้งล่าสุดหรือนับตั้งแต่มีการเรียก AcceptChanges |
รับ DataSetSchema | รับสำเนาของ XmlSchemaSet สำหรับชุดข้อมูล |
รับObjectData | เติมวัตถุข้อมูลซีเรียลไลซ์ด้วยข้อมูลที่จำเป็นในการซีเรียลไลซ์ชุดข้อมูล |
รับประเภท | รับประเภทของอินสแตนซ์ปัจจุบัน |
รับXML | ส่งกลับการแสดง XML ของข้อมูลที่จัดเก็บไว้ในชุดข้อมูล |
รับ XMLSchema | ส่งกลับ XML Schema ของการแสดง XML ของข้อมูลที่จัดเก็บไว้ในชุดข้อมูล |
มีการเปลี่ยนแปลง() | รับค่าที่ระบุว่าชุดข้อมูลมีการเปลี่ยนแปลงหรือไม่ รวมถึงแถวใหม่ แถวที่ถูกลบ หรือแถวที่แก้ไข |
มีการเปลี่ยนแปลง (DataRowState) | รับค่าที่ระบุว่าชุดข้อมูลมีการเปลี่ยนแปลงที่กรอง DataRowState หรือไม่ รวมถึงแถวใหม่ แถวที่ถูกลบ หรือแถวที่แก้ไข |
เป็นไบนารีที่ซีเรียลไลซ์ | ตรวจสอบรูปแบบของการแสดงอนุกรมของชุดข้อมูล |
โหลด (IDataReader, LoadOption, DataTable[]) | ใช้ IDataReader ที่ให้มาเพื่อเติมชุดข้อมูลด้วยค่าจากแหล่งข้อมูล ขณะใช้อาร์เรย์ของอินสแตนซ์ DataTable เพื่อจัดเตรียมข้อมูลสคีมาและเนมสเปซ |
โหลด (IDataReader, LoadOption, สตริง[]) | เติมชุดข้อมูลด้วยค่าจากแหล่งข้อมูลโดยใช้ IDataReader ที่ให้มา และใช้อาร์เรย์สตริงเพื่อระบุชื่อสำหรับตารางในชุดข้อมูล |
ผสาน() | ผสานอาร์เรย์ที่ระบุของชุดข้อมูล DataTable หรือ DataRow วัตถุเข้ากับชุดข้อมูลหรือ DataTable ปัจจุบัน วิธีการนี้มีโอเวอร์โหลดที่แตกต่างกัน |
ReadXML() | อ่านสคีมา XML และข้อมูลลงในชุดข้อมูล วิธีการนี้มีโอเวอร์โหลดที่แตกต่างกัน |
อ่าน XMLSchema(0) | อ่านสคีมา XML ลงในชุดข้อมูล วิธีการนี้มีโอเวอร์โหลดที่แตกต่างกัน |
ปฏิเสธการเปลี่ยนแปลง | ย้อนกลับการเปลี่ยนแปลงทั้งหมดที่ทำกับชุดข้อมูลตั้งแต่ถูกสร้างขึ้นหรือตั้งแต่ครั้งล่าสุดที่ DataSet.AcceptChanges ถูกเรียก |
เขียน XML() | เขียนข้อมูล XML และสคีมาจากชุดข้อมูล วิธีการนี้มีโอเวอร์โหลดที่แตกต่างกัน |
เขียน XMLSchema() | เขียนสคีมา XML จากชุดข้อมูล วิธีการนี้มีโอเวอร์โหลดที่แตกต่างกัน |
คลาส DataTable แสดงถึงตารางในฐานข้อมูล มีคุณสมบัติที่สำคัญดังต่อไปนี้: คุณสมบัติส่วนใหญ่เป็นแบบอ่านอย่างเดียวยกเว้นคุณสมบัติ PrimaryKey:
คุณสมบัติ | อธิบาย |
---|---|
ความสัมพันธ์เด็ก | รับการรวบรวมความสัมพันธ์ลูกของ DataTable นี้ |
คอลัมน์ | รับชุดคอลัมน์ที่เป็นของตารางนี้ |
ข้อจำกัด | รับการรวบรวมข้อจำกัดที่ดูแลโดยตารางนี้ |
ชุดข้อมูล | รับชุดข้อมูลที่เป็นของตารางนี้ |
มุมมองเริ่มต้น | รับมุมมองแบบกำหนดเองของตารางที่อาจรวมถึงมุมมองที่กรองหรือตำแหน่งเคอร์เซอร์ |
ความสัมพันธ์ระหว่างผู้ปกครอง | รับคอลเลกชันของความสัมพันธ์ระดับบนสุดของ DataTable นี้ |
PrimaryKey | รับหรือตั้งค่าอาร์เรย์ของคอลัมน์ที่ทำหน้าที่เป็นคีย์หลักสำหรับตารางข้อมูล |
แถว | รับชุดของแถวที่เป็นของตารางนี้ |
ตารางต่อไปนี้แสดงวิธีการที่สำคัญบางอย่างของคลาส DataTable:
วิธี | อธิบาย |
---|---|
ยอมรับการเปลี่ยนแปลง | คอมมิตการเปลี่ยนแปลงทั้งหมดที่ทำกับชุดข้อมูลนี้ตั้งแต่ถูกโหลดหรือตั้งแต่การเรียก AcceptChanges ครั้งล่าสุด |
ชัดเจน | ล้างชุดข้อมูลของข้อมูลใดๆ โดยการลบแถวทั้งหมดออกจากตารางทั้งหมด |
รับการเปลี่ยนแปลง | รับสำเนาของชุดข้อมูลที่มีการเปลี่ยนแปลงชุดข้อมูลทั้งหมดนับตั้งแต่โหลดครั้งล่าสุดหรือนับตั้งแต่มีการเรียก AcceptChanges |
รับข้อผิดพลาด | รับอาร์เรย์ของวัตถุ DataRow ที่มีข้อผิดพลาด |
นำเข้าแถว | คัดลอก DataRow ลงใน DataTable โดยคงการตั้งค่าคุณสมบัติและค่าเริ่มต้นและปัจจุบันไว้ |
โหลด DataRow | ค้นหาและอัปเดตแถวที่ต้องการ หากไม่พบแถวที่ตรงกัน แถวใหม่จะถูกสร้างขึ้นด้วยค่าที่กำหนด |
ผสาน | ผสานอาร์เรย์ที่ระบุของชุดข้อมูล DataTable หรือ DataRow วัตถุเข้ากับชุดข้อมูลหรือ DataTable ปัจจุบัน |
ใหม่แถว | สร้าง DataRow ใหม่โดยใช้สคีมาเดียวกันกับตาราง |
ปฏิเสธการเปลี่ยนแปลง | ย้อนกลับการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับตารางนับตั้งแต่โหลดตารางหรือตั้งแต่การเรียก AcceptChanges ครั้งล่าสุด |
รีเซ็ต | ล้างตารางทั้งหมดและลบความสัมพันธ์ ข้อจำกัดภายนอก และตารางทั้งหมดออกจากชุดข้อมูล คลาสย่อยควรแทนที่การรีเซ็ตเพื่อคืนค่าชุดข้อมูลกลับสู่สถานะดั้งเดิม |
เลือก | รับอาร์เรย์ของวัตถุ DataRow |
วัตถุ DataRow แสดงถึงแถวในตารางและมีคุณสมบัติที่สำคัญดังต่อไปนี้:
คุณสมบัติ | อธิบาย |
---|---|
มีข้อผิดพลาด | บ่งชี้ว่ามีข้อผิดพลาดหรือไม่ |
รายการ | รับหรือตั้งค่าข้อมูลที่จัดเก็บไว้ในคอลัมน์เฉพาะ |
รายการอาร์เรย์ | รับหรือตั้งค่าทั้งหมดในแถวนี้ |
โต๊ะ | กลับตารางหลัก |
ตารางต่อไปนี้แสดงวิธีการที่สำคัญของคลาส DataRow:
วิธี | อธิบาย |
---|---|
ยอมรับการเปลี่ยนแปลง | ใช้การเปลี่ยนแปลงทั้งหมดนับตั้งแต่มีการเรียกเมธอดนี้ |
เริ่มต้นแก้ไข | เริ่มดำเนินการแก้ไข |
ยกเลิกแก้ไข | ยกเลิกการดำเนินการแก้ไข |
ลบ | ลบแถวข้อมูล |
สิ้นสุดแก้ไข | สิ้นสุดการดำเนินการแก้ไข |
รับ ChildRows | รับแถวย่อยของแถวนี้ |
รับParentRow | รับแถวพาเรนต์ |
รับParentRows | รับแถวพาเรนต์ของ DataRow |
ปฏิเสธการเปลี่ยนแปลง | ย้อนกลับการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นหลังจากการเรียก AcceptChanges |
วัตถุ DataAdapter ทำหน้าที่เป็นตัวกลางระหว่างวัตถุ DataSet และฐานข้อมูล ซึ่งช่วยให้ชุดข้อมูลได้รับข้อมูลจากหลายฐานข้อมูลหรือแหล่งข้อมูลอื่นๆ
ออบเจ็กต์ DataReader เป็นอีกทางเลือกหนึ่งในการรวม DataSet และ DataAdapter วัตถุนี้ให้การเข้าถึงโดยตรงไปยังบันทึกข้อมูลในฐานข้อมูล ออบเจ็กต์เหล่านี้เหมาะสำหรับการเข้าถึงแบบอ่านอย่างเดียวเท่านั้น เช่น การกรอกรายการแล้วยกเลิกการเชื่อมต่อ
อ็อบเจ็กต์ DbConnection แสดงถึงการเชื่อมต่อกับแหล่งข้อมูล การเชื่อมต่อนี้สามารถแชร์ระหว่างออบเจ็กต์คำสั่งต่างๆ ออบเจ็กต์ DbCommand แสดงถึงคำสั่งหรือกระบวนการที่เก็บไว้ที่ถูกส่งไปยังฐานข้อมูลเพื่อเรียกค้นหรือจัดการข้อมูล
จนถึงตอนนี้ เราได้ใช้ตารางและฐานข้อมูลจากคอมพิวเตอร์ของเรา ในกรณีนี้ เราจะสร้างตาราง เพิ่มคอลัมน์ แถว และข้อมูล และแสดงตารางโดยใช้ตัวควบคุม GridView
รหัสไฟล์ต้นฉบับเป็นดังนี้:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="createdatabase._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server"> </asp:GridView> </div> </form> </body></html>
รหัสของไฟล์มีดังนี้:
namespace createdatabase{ public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataSet ds = CreateDataSet(); GridView1.DataSource = ds.Tables["Student"]; GridView1.DataBind(); } } private DataSet CreateDataSet() { //creating a DataSet object for tables DataSet dataset = new DataSet(); // creating the student table DataTable Students = CreateStudentTable(); dataset.Tables.Add(Students); return dataset; } private DataTable CreateStudentTable() { DataTable Students = new DataTable("Student"); // adding columns AddNewColumn(Students, "System.Int32", "StudentID"); AddNewColumn(Students, "System.String", "StudentName"); AddNewColumn(Students, "System.String", "StudentCity"); // adding rows AddNewRow(Students, 1, "MH Kabir", "Kolkata"); AddNewRow(Students, 1, "Shreya Sharma", "Delhi"); AddNewRow(Students, 1, "Rini Mukherjee", "Hyderabad"); AddNewRow(Students, 1, "Sunil Dubey", "Bikaner"); AddNewRow(Students, 1, "Rajat Mishra", "Patna"); return Students; } private void AddNewColumn(DataTable table, string columnType, string columnName) { DataColumn column = table.Columns.Add(columnName, Type.GetType(columnType)); } //adding data into the table private void AddNewRow(DataTable table, int id, string name, string city) { DataRow newrow = table.NewRow(); newrow["StudentID"] = id; newrow["StudentName"] = name; newrow["StudentCity"] = city; table.Rows.Add(newrow); } }}
ขณะที่คุณรันโปรแกรม ให้สังเกตประเด็นต่อไปนี้:
ขั้นแรกโปรแกรมจะสร้างการรวบรวมข้อมูลแล้วเชื่อมโยงโดยใช้เมธอด DataBind() ของตัวควบคุม GridView
เมธอด Createdataset() เป็นฟังก์ชันที่ผู้ใช้กำหนดซึ่งสร้างวัตถุชุดข้อมูลใหม่และเรียกเมธอด Createdataset() ที่ผู้ใช้กำหนดเพิ่มเติมเพื่อสร้างตาราง และเพิ่มลงในคอลเลกชันตารางของชุดข้อมูล
เมธอด CreateStudentTable() เรียกเมธอด AddNewColumn() และ AddNewRow() ที่ผู้ใช้กำหนดเพื่อสร้างคอลัมน์และแถวของตารางและเพิ่มข้อมูลลงในแถว เมื่อเพจถูกดำเนินการ มันจะส่งคืนแถวของตารางดังที่แสดงด้านล่าง: