การควบคุมแหล่งข้อมูลโต้ตอบกับการควบคุมที่ผูกกับข้อมูลและซ่อนกระบวนการผูกข้อมูลที่ซับซ้อน เครื่องมือเหล่านี้คือเครื่องมือที่ให้ข้อมูลแก่การควบคุมการเชื่อมโยงข้อมูล และสนับสนุนการดำเนินการต่างๆ เช่น การแทรก ลบ และการอัปเดต
ตัวควบคุมแหล่งข้อมูลแต่ละรายการจะล้อมผู้ให้บริการข้อมูลพิเศษที่เกี่ยวข้องกับฐานข้อมูล ไฟล์ XML หรือคลาสแบบกำหนดเอง และช่วย:
จัดการการเชื่อมต่อ
เลือกข้อมูล
จัดการลักษณะการนำเสนอ เช่น การเพจ การแคช ฯลฯ
จัดการข้อมูล
มีตัวควบคุมแหล่งข้อมูลมากมายใน ASP.NET สำหรับการดึงข้อมูลจากเซิร์ฟเวอร์ SQL, เซิร์ฟเวอร์ ODBC หรือ OLE DB จากไฟล์ XML และจากวัตถุทางธุรกิจ
ขึ้นอยู่กับชนิดข้อมูล การควบคุมเหล่านี้สามารถแบ่งออกเป็นสองประเภท:
การควบคุมแหล่งข้อมูลแบบเลเยอร์
การควบคุมแหล่งข้อมูลตามตาราง
การควบคุมแหล่งข้อมูลสำหรับข้อมูลแบบลำดับชั้นคือ:
XMLDataSource - อนุญาตให้รวมไฟล์ XML และสตริงโดยมีหรือไม่มีข้อมูลสคีมา
SiteMapDataSource - อนุญาตให้เชื่อมโยงผู้ให้บริการที่ให้ข้อมูลแผนผังเว็บไซต์
การควบคุมแหล่งข้อมูลที่ใช้สำหรับข้อมูลแบบตารางคือ:
การควบคุมแหล่งข้อมูล | อธิบาย |
---|---|
SqlDataSource | ซึ่งแสดงถึงการเชื่อมต่อกับผู้ให้บริการข้อมูล ADO.NET ที่ส่งคืนข้อมูล SQL รวมถึงแหล่งข้อมูลที่มีให้ผ่าน OLEDB และ QDBC |
วัตถุ DataSource | อนุญาตให้เชื่อมโยงออบเจ็กต์ธุรกิจ .Net แบบกำหนดเองที่ส่งคืนข้อมูล |
LinqdataSource | อนุญาตให้เชื่อมโยงผลลัพธ์ของการสืบค้น Linq-t0-SQL (รองรับเฉพาะ ASP.NET 3.5) |
เข้าถึงแหล่งข้อมูล | มันแสดงถึงการเชื่อมต่อกับฐานข้อมูล Microsoft Access |
มุมมองแหล่งข้อมูลเป็นออบเจ็กต์ของคลาส DataSourceView ซึ่งแสดงถึงมุมมองข้อมูลแบบกำหนดเองที่ออกแบบมาสำหรับการดำเนินการข้อมูลที่แตกต่างกัน เช่น การเรียงลำดับ การกรอง ฯลฯ
คลาส DataSourceView ถูกใช้เป็นคลาสพื้นฐานสำหรับคลาสมุมมองแหล่งข้อมูลทั้งหมด และกำหนดประสิทธิภาพของการควบคุมแหล่งข้อมูล
ตารางต่อไปนี้แสดงคุณสมบัติของคลาส DataSourceView:
คุณสมบัติ | อธิบาย |
---|---|
สามารถลบได้ | ระบุว่าอนุญาตให้ลบแหล่งข้อมูลที่เป็นไปได้หรือไม่ |
สามารถแทรก | ระบุว่าจะอนุญาตให้แทรกแหล่งข้อมูลที่เป็นไปได้หรือไม่ |
สามารถเพจ | ระบุว่าอนุญาตให้เพจของแหล่งข้อมูลที่เป็นไปได้หรือไม่ |
สามารถดึงข้อมูล TotalRowCount ได้ | ระบุว่าสามารถรับข้อมูลแถวทั้งหมดได้หรือไม่ |
สามารถเรียงลำดับ | ระบุว่าสามารถจัดเรียงข้อมูลได้หรือไม่ |
สามารถอัพเดตได้ | ระบุว่าอนุญาตให้อัปเดตแหล่งข้อมูลที่เป็นไปได้หรือไม่ |
กิจกรรม | รับรายการตัวจัดการเหตุการณ์ที่แสดงโดยมุมมองแหล่งข้อมูล |
ชื่อ | ชื่อของมุมมอง |
ตารางต่อไปนี้แสดงวิธีการของคลาส DataSourceView:
วิธี | อธิบาย |
---|---|
สามารถดำเนินการได้ | ตรวจสอบว่าคำสั่งที่ระบุสามารถดำเนินการได้หรือไม่ |
ดำเนินการคำสั่ง | ดำเนินการคำสั่งที่ระบุ |
ดำเนินการลบ | ดำเนินการลบในรายการข้อมูลที่แสดงโดยออบเจ็กต์ DataSourceView |
ดำเนินการแทรก | ดำเนินการแทรกในรายการข้อมูลที่แสดงโดยวัตถุ DataSourceView |
ดำเนินการเลือก | รับรายการข้อมูลจากที่เก็บข้อมูลพื้นฐาน |
ดำเนินการอัปเดต | ดำเนินการอัปเดตในรายการข้อมูลที่แสดงโดยออบเจ็กต์ DataSourceView |
ลบ | ดำเนินการลบข้อมูลที่เกี่ยวข้องกับมุมมอง |
แทรก | ดำเนินการแทรกข้อมูลที่เกี่ยวข้องกับมุมมอง |
เลือก | ส่งคืนข้อมูลที่สอบถาม |
อัปเดต | ดำเนินการอัพเดตข้อมูลที่เกี่ยวข้องกับมุมมอง |
OnDataSourceViewเปลี่ยนแปลงแล้ว | เพิ่มเหตุการณ์ DataSourceViewChanged |
RaiseUnsupportedCapabilitiesError | เรียกโดยเมธอด RaiseUnsupportedCapabilitiesError เพื่อเปรียบเทียบความสามารถที่ต้องการโดยการดำเนินการ ExecuteSelect กับความสามารถที่มุมมองรองรับ |
ตัวควบคุม SqlDataSource แสดงถึงการเชื่อมต่อกับฐานข้อมูลที่เกี่ยวข้อง เช่น SQL Server หรือฐานข้อมูล Oracle หรือข้อมูลที่เข้าถึงได้ผ่าน OLEDB หรือ Open Database Connectivity (ODBC) การเชื่อมต่อข้อมูลเสร็จสมบูรณ์ผ่านคุณสมบัติที่สำคัญสองประการ: ConnectionString และ ProviderName
ข้อมูลโค้ดต่อไปนี้มีไวยากรณ์พื้นฐานของตัวควบคุม:
<asp:SqlDataSource runat="server" ID="MySqlSource" ProviderName='<%$ ConnectionStrings:LocalNWind.ProviderName %>' ConnectionString='<%$ ConnectionStrings:LocalNWind %>' SelectionCommand= "SELECT * FROM EMPLOYEES" /><asp:GridView ID="GridView1" runat="server" DataSourceID="MySqlSource" />
การกำหนดค่าการดำเนินการข้อมูลที่แตกต่างกันบนข้อมูลพื้นฐานจะขึ้นอยู่กับคุณสมบัติที่แตกต่างกัน (ชุดคุณสมบัติ) ของตัวควบคุมแหล่งข้อมูล
ตารางต่อไปนี้แสดงชุดคุณสมบัติที่เกี่ยวข้องของตัวควบคุม SqlDataSource ซึ่งมีอินเทอร์เฟซการเขียนโปรแกรมของตัวควบคุม:
กลุ่มแอตทริบิวต์ | อธิบาย |
---|---|
DeleteCommand, ลบพารามิเตอร์, DeleteCommandType | รับหรือตั้งค่าคำสั่ง SQL พารามิเตอร์ และประเภทของแถวที่จะลบในข้อมูลพื้นฐาน |
FilterExpression, พารามิเตอร์ตัวกรอง | รับและตั้งค่าสตริงและพารามิเตอร์การกรองข้อมูล |
InsertCommand,InsertParameters,InsertCommandType | รับหรือตั้งค่าคำสั่ง SQL พารามิเตอร์ และประเภทของแถวที่แทรกลงในข้อมูลพื้นฐาน |
SelectCommand, SelectParameters, SelectCommandType | รับหรือตั้งค่าคำสั่ง SQL พารามิเตอร์ และประเภทของแถวที่ดึงมาจากข้อมูลพื้นฐาน |
SortParameterName | รับหรือตั้งชื่อพารามิเตอร์อินพุตที่จะใช้โดยคำสั่งที่จัดเก็บโพรซีเดอร์เพื่อเรียงลำดับข้อมูล |
UpdateCommand, UpdateParameters, UpdateCommandType | รับหรือตั้งค่าคำสั่ง SQL พารามิเตอร์ และประเภทของแถวที่อัพเดตในข้อมูลพื้นฐาน |
ส่วนย่อยโค้ดต่อไปนี้แสดงการควบคุมแหล่งข้อมูลที่สามารถใช้เพื่อดำเนินการข้อมูล:
<asp:SqlDataSource runat="server" ID= "MySqlSource" ProviderName='<%$ ConnectionStrings:LocalNWind.ProviderName %>' ConnectionString=' <%$ ConnectionStrings:LocalNWind %>' SelectCommand= "SELECT * FROM EMPLOYEES" UpdateCommand= "UPDATE EMPLOYEES SET LASTNAME=@lame" DeleteCommand= "DELETE FROM EMPLOYEES WHERE EMPLOYEEID=@eid" FilterExpression= "EMPLOYEEID > 10"> ..... .....</asp:SqlDataSource>
การควบคุม ObjectDataSource ช่วยให้คลาสที่ผู้ใช้กำหนดสามารถเชื่อมต่อเอาท์พุทของวิธีการของพวกเขากับการควบคุมที่ถูกผูกไว้กับข้อมูล อินเทอร์เฟซการเขียนโปรแกรมของคลาสนี้เกือบจะเหมือนกับตัวควบคุม SqlDataSource
ต่อไปนี้เป็นประเด็นสำคัญสองประการของการผูกมัดออบเจ็กต์ของลูกค้า:
คลาสที่ผูกได้ควรมีคอนสตรัคเตอร์เริ่มต้น ไม่มีสถานะ และมีเมธอดที่แมปเพื่อเลือก อัปเดต แทรก และลบซีแมนทิกส์
ออบเจ็กต์ต้องได้รับการอัปเดตทีละรายการ ไม่รองรับการดำเนินการแบบแบตช์
มาดูตัวอย่างการใช้การควบคุมนี้กัน ชั้นเรียนของนักเรียนเป็นชั้นเรียนที่ใช้กับวัตถุแหล่งข้อมูล ชั้นเรียนนี้มีคุณลักษณะ 3 ประการ ได้แก่ รหัสนักเรียน ชื่อ และเมือง มีตัวสร้างเริ่มต้นและวิธีการ GetStudents ที่ดึงข้อมูล
ชั้นเรียนของนักเรียน:
public class Student{ public int StudentID { get; set; } public string Name { get; set; } public string City { get; set; } public Student() { } public DataSet GetStudents() { DataSet ds = new DataSet(); DataTable dt = new DataTable("Students"); dt.Columns.Add("StudentID", typeof(System.Int32)); dt.Columns.Add("StudentName", typeof(System.String)); dt.Columns.Add("StudentCity", typeof(System.String)); dt.Rows.Add(new object[] { 1, "MH Kabir", "Calcutta" }); dt.Rows.Add(new object[] { 2, "Ayan J. Sarkar", "Calcutta" }); ds.Tables.Add(dt); return ds; }}
ทำตามขั้นตอนต่อไปนี้เพื่อผูกสายกับออบเจ็กต์แหล่งข้อมูลและดึงข้อมูล:
สร้างหน้าเว็บใหม่
เพิ่มคลาส (Student.cs) ให้กับโปรเจ็กต์ Solution Explorer โดยการคลิกขวา เพิ่มเทมเพลตคลาส และวางโค้ดด้านบนไว้ข้างใน
สร้างวิธีการเพื่อให้แอปพลิเคชันสามารถใช้การอ้างอิงถึงคลาสได้
วางวัตถุควบคุมแหล่งข้อมูลในรูปแบบเว็บ
กำหนดค่าแหล่งข้อมูลโดยการเลือกออบเจ็กต์
เลือกวิธีการข้อมูลสำหรับการดำเนินการข้อมูลที่แตกต่างกัน ในตัวอย่างนี้ มีเพียงวิธีเดียวเท่านั้น
วางตัวควบคุมที่ผูกกับข้อมูล เช่น มุมมองกริดบนเพจ และเลือกออบเจ็กต์แหล่งข้อมูลเป็นแหล่งข้อมูลที่เป็นไปได้
ในขั้นตอนนี้ มุมมองการออกแบบควรมีลักษณะดังนี้:
การรันโปรเจ็กต์จะดึงข้อมูลบรรพบุรุษที่ฮาร์ดโค้ดในชั้นเรียนของนักเรียน
ตัวควบคุม AccessDataSource แสดงถึงการเชื่อมต่อกับฐานข้อมูล Access ขึ้นอยู่กับการควบคุม SqlDataSource และมีอินเทอร์เฟซการเขียนโปรแกรมที่เรียบง่ายกว่า ข้อมูลโค้ดต่อไปนี้มีไวยากรณ์พื้นฐานของแหล่งข้อมูล:
<asp:AccessDataSource ID="AccessDataSource1 runat="server" DataFile="~/App_Data/ASPDotNetStepByStep.mdb" SelectCommand="SELECT * FROM [DotNetReferences]"></asp:AccessDataSource>
ตัวควบคุม AccessDataSource เปิดฐานข้อมูลในโหมดอ่านอย่างเดียว อย่างไรก็ตาม ยังสามารถใช้เพื่อดำเนินการแทรก อัปเดต หรือลบได้อีกด้วย ซึ่งสามารถทำได้โดยใช้คำสั่ง ADO.NET และชุดพารามิเตอร์
การอัปเดตเป็นปัญหาสำหรับฐานข้อมูล Access ภายในแอปพลิเคชัน ASP.NET เนื่องจากฐานข้อมูล Access เป็นข้อความธรรมดาและบัญชีแอปพลิเคชัน ASP.NET เริ่มต้นอาจมีสิทธิ์ในการเขียนไปยังไฟล์ฐานข้อมูล