50 คำถามและคำตอบสัมภาษณ์ ADO.NET ยอดนิยม (ปี 2026)

คำถามและคำตอบสำหรับการสัมภาษณ์งาน ADO.NET

การเตรียมตัวสำหรับการสัมภาษณ์งาน ADO.NET หมายถึงการคาดการณ์ว่าผู้สัมภาษณ์ให้ความสำคัญกับอะไร การพูดคุยเกี่ยวกับคำถามสัมภาษณ์งาน ADO.NET จะช่วยให้เห็นถึงความลึกซึ้ง ความสามารถในการแก้ปัญหา และความเข้าใจในแนวคิดการเข้าถึงข้อมูล ซึ่งเป็นสิ่งที่นายจ้างประเมินอย่างจริงจัง

การตอบคำถามเหล่านี้ได้อย่างเชี่ยวชาญจะเปิดโอกาสทางอาชีพในด้านการพัฒนาองค์กร การวิเคราะห์ข้อมูล และระบบแบ็กเอนด์ ผู้สมัครต้องแสดงให้เห็นถึงความเชี่ยวชาญทางเทคนิค ประสบการณ์การทำงานจริง และความเข้าใจในด้านนั้นๆ จากการทำงานในภาคสนาม ตั้งแต่ผู้จบใหม่ไปจนถึงผู้เชี่ยวชาญระดับสูง ผู้จัดการและหัวหน้าทีมต่างให้ความสำคัญกับทักษะการวิเคราะห์เชิงปฏิบัติ การสอดคล้องของทักษะ และความสามารถในการแก้ไขปัญหาทางเทคนิคทั่วไป
อ่านเพิ่มเติม ...

👉 ดาวน์โหลดไฟล์ PDF ฟรี: คำถามและคำตอบสำหรับการสัมภาษณ์งาน ADO.NET

คำถามและคำตอบสัมภาษณ์งาน ADO.NET ที่สำคัญที่สุด

1) ADO.NET คืออะไร และมีบทบาทอย่างไรในแอปพลิเคชัน .NET?

ADO.NET (ActiveX Data Objects .NET) คือ เทคโนโลยีการเข้าถึงข้อมูล ภายใน Microsoft .NET Framework ใช้สำหรับโต้ตอบกับฐานข้อมูลและแหล่งข้อมูลอื่นๆ เช่น ไฟล์ XML โดยมีชุดคลาสและอินเทอร์เฟซที่ช่วยให้สามารถใช้งานสิ่งเหล่านั้นได้ การเชื่อมต่อกับแหล่งข้อมูล การเรียกใช้แบบสอบถามหรือคำสั่ง และการดึงและจัดการข้อมูลADO.NET รองรับทั้งสองอย่าง เชื่อมต่อแล้ว (การเชื่อมต่อฐานข้อมูลแบบเรียลไทม์) และ ตัดการเชื่อมต่อ (การเข้าถึงข้อมูลในหน่วยความจำ) โมเดลเหล่านี้ทำให้มีความยืดหยุ่นสำหรับความต้องการใช้งานที่หลากหลาย


2) ส่วนประกอบหลักของ ADO.NET มีอะไรบ้าง?

โครงสร้างของ ADO.NET ประกอบด้วยองค์ประกอบหลักหลายประการ ส่วนประกอบต่างๆ ที่ทำงานร่วมกันเพื่อเปิดใช้งานการเข้าถึงข้อมูล:

  • การเชื่อมต่อ: สร้างการเชื่อมต่อระหว่างแอปพลิเคชัน .NET กับแหล่งข้อมูล
  • คำสั่ง: ดำเนินการคำสั่ง SQL, สตored procedure และคำสั่งอื่นๆ
  • เครื่องอ่านข้อมูล: ให้การเรียกข้อมูลแบบอ่านอย่างเดียว รวดเร็ว และอ่านไปข้างหน้าได้เท่านั้น โดยใช้โมเดลที่เชื่อมต่อกัน
  • ตัวแปลงข้อมูล: ทำหน้าที่เป็นสะพานเชื่อมระหว่างแหล่งข้อมูลและชุดข้อมูลสำหรับการเข้าถึงข้อมูลที่ไม่ได้เชื่อมต่อกัน
  • ชุดข้อมูล: การจัดเก็บข้อมูลในหน่วยความจำ ซึ่งสามารถเก็บข้อมูลหลายตารางและข้อมูลโครงสร้างได้
  • ตารางข้อมูล / แถวข้อมูล / คอลัมน์ข้อมูล: แสดงโครงสร้างตารางและข้อมูลภายในชุดข้อมูล (DataSet)

3) อธิบายความแตกต่างระหว่างการเข้าถึงข้อมูลแบบเชื่อมต่อและแบบไม่เชื่อมต่อ

ADO.NET รองรับโมเดลที่แตกต่างกันสองแบบ:

  • โมเดลที่เชื่อมต่อ:
    • ใช้วัตถุต่างๆ เช่น การเชื่อมต่อและเครื่องอ่านข้อมูล.
    • แอปพลิเคชันต้องรักษาการเชื่อมต่อกับฐานข้อมูลอย่างต่อเนื่องในขณะที่ดึงข้อมูล
    • เหมาะอย่างยิ่งสำหรับการทำงานแบบเรียลไทม์และแบบอ่านอย่างเดียว ซึ่งต้องการการโต้ตอบกับฐานข้อมูลโดยทันที
  • รุ่นที่ไม่เชื่อมต่อ:
    • Utilizes ตัวแปลงข้อมูลและชุดข้อมูล.
    • ข้อมูลถูกโหลดเข้าสู่หน่วยความจำแล้ว และสามารถปิดการเชื่อมต่อกับฐานข้อมูลได้
    • ช่วยให้สามารถจัดการข้อมูลแบบออฟไลน์และตรวจสอบความถูกต้องกับฐานข้อมูลในภายหลังได้ วิธีนี้ช่วยเพิ่มความสามารถในการขยายขนาดและลดภาระงานของเซิร์ฟเวอร์ฐานข้อมูล

4) DataReader กับ DataSet แตกต่างกันอย่างไร?

แง่มุม โปรแกรมอ่านข้อมูล ชุดข้อมูล
การเชื่อมต่อ จำเป็นต้องมีการเชื่อมต่อฐานข้อมูลที่เปิดอยู่ ทำงานโดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต
การเข้าถึงข้อมูล ส่งต่อได้อย่างเดียว อ่านได้อย่างเดียว รองรับการจัดการข้อมูลในหน่วยความจำ
ประสิทธิภาพ ความเร็วสูง ต่ำกว่า DataReader เนื่องจากมีค่าใช้จ่ายเพิ่มเติมในหน่วยความจำ
ใช้กรณี การดึงข้อมูลผลลัพธ์ขนาดใหญ่ได้อย่างรวดเร็ว การดำเนินการข้อมูลที่ซับซ้อนและการทำงานแบบออฟไลน์

A โปรแกรมอ่านข้อมูล มีประสิทธิภาพและน้ำหนักเบา เหมาะสำหรับการอ่านข้อมูลอย่างรวดเร็ว ชุดข้อมูลในทางกลับกัน วิธีนี้มีประโยชน์เมื่อคุณต้องการทำงานกับตารางหลายตาราง ความสัมพันธ์ และการดำเนินการข้อมูลในหน่วยความจำ


5) การเชื่อมต่อคืออะไร Pooling ใน ADO.NET?

การเชื่อมต่อ Pooling เป็นคุณลักษณะด้านประสิทธิภาพที่ นำการเชื่อมต่อฐานข้อมูลที่เปิดอยู่มาใช้ซ้ำ แทนที่จะเปิดและปิดการเชื่อมต่อซ้ำๆ เมื่อการเชื่อมต่อถูกปิด ระบบจะส่งการเชื่อมต่อนั้นกลับไปยังพูลที่ดูแลโดย ADO.NET คำขอในครั้งต่อๆ ไปจะใช้การเชื่อมต่อที่มีอยู่แล้วจากพูล ซึ่งช่วยลดภาระในการสร้างการเชื่อมต่อและปรับปรุงประสิทธิภาพในสภาพแวดล้อมที่มีภาระงานสูงได้อย่างมาก


6) Data providers ใน ADO.NET คืออะไร?

ผู้ให้บริการข้อมูลคือคลาสที่ เปิดใช้งานการสื่อสารระหว่างแอปพลิเคชันของคุณกับแหล่งข้อมูลประเภทต่างๆผู้ให้บริการข้อมูลที่ใช้กันทั่วไปใน ADO.NET ได้แก่:

  • คิวแอลไคลเอ็นต์: ใช้เพื่อการ Microsoft SQL Server.
  • โอเลดีบี: สำหรับฐานข้อมูลที่สามารถเข้าถึงได้ผ่าน OLE DB (เช่น MS Access)
  • โอดีบีซี: สำหรับฐานข้อมูลผ่านไดรเวอร์ ODBC
  • Oracleลูกค้า: ใช้เพื่อการ Oracle ฐานข้อมูล (เลิกใช้แล้วใน .NET เวอร์ชันใหม่กว่า) ผู้ให้บริการเหล่านี้มีคลาส Connection, Command, DataReader และ DataAdapter ของตนเอง ซึ่งแต่ละคลาสได้รับการปรับให้เหมาะสมกับแหล่งข้อมูลนั้นๆ

7) คุณจะดำเนินการคำสั่ง SQL ใน ADO.NET ได้อย่างไร?

ใน ADO.NET คำสั่ง SQL จะถูกดำเนินการโดยใช้ วัตถุคำสั่งขึ้นอยู่กับประเภทของการดำเนินการที่คุณต้องการทำ คุณจะใช้วิธีการดำเนินการที่แตกต่างกัน:

  • ExecuteReader(): สำหรับคำสั่ง SELECT ที่ส่งคืนชุดผลลัพธ์
  • ExecuteNonQuery(): สำหรับคำสั่ง INSERT, UPDATE, DELETE (จะแสดงจำนวนแถวที่ได้รับผลกระทบ)
  • ExecuteScalar(): สำหรับคำสั่งค้นหาที่ส่งคืนค่าเดียว (เช่น จำนวนนับ)
  • ExecuteXmlReader(): สำหรับคำสั่งค้นหาที่ส่งคืนข้อมูล XML การใช้วิธีการดำเนินการที่ถูกต้องจะช่วยให้ได้ประสิทธิภาพสูงสุดและการจัดการผลลัพธ์ที่ถูกต้อง

8) วัตถุประสงค์ของอ็อบเจ็กต์ Command คืออะไร?

การขอ วัตถุคำสั่ง ใน ADO.NET มีหน้าที่รับผิดชอบในเรื่องต่อไปนี้ การเรียกใช้คำสั่ง SQL หรือโพรซีเดอร์ที่จัดเก็บไว้ คำสั่งนี้ใช้กับฐานข้อมูล โดยใช้การเชื่อมต่อที่สร้างไว้แล้วและดำเนินการคำสั่งต่างๆ เช่น การดึงข้อมูล การแก้ไขระเบียน หรือการดำเนินการที่ซับซ้อนโดยใช้โพรซีเดอร์ที่จัดเก็บไว้ อ็อบเจ็กต์ Command สามารถกำหนดค่าด้วยพารามิเตอร์เพื่อรองรับการสืบค้นที่ปลอดภัยและหลีกเลี่ยงการโจมตีแบบ SQL injection


9) การค้นหาแบบมีพารามิเตอร์คืออะไร และเหตุใดจึงมีความสำคัญ?

A แบบสอบถามที่มีพารามิเตอร์ เป็นคำสั่ง SQL ที่ ตัวยึดตำแหน่ง (พารามิเตอร์) ใช้วิธีการนี้แทนการกำหนดค่าโดยตรงลงในสตริง SQL วิธีการนี้:

  • ป้องกัน ด้วย SQL Injection โดยถือว่าข้อมูลที่ผู้ใช้ป้อนเข้ามาเป็นข้อมูล ไม่ใช่โค้ดที่สามารถเรียกใช้งานได้
  • ปรับปรุง ความสามารถในการนำกลับมาใช้ใหม่และการบำรุงรักษา ของคำสั่ง SQL

ในอ็อบเจ็กต์ Command พารามิเตอร์จะถูกเพิ่มแยกต่างหาก ซึ่งช่วยให้การทำงานปลอดภัยและมีประสิทธิภาพมากขึ้น


10) การทำธุรกรรมใน ADO.NET ทำงานอย่างไร?

ธุรกรรมใน ADO.NET ช่วยให้มั่นใจได้ว่า ชุดการดำเนินการจะถูกดำเนินการเป็นหน่วยเดียวคุณเริ่มต้นธุรกรรมโดยใช้วัตถุการเชื่อมต่อ ดำเนินการคำสั่งหลายคำสั่งภายในนั้น แล้วจึงดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้ กระทำ (บันทึกการเปลี่ยนแปลงทั้งหมด) หรือ ย้อนกลับ (ยกเลิกการเปลี่ยนแปลง) โดยพิจารณาจากความสำเร็จหรือความล้มเหลว ซึ่งรับประกันความถูกต้องของข้อมูล โดยเฉพาะในสถานการณ์ต่างๆ เช่น การโอนเงิน ที่การอัปเดตเพียงบางส่วนอาจนำไปสู่สถานะที่ไม่สอดคล้องกัน


11) บทบาทของ DataAdapter ใน ADO.NET คืออะไร?

A ดาต้าอะแดปเตอร์ ทำหน้าที่เป็น สะพานเชื่อมระหว่างชุดข้อมูลและแหล่งข้อมูล. มันใช้ วัตถุคำสั่ง (เลือก, แทรก, อัปเดต, ลบ) ใช้สำหรับดึงข้อมูลจากฐานข้อมูลไปยัง DataSet และซิงโครไนซ์การเปลี่ยนแปลงกลับไปยังฐานข้อมูล DataAdapter จะจัดการการเปิดและปิดการเชื่อมต่อโดยอัตโนมัติเมื่อทำการกรอกหรืออัปเดตข้อมูล

วิธีการหลัก ได้แก่ :

  • เติม() – เติมข้อมูลลงใน DataSet จากแหล่งข้อมูล
  • อัปเดต() – ส่งการเปลี่ยนแปลงจากชุดข้อมูลกลับไปยังฐานข้อมูล

แนวทางนี้เป็นหัวใจสำคัญของ ADO.NET สถาปัตยกรรมที่ไม่เชื่อมต่อกันทำให้แอปพลิเคชันสามารถจัดการข้อมูลแบบออฟไลน์และบันทึกการเปลี่ยนแปลงได้อย่างมีประสิทธิภาพในภายหลัง


12) อธิบายความแตกต่างระหว่าง ExecuteReader(), ExecuteScalar() และ ExecuteNonQuery()

การขอ วัตถุคำสั่ง ADO.NET มีเมธอดหลักสามวิธีสำหรับการเรียกใช้คำสั่ง SQL:

วิธี คืนสินค้า การใช้งานทั่วไป ตัวอย่าง
ExecuteReader() โปรแกรมอ่านข้อมูล คำสั่ง SELECT บันทึกการอ่าน
ExecuteScalar() ค่าเดียว การค้นหาข้อมูลแบบรวม (COUNT, SUM) การหาจำนวนแถวทั้งหมด
ExecuteNonQuery() จำนวนเต็ม (แถวที่ได้รับผลกระทบ) เพิ่มข้อมูล อัปเดตข้อมูล ลบข้อมูล การแก้ไขข้อมูล

ตัวอย่าง:

SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Employees", con);
int count = (int)cmd.ExecuteScalar();

ที่นี่ ExecuteScalar() ดึงค่าเดียวได้อย่างมีประสิทธิภาพโดยไม่ต้องโหลดชุดข้อมูลทั้งหมด ช่วยเพิ่มประสิทธิภาพการทำงาน


13) คลาส DataView ใน ADO.NET มีประโยชน์อย่างไร?

การขอ DataView คลาสให้ก การแสดงข้อมูลแบบไดนามิกที่ปรับแต่งได้ตามต้องการภายใน DataTableมันช่วยให้นักพัฒนาสามารถ เรียงลำดับ กรอง หรือค้นหา แสดงข้อมูลโดยไม่แก้ไขตารางต้นฉบับ DataView มีประโยชน์ในการแสดงข้อมูลที่กรองแล้วในส่วนประกอบ UI เช่น DataGridView หรือ ListView

ตัวอย่างเช่น:

DataView view = new DataView(dataTable);
view.RowFilter = "Department = 'IT'";
view.Sort = "EmployeeName ASC";

จากนั้นสามารถผูกมุมมองที่กรองแล้วเข้ากับองค์ประกอบ UI ได้โดยตรง ซึ่งจะช่วยเพิ่มประสิทธิภาพโดยหลีกเลี่ยงการเรียกใช้ฐานข้อมูลหลายครั้ง


14) ความแตกต่างที่สำคัญระหว่าง ADO และ ADO.NET คืออะไร?

ลักษณะ ADO ADO.NET
Archiเทคเจอร์ เรามีเครือข่าย เชื่อมต่อและตัดการเชื่อมต่อ
การจัดเก็บข้อมูล ชุดระเบียน ชุดข้อมูล (แบบ XML)
scalability ต่ำ จุดสูง
รองรับ XML ถูก จำกัด เต็ม
การเข้าถึงข้อมูล อิงตาม COM โค้ดที่จัดการได้ (.NET)

คำอธิบาย: ADO.NET มีคุณสมบัติดังนี้ โมเดลที่สมบูรณ์ยิ่งขึ้น ปรับขนาดได้มากขึ้น และผสานรวมเข้ากับ XML มีประสิทธิภาพเหนือกว่า ADO แบบดั้งเดิม ได้รับการปรับให้เหมาะสมสำหรับแอปพลิเคชันแบบกระจายและบนเว็บ รองรับการดำเนินการข้อมูลแบบไม่เชื่อมต่อ และการแปลงข้อมูลเป็น XML เพื่อความสามารถในการทำงานร่วมกัน


15) ADO.NET จัดการกับปัญหาการทำงานพร้อมกันอย่างไร?

ข้อขัดแย้งในการทำงานพร้อมกันเกิดขึ้นเมื่อผู้ใช้หลายคนแก้ไขข้อมูลเดียวกันในเวลาเดียวกัน ADO.NET มีวิธีการจัดการหลายรูปแบบ กลยุทธ์ในการจัดการกับการทำงานพร้อมกัน:

  1. การทำงานพร้อมกันอย่างมองโลกในแง่ดี: ข้อมูลจะถือว่าไม่เปลี่ยนแปลงจนกว่าจะมีการอัปเดต DataAdapter จะตรวจสอบค่าเดิมก่อนที่จะยืนยันการอัปเดต
  2. ความสอดคล้องที่มองโลกในแง่ร้าย: ข้อมูลจะถูกล็อกเมื่อมีการอ่านหรือแก้ไข เพื่อป้องกันการเข้าถึงพร้อมกันหลายเครื่อง

ในแอปพลิเคชัน .NET ส่วนใหญ่ในโลกแห่งความเป็นจริง การเกิดขึ้นพร้อมกันในแง่ดี เป็นที่นิยมเนื่องจากมีประสิทธิภาพและข้อดีด้านความสามารถในการขยายขนาด


16) DataRelation มีความสำคัญอย่างไรใน ADO.NET?

การขอ ความสัมพันธ์ข้อมูล วัตถุกำหนด ความสัมพันธ์แบบพ่อแม่-ลูกระหว่าง DataTable สองตาราง ภายในชุดข้อมูล ฟังก์ชันนี้ช่วยให้สามารถนำทางระหว่างระเบียนที่เกี่ยวข้องได้ คล้ายกับข้อจำกัดคีย์ต่างประเทศในฐานข้อมูล

ตัวอย่าง:

DataRelation rel = new DataRelation("DeptEmp",
    ds.Tables["Department"].Columns["DeptID"],
    ds.Tables["Employee"].Columns["DeptID"]);
ds.Relations.Add(rel);

วิธีนี้ช่วยให้สามารถเข้าถึงข้อมูลตามลำดับชั้นได้โดยใช้ รับแถวลูก() และ รับแถวผู้ปกครอง()ทำให้มีประสิทธิภาพในการแสดงโครงสร้างเชิงสัมพันธ์ในหน่วยความจำ


17) SqlCommand และ SqlDataAdapter แตกต่างกันอย่างไร?

ลักษณะ SQLCommand ตัวแปลงข้อมูล SQL
จุดมุ่งหมาย ดำเนินการคำสั่ง SQL เพียงคำสั่งเดียว ทำหน้าที่เป็นสะพานเชื่อมระหว่างชุดข้อมูลและฐานข้อมูล
การเชื่อมต่อ ต้องมีการเชื่อมต่อแบบเปิด จัดการการเชื่อมต่อโดยอัตโนมัติ
ตัวแบบข้อมูล เรามีเครือข่าย ตัดการเชื่อมต่อ
การใช้ คำสั่งแบบเรียลไทม์ การอัปเดตและการซิงโครไนซ์แบบออฟไลน์

ตัวอย่าง: ใช้ SQLCommand เมื่อทำการสืบค้นข้อมูลโดยตรง (เช่น INSERT, SELECT) ให้ใช้ ตัวแปลงข้อมูล SQL สำหรับการดำเนินการที่ไม่เชื่อมต่อกัน เช่น การกรอกและการอัปเดตชุดข้อมูล


18) คำสั่งประเภทต่างๆ ใน ​​ADO.NET มีอะไรบ้าง?

ADO.NET รองรับสิ่งต่อไปนี้ ประเภทคำสั่ง ค่า:

  1. ข้อความ: ประเภทเริ่มต้นสำหรับคำสั่ง SQL ดิบ
  2. สตoredProcedure: เรียกใช้โปรแกรมย่อยที่จัดเก็บไว้ล่วงหน้า
  3. TableDirect: ดึงข้อมูลทุกแถวจากตารางที่ระบุ (สำหรับผู้ให้บริการ OLE DB)

การใช้ stored procedures ช่วยเพิ่มความปลอดภัยและประสิทธิภาพ ในขณะเดียวกัน ข้อความ เหมาะอย่างยิ่งสำหรับการค้นหาข้อมูลแบบไดนามิก


19) DataSet คืออะไร และมีคุณสมบัติหลักอะไรบ้าง?

A ชุดข้อมูล เป็น การแสดงข้อมูลในหน่วยความจำ ประกอบด้วยตาราง ความสัมพันธ์ และข้อจำกัดหลายรายการ รองรับการเข้าถึงแบบออฟไลน์และการจัดเก็บข้อมูลแบบ XML

คุณสมบัติที่สำคัญ:

  • โต๊ะ: กลุ่มของอ็อบเจ็กต์ DataTable
  • ความสัมพันธ์: ความสัมพันธ์ระหว่างตารางต่างๆ
  • ข้อ จำกัด : รักษาความสมบูรณ์ของข้อมูล (เช่น UniqueConstraint, ForeignKeyConstraint)
  • มีการเปลี่ยนแปลง: ระบุว่าข้อมูลได้รับการแก้ไขหรือไม่

DataSet ช่วยให้สามารถดำเนินการกับข้อมูลจำนวนมากและจัดการข้อมูลแบบออฟไลน์ได้ ทำให้เหมาะสำหรับแอปพลิเคชันแบบกระจายศูนย์


20) อธิบายความแตกต่างระหว่างเมธอด Fill() และ Update() ใน ADO.NET

วิธี จุดมุ่งหมาย ข้อกำหนดการเชื่อมต่อ
เติม() เติมข้อมูลลงใน DataSet จากแหล่งข้อมูล การเชื่อมต่อจะเปิดและปิดโดยอัตโนมัติ
อัปเดต() ส่งข้อมูล DataSet ที่แก้ไขแล้วกลับไปยังฐานข้อมูล การเชื่อมต่อจะเปิดและปิดโดยอัตโนมัติ

คำอธิบาย:

  • เติม(): อ่านข้อมูลจากแหล่งข้อมูลลงในตาราง DataSet โดยใช้ SelectCommand
  • อัปเดต(): ใช้คำสั่ง INSERT, UPDATE หรือ DELETE เพื่อแก้ไขข้อมูลในชุดข้อมูลและส่งกลับไปยังฐานข้อมูล สองวิธีนี้รวมกันเป็น... แก่นหลักของการดำเนินการข้อมูลที่ไม่เชื่อมต่อกัน ใน ADO.NET

21) บทบาทของอ็อบเจ็กต์ Connection ใน ADO.NET คืออะไร?

การขอ วัตถุการเชื่อมต่อ ก่อตั้ง a การเชื่อมโยงระหว่างแอปพลิเคชันและแหล่งข้อมูลมันจัดเตรียมวิธีการและคุณสมบัติต่างๆ ให้แก่ เปิด ปิด และจัดการ การเชื่อมต่อฐานข้อมูล ออบเจ็กต์การเชื่อมต่อทั่วไปจะแตกต่างกันไปตามผู้ให้บริการ — ตัวอย่างเช่น การเชื่อมต่อ SQL สำหรับ SQL Server และ การเชื่อมต่อ OleDb สำหรับแหล่งข้อมูล OLE DB

คุณสมบัติที่สำคัญ:

  • การเชื่อมต่อ – กำหนดข้อมูลประจำตัวและการตั้งค่าฐานข้อมูล
  • สถานะ – ระบุว่าการเชื่อมต่อเปิดหรือปิดอยู่
  • เริ่มธุรกรรม() – เริ่มการทำธุรกรรมกับฐานข้อมูล

ตัวอย่าง:

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=TestDB;Integrated Security=True");
con.Open();
// Operations
con.Close();

การจัดการการเชื่อมต่ออย่างมีประสิทธิภาพมีความสำคัญอย่างยิ่งต่อประสิทธิภาพการทำงาน โดยเฉพาะอย่างยิ่งในแอปพลิเคชันที่มีปริมาณการใช้งานสูง


22) คุณจัดการธุรกรรมใน ADO.NET อย่างไร พร้อมยกตัวอย่าง?

ธุรกรรมดังกล่าวรับประกัน ความเป็นอะตอม — การดำเนินการทั้งหมดจะสำเร็จหรือล้มเหลวพร้อมกัน ADO.NET จัดเตรียมสิ่งนี้ไว้ให้ ธุรกรรม SQL คลาสสำหรับเรื่องนี้

ตัวอย่าง:

SqlConnection con = new SqlConnection(connString);
con.Open();
SqlTransaction tran = con.BeginTransaction();

try
{
    SqlCommand cmd1 = new SqlCommand("INSERT INTO Accounts VALUES(1,1000)", con, tran);
    SqlCommand cmd2 = new SqlCommand("UPDATE Accounts SET Balance = Balance - 500 WHERE ID = 1", con, tran);
    cmd1.ExecuteNonQuery();
    cmd2.ExecuteNonQuery();
    tran.Commit(); // commit if all succeed
}
catch
{
    tran.Rollback(); // rollback on error
}
finally
{
    con.Close();
}

สิ่งนี้ทำให้มั่นใจ ความสอดคล้องของข้อมูล ในกรณีที่เกิดข้อผิดพลาดหรือข้อยกเว้นขณะรันไทม์


23) ข้อดีของการใช้ stored procedures ร่วมกับ ADO.NET คืออะไร?

Stored procedure มีข้อดีหลายประการเหนือกว่าการใช้คำสั่ง SQL โดยตรง:

ความได้เปรียบ Descriptไอออน
ประสิทธิภาพ คอมไพล์ล่วงหน้าและจัดเก็บไว้ในแคชบนเซิร์ฟเวอร์ ช่วยลดเวลาในการประมวลผล
⁠ความปลอดภัย ป้องกันการโจมตีแบบ SQL injection โดยใช้พารามิเตอร์
การบำรุงรักษา ตรรกะทางธุรกิจถูกจัดเก็บไว้ในฐานข้อมูลเพื่อให้สามารถอัปเดตได้ง่าย
ความสามารถในเรอุส สามารถเรียกใช้งานได้จากหลายแอปพลิเคชันหรือโมดูล

ตัวอย่าง:

SqlCommand cmd = new SqlCommand("sp_GetEmployeeDetails", con);
cmd.CommandType = CommandType.StoredProcedure;

ดังนั้น การผสานรวม ADO.NET กับ stored procedures จึงนำไปสู่การดำเนินการกับฐานข้อมูลที่มีประสิทธิภาพและปลอดภัยยิ่งขึ้น


24) Dataset.AcceptChanges() และ DataAdapter.Update() แตกต่างกันอย่างไร?

ลักษณะ ยอมรับการเปลี่ยนแปลง() DataAdapter.Update()
Operaการ บันทึกการเปลี่ยนแปลงในชุดข้อมูลในเครื่อง บันทึกการเปลี่ยนแปลงลงในฐานข้อมูล
การโต้ตอบกับฐานข้อมูล ไม่ ใช่
ผล ทำเครื่องหมายทุกแถวเป็น “ไม่มีการเปลี่ยนแปลง” ดำเนินการคำสั่ง SQL (แทรก อัปเดต ลบ)

คำอธิบาย: การเรียกร้อง ยอมรับการเปลี่ยนแปลง() คำสั่งนี้จะอัปเดตเฉพาะสถานะภายในของ DataSet โดยไม่บันทึกการเปลี่ยนแปลงลงในฐานข้อมูล หากต้องการบันทึกการเปลี่ยนแปลงอย่างถาวร ให้ดำเนินการดังนี้ อัปเดต() ต้องนำไปใช้ ในทางปฏิบัติ นักพัฒนาจะใช้ก่อนเป็นอันดับแรก อัปเดต() เพื่อบันทึกข้อมูลแล้วจึงบันทึก ยอมรับการเปลี่ยนแปลง() เพื่อยืนยันการเปลี่ยนแปลงในระดับท้องถิ่นให้เสร็จสมบูรณ์


25) คุณสามารถทำงานกับข้อมูล XML ใน ADO.NET ได้อย่างไร?

ADO.NET มอบความราบรื่น การผสานรวมกับ XML สำหรับการจัดเก็บ แลกเปลี่ยน และแปลงข้อมูล

วิธีการสำคัญ:

  • เขียน XML() – บันทึกเนื้อหาของ DataSet ลงในไฟล์ XML
  • อ่าน XML() – อ่านข้อมูลจากไฟล์ XML ลงใน DataSet
  • รับ XML() – ส่งคืนข้อมูลชุดข้อมูลในรูปแบบ XML ในรูปแบบสตริง
  • รับสคีมา XML() – ส่งคืนโครงสร้างข้อมูลในรูปแบบ XML

ตัวอย่าง:

dataSet.WriteXml("Employees.xml");

คุณสมบัตินี้ช่วยให้สามารถแบ่งปันข้อมูลระหว่างระบบที่แตกต่างกันได้อย่างง่ายดาย โดยใช้ XML เป็นรูปแบบตัวกลาง


26) วัตถุประสงค์ของอ็อบเจ็กต์ DataColumn และ DataRow ใน ADO.NET คืออะไร?

ใน ADO.NET คอลัมน์ข้อมูล และ แถวข้อมูล สร้างส่วนประกอบพื้นฐานของตารางข้อมูลในหน่วยความจำ:

  • คอลัมน์ข้อมูล: กำหนดโครงสร้างข้อมูล — ชื่อ ชนิดข้อมูล ข้อจำกัด และค่าเริ่มต้น
  • แถวข้อมูล: แสดงถึงระเบียน (แถว) ข้อมูลจริงใน DataTable

ตัวอย่าง:

DataColumn col = new DataColumn("EmployeeID", typeof(int));
dataTable.Columns.Add(col);
DataRow row = dataTable.NewRow();
row["EmployeeID"] = 101;
dataTable.Rows.Add(row);

เมื่อใช้งานร่วมกัน จะช่วยให้สามารถจัดการข้อมูลอย่างเป็นระบบในสภาพแวดล้อมที่ไม่เชื่อมต่อกันได้


27) ADO.NET รองรับการตรวจสอบความถูกต้องของข้อมูลและข้อจำกัดอย่างไร?

ADO.NET บังคับใช้ความสมบูรณ์ของข้อมูลผ่านทาง ข้อ จำกัด ในระดับ DataSet และ DataTable:

การ จำกัด จุดมุ่งหมาย
ข้อจำกัดเฉพาะ ตรวจสอบให้แน่ใจว่าค่าในคอลัมน์ไม่ซ้ำกัน
ข้อจำกัดคีย์ต่างประเทศ รักษาความถูกต้องของข้อมูลอ้างอิงระหว่างตารางที่เกี่ยวข้องกัน
คุณสมบัติค่าเริ่มต้น กำหนดค่าเริ่มต้นของคอลัมน์

ตัวอย่าง:

UniqueConstraint uc = new UniqueConstraint(ds.Tables["Employee"].Columns["EmpID"]);
ds.Tables["Employee"].Constraints.Add(uc);

ข้อจำกัดเหล่านี้จำลองกฎระดับฐานข้อมูลไว้ในหน่วยความจำ ทำให้มั่นใจได้ว่าข้อมูลมีความสะอาดและสอดคล้องกันก่อนการซิงโครไนซ์


28) OLE DB และ ODBC providers ใน ADO.NET แตกต่างกันอย่างไร?

ผู้ให้บริการ จุดมุ่งหมาย namespace
OLE DB (.NET Framework Data Provider สำหรับ OLE DB) ใช้สำหรับ MS Access และฐานข้อมูลอื่นๆ ที่เป็นไปตามมาตรฐาน OLE DB System.Data.OleDb
ODBC (.NET Framework Data Provider สำหรับ ODBC) ใช้สำหรับฐานข้อมูลที่มีไดรเวอร์ ODBC เช่น MySQL System.Data.Odbc

คำอธิบาย:

  • โอเล ดีบี โดยทั่วไปจะเร็วกว่าด้วย Microsoft เทคโนโลยี
  • ODBC ช่วยให้สามารถใช้งานร่วมกับแพลตฟอร์มฐานข้อมูลต่างๆ ได้อย่างกว้างขวางยิ่งขึ้น

29) จะปรับปรุงประสิทธิภาพการทำงานของแอปพลิเคชัน ADO.NET ได้อย่างไร?

การปรับแต่งประสิทธิภาพใน ADO.NET เกี่ยวข้องกับการเพิ่มประสิทธิภาพทั้งการเข้าถึงฐานข้อมูลและการประมวลผลในหน่วยความจำ:

ปฏิบัติที่ดีที่สุด:

  1. ใช้ การเชื่อมต่อ Pooling และมักจะ การเชื่อมต่อใกล้ชิดอย่างรวดเร็ว.
  2. ชอบ โปรแกรมอ่านข้อมูล สำหรับข้อมูลที่อ่านอย่างเดียว
  3. ใช้ แบบสอบถามที่กำหนดพารามิเตอร์ แทนที่จะใช้ SQL แบบไดนามิก
  4. ลดปริมาณการถ่ายโอนข้อมูลโดยใช้ เลือกคอลัมน์ที่ต้องการ.
  5. เงินกู้เพื่อการลงทุน (Leverage) สูงสุด วิธีการจัดเก็บ สำหรับตรรกะที่ซับซ้อน
  6. แคชข้อมูลในกรณีที่เหมาะสมโดยใช้ การแคชชุดข้อมูล.
  7. กำจัดสิ่งของอย่างถูกวิธีด้วย using บล็อก

มาตรการเหล่านี้ช่วยเพิ่มความสามารถในการขยายขนาด ลดความล่าช้า และลดภาระของฐานข้อมูล


30) ความแตกต่างหลักระหว่าง DataTable และ DataSet คืออะไร?

แง่มุม ตารางข้อมูล ชุดข้อมูล
โครงสร้าง โต๊ะเดี่ยว การรวบรวมตารางข้อมูลหลายตาราง
ความสัมพันธ์ ไม่ได้รับการสนับสนุน รองรับความสัมพันธ์ระหว่างตาราง
ข้อ จำกัด ถูก จำกัด รองรับทั้งข้อจำกัดคีย์เฉพาะ (Unique Key) และคีย์ต่างประเทศ (Foreign Key)
XML Operations เป็นบางส่วน รองรับการอ่าน/เขียน XML อย่างเต็มรูปแบบ
ใช้กรณี การดำเนินการข้อมูลอย่างง่าย โครงสร้างข้อมูลที่ซับซ้อนและการจัดการแบบออฟไลน์

คำอธิบาย: A ตารางข้อมูล เหมาะสำหรับการแสดงข้อมูลแบบตารางเดียว ในขณะที่ ชุดข้อมูล ใช้สำหรับสถานการณ์ที่ซับซ้อน มีหลายตารางที่มีความสัมพันธ์และข้อจำกัด ทั้งสองแบบรองรับการจัดการข้อมูลที่ไม่เชื่อมต่อกัน แต่แตกต่างกันในด้านขนาดและขอบเขต


31) การเขียนโปรแกรมแบบอะซิงโครนัสใน ADO.NET มีประโยชน์อย่างไร?

การเขียนโปรแกรมแบบอะซิงโครนัสใน ADO.NET ช่วยให้สามารถ... การดำเนินการฐานข้อมูลแบบไม่บล็อกช่วยปรับปรุงการตอบสนองของแอปพลิเคชัน โดยเฉพาะในระบบเว็บและระบบที่ใช้ UI ช่วยให้แอปพลิเคชันของคุณสามารถทำงานอื่นๆ ได้ในขณะที่รอการดำเนินการกับฐานข้อมูลเสร็จสมบูรณ์

ADO.NET มีเมธอดแบบอะซิงโครนัส เช่น:

  • เปิดอะซิงโครนัส() – เปิดการเชื่อมต่อแบบอะซิงโครนัส
  • ExecuteReaderAsync() – ดำเนินการคำสั่งและดึงผลลัพธ์แบบอะซิงโครนัส
  • ExecuteNonQueryAsync() – ดำเนินการคำสั่ง SQL แบบอะซิงโครนัส
  • ExecuteScalarAsync() – ส่งคืนค่าเดียวแบบอะซิงโครนัส

ตัวอย่าง:

await connection.OpenAsync();
await command.ExecuteReaderAsync();

ประโยชน์ที่ได้รับ: เพิ่มความสามารถในการปรับขนาด ปรับปรุงประสบการณ์การใช้งาน และใช้ทรัพยากรอย่างมีประสิทธิภาพในแอปพลิเคชันที่มีการรับส่งข้อมูลจำนวนมาก


32) DataReader และ DataAdapter แตกต่างกันอย่างไรในแง่ของประสิทธิภาพและการใช้งาน?

แง่มุม โปรแกรมอ่านข้อมูล ดาต้าอะแดปเตอร์
การเชื่อมต่อ เรามีเครือข่าย ตัดการเชื่อมต่อ
ประสิทธิภาพ เร็วขึ้น (สตรีมมิ่ง) ช้าลง (ในหน่วยความจำ)
การเข้าถึงข้อมูล อ่านอย่างเดียว ส่งต่ออย่างเดียว แก้ไขได้ เข้าถึงได้แบบสุ่ม
ใช้หน่วยความจำ ต่ำ สูงกว่า (จัดเก็บข้อมูลในหน่วยความจำ)
ใช้กรณี แสดงข้อมูลได้อย่างรวดเร็ว การแก้ไขและการซิงโครไนซ์แบบออฟไลน์

คำอธิบาย: ใช้เพื่อการ การแสดงผลข้อมูลแบบเรียลไทม์, ใช้ โปรแกรมอ่านข้อมูล. สำหรับ การจัดการข้อมูลแบบออฟไลน์, ใช้ ดาต้าอะแดปเตอร์DataReader เหมาะสำหรับแอปพลิเคชันที่ต้องการความสามารถในการขยายขนาด ในขณะที่ DataAdapter เหมาะสำหรับแอปพลิเคชันที่มีข้อมูลจำนวนมากและขับเคลื่อนด้วยข้อมูล


33) ADO.NET ทำงานร่วมกับ LINQ ได้อย่างไร?

LINQ (Language Integrated Query) นำเสนอวิธีการที่ทันสมัยในการ สอบถามโครงสร้างข้อมูล ADO.NET เช่น DataSet และ DataTable โดยใช้ไวยากรณ์ C# แทน SQL

ตัวอย่าง:

var result = from emp in dataSet.Tables["Employee"].AsEnumerable()
             where emp.Field<string>("Department") == "HR"
             select emp;

ประโยชน์ที่ได้รับ:

  • การตรวจสอบความปลอดภัยของชนิดข้อมูลในขั้นตอนการคอมไพล์
  • ไม่จำเป็นต้องใช้สตริง SQL ในโค้ด
  • การแก้ไขข้อบกพร่องและการบำรุงรักษาง่ายขึ้น

LINQ-to-DataSet ช่วยให้สามารถเรียกใช้คำสั่งค้นหา ADO.NET ได้ อ่านง่าย บำรุงรักษาง่าย และมีประสิทธิภาพมากขึ้น.


34) DataTableReader มีประโยชน์อย่างไรใน ADO.NET?

A ดาต้าเทเบิลรีดเดอร์ ให้ ส่งต่อเท่านั้น อ่านอย่างเดียว สามารถเข้าถึง DataTable หนึ่งรายการขึ้นไปใน DataSet ได้ โดยทำงานคล้ายกับ... โปรแกรมอ่านข้อมูลแต่สำหรับข้อมูลที่จัดเก็บในหน่วยความจำ

ตัวอย่าง:

DataTableReader reader = dataSet.CreateDataReader();
while (reader.Read())
{
    Console.WriteLine(reader["EmployeeName"]);
}

แนวทางนี้ช่วยให้สามารถเข้าถึงข้อมูลในหน่วยความจำได้อย่างรวดเร็ว ในขณะที่ยังคงรักษารูปแบบที่ไม่เชื่อมต่อกันเอาไว้ได้


35) คุณจะเรียกใช้ stored procedure ที่มีพารามิเตอร์โดยใช้ ADO.NET ได้อย่างไร?

คุณสามารถใช้ SQLCommand อ็อบเจ็กต์ที่มีพารามิเตอร์สำหรับเรียกใช้โพรซีเดอร์ที่จัดเก็บไว้ได้อย่างปลอดภัย

ตัวอย่าง:

SqlCommand cmd = new SqlCommand("sp_GetEmployeeByID", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@EmpID", 101);
SqlDataReader dr = cmd.ExecuteReader();

วิธีการนี้ช่วยป้องกันไม่ให้เกิดผลเสียใดๆ ด้วย SQL Injection, ให้ ประเภทความปลอดภัยและอนุญาตให้ การจัดการพารามิเตอร์อินพุต/เอาต์พุต ในแอปพลิเคชันองค์กร


36) การใช้ DataSet ใน ADO.NET มีข้อดีและข้อเสียอย่างไรบ้าง?

ข้อดี ข้อเสีย
ใช้งานได้แม้ในโหมดออฟไลน์ ใช้หน่วยความจำมากขึ้น
สามารถจัดเก็บตารางได้หลายตาราง ช้ากว่า DataReader
สนับสนุนความสัมพันธ์และข้อจำกัด ไม่เหมาะสำหรับชุดข้อมูลขนาดใหญ่
การสนับสนุนการผสานรวม XML ค่าใช้จ่ายเพิ่มเติมในการแปลงข้อมูลเป็นอนุกรม

สรุป: DataSets เหมาะสำหรับงานที่ซับซ้อนและทำงานแบบออฟไลน์ หรือเมื่อทำงานกับ XML/เว็บเซอร์วิส สำหรับแอปพลิเคชันที่ต้องการประสิทธิภาพสูงหรือทำงานแบบเรียลไทม์ ควรเลือกใช้ โปรแกรมอ่านข้อมูล or ดาต้าอะแดปเตอร์ เพื่อประสิทธิภาพ


37) คุณจะจัดการกับข้อผิดพลาดในการดำเนินการ ADO.NET ได้อย่างไร?

การจัดการข้อผิดพลาดดำเนินการโดยใช้ ลองจับในที่สุด บล็อกและ ข้อยกเว้น SQL ชั้นเรียน

ตัวอย่าง:

try
{
    connection.Open();
    SqlCommand cmd = new SqlCommand("SELECT * FROM NonExistingTable", connection);
    cmd.ExecuteReader();
}
catch (SqlException ex)
{
    Console.WriteLine("Error: " + ex.Message);
}
finally
{
    connection.Close();
}

ปฏิบัติที่ดีที่สุด:

  • บันทึกข้อผิดพลาดของ SQL โดยใช้การบันทึกแบบมีโครงสร้าง (เช่น Serilog, NLog)
  • ใช้ finally or using บล็อกเพื่อให้แน่ใจว่าการเชื่อมต่อปิดสนิท
  • หลีกเลี่ยงการเปิดเผยข้อความแสดงข้อผิดพลาดที่ละเอียดอ่อนในระบบใช้งานจริง

38) CommandBuilder มีบทบาทอย่างไรใน ADO.NET?

การขอ ตัวสร้างคำสั่ง ระบบจะสร้างคำสั่ง SQL (INSERT, UPDATE, DELETE) สำหรับ DataAdapter โดยอัตโนมัติตามคำสั่ง SELECT ซึ่งช่วยลดความจำเป็นในการเขียนคำสั่งอัปเดตด้วยตนเอง

ตัวอย่าง:

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Employees", con);
SqlCommandBuilder builder = new SqlCommandBuilder(da);
da.Update(dataSet, "Employees");

มีประโยชน์สำหรับการพัฒนาอย่างรวดเร็ว แต่ไม่แนะนำสำหรับ แบบสอบถามหรือการเชื่อมต่อที่ซับซ้อนซึ่งคำสั่งที่เขียนด้วยตนเองจะให้การควบคุมที่มากกว่า


39) คุณจะใช้งาน Connection Pooling ใน ADO.NET อย่างไร?

การรวมการเชื่อมต่อ ใช้การเชื่อมต่อฐานข้อมูลที่มีอยู่แล้วซ้ำ แทนที่จะสร้างการเชื่อมต่อใหม่สำหรับทุกคำขอ ซึ่งช่วยเพิ่มประสิทธิภาพ

ตัวอย่างสตริงการเชื่อมต่อ:

"Data Source=.;Initial Catalog=TestDB;Integrated Security=True;Pooling=True;Min Pool Size=5;Max Pool Size=100;"

การทำงาน:

  • เมื่อการเชื่อมต่อถูกปิด การเชื่อมต่อจะถูกส่งกลับไปยังกลุ่มการเชื่อมต่อแทนที่จะถูกทำลาย
  • ADO.NET จะดึงการเชื่อมต่อที่จัดเก็บไว้ในพูลสำหรับการร้องขอครั้งถัดไป

ประโยชน์ที่ได้รับ:

  • ลดภาระการเชื่อมต่อ
  • เพิ่มประสิทธิภาพในการรองรับภาระงานหนัก
  • จัดการโดยอัตโนมัติโดยรันไทม์ของ .NET

40) ความแตกต่างหลักระหว่าง ExecuteReader(), ExecuteScalar() และ ExecuteNonQuery() คืออะไร?

วิธี ประเภทผลตอบแทน ใช้กรณี ตัวอย่างแบบสอบถาม
ExecuteReader() โปรแกรมอ่านข้อมูล ดึงข้อมูลหลายแถว เลือก * จาก พนักงาน
ExecuteScalar() ค่าเดียว ฟังก์ชันรวม เลือกจำนวน (*) จาก พนักงาน
ExecuteNonQuery() จำนวนเต็ม (แถวที่ได้รับผลกระทบ) คำสั่ง DML อัปเดตพนักงาน ตั้งค่าเงินเดือนเป็น 5000

ตัวอย่าง:

SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Employees", con);
int total = (int)cmd.ExecuteScalar();

แต่ละวิธีมีจุดประสงค์เฉพาะ: ExecuteReader() สำหรับการอ่านข้อมูล ExecuteScalar() สำหรับการค้นหาอย่างรวดเร็ว และ ExecuteNonQuery() เพื่อการปรับเปลี่ยน


41) ExecuteXmlReader() และ ExecuteReader() แตกต่างกันอย่างไร?

ทั้งสองวิธีใช้ในการอ่านข้อมูลจากฐานข้อมูล แต่มีความแตกต่างกันในด้านต่างๆ รูปแบบและวัตถุประสงค์ของผลลัพธ์.

แง่มุม ExecuteReader() ExecuteXmlReader()
คืนสินค้า วัตถุ DataReader ข้อมูล XML ในรูปแบบ XmlReader
ประเภทข้อมูล แบน เอกสาร XML
การใช้ การอ่านแถวที่มีโครงสร้าง การดึงข้อมูลในรูปแบบ XML
ประสิทธิภาพ เร็วกว่าสำหรับข้อมูลเชิงสัมพันธ์ มีประโยชน์สำหรับแอปพลิเคชันที่ใช้ XML

ตัวอย่าง:

SqlCommand cmd = new SqlCommand("SELECT * FROM Employees FOR XML AUTO", con);
XmlReader xmlReader = cmd.ExecuteXmlReader();

ExecuteXmlReader() โดยส่วนใหญ่จะใช้เมื่อต้องการผสานรวม .NET กับเว็บเซอร์วิส, REST API หรือแหล่งเก็บข้อมูล XML


42) คุณจัดการชุดผลลัพธ์หลายชุดโดยใช้ ADO.NET อย่างไร?

ADO.NET ผู้อ่านข้อมูล SQL รองรับชุดผลลัพธ์หลายชุดโดยใช้ NextResult() วิธีการนี้ช่วยให้คุณจัดการกับการเรียกใช้คำสั่งหลายคำสั่งในคำสั่งเดียวได้

ตัวอย่าง:

SqlCommand cmd = new SqlCommand("SELECT * FROM Employees; SELECT * FROM Departments;", con);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
    Console.WriteLine(dr["EmployeeName"]);
}
dr.NextResult(); // Move to next table
while (dr.Read())
{
    Console.WriteLine(dr["DepartmentName"]);
}

วิธีการนี้มีประสิทธิภาพเมื่อดึงข้อมูลที่เกี่ยวข้องในการเรียกใช้ฐานข้อมูลเพียงครั้งเดียว ช่วยลดเวลาในการตอบสนอง


43) ในสถานการณ์จริงใดบ้างที่ ADO.NET เหมาะสมกว่า Entity Framework?

แม้ว่า เอนทิตี้เฟรมเวิร์ก (EF) แม้จะเป็นรูปแบบที่ทันสมัยและใช้ ORM แต่ ADO.NET ก็ยังคงมีความสำคัญอยู่เนื่องจาก... ประสิทธิภาพ การควบคุม และความเรียบง่าย ในบางกรณีการใช้งาน:

  1. ชั้นการเข้าถึงข้อมูลประสิทธิภาพสูง (ระบบธนาคาร ระบบการซื้อขาย)
  2. แอปพลิเคชั่นน้ำหนักเบา ในกรณีที่ไม่จำเป็นต้องใช้ฟังก์ชัน ORM แบบเต็มรูปแบบ
  3. การประมวลผลแบบกลุ่ม หรือการดำเนินการข้อมูลจำนวนมาก.
  4. การรวมระบบเก่า โดยใช้ stored procedures
  5. การควบคุมแบบละเอียด ครอบคลุมถึง SQL และวงจรชีวิตของการเชื่อมต่อ

ในระยะสั้น:

ใช้ ADO.NET เมื่อ คุณต้องการความเร็ว การควบคุม และการปรับแต่งด้วยตนเองและ EF เมื่อ การพัฒนาและการสร้างนามธรรมอย่างรวดเร็ว เป็นสิ่งสำคัญอันดับแรก


44) ADO.NET Entity Data Model แตกต่างจาก ADO.NET แบบดั้งเดิมอย่างไร?

แง่มุม ADO.NET แบบจำลองข้อมูลเอนทิตี (EDM)
เข้าใกล้ การเข้าถึงข้อมูลระดับต่ำ ORM (การแมปอ็อบเจ็กต์-รีเลชันแนล)
ภาษาแบบสอบถาม คำสั่ง SQL LINQ / Entity SQL
ประสิทธิภาพ การเพิ่มประสิทธิภาพด้วยตนเองที่รวดเร็วยิ่งขึ้น ช้าลง มีภาระด้านนามธรรม
การแสดงข้อมูล ตารางและแถว เอนทิตีและความสัมพันธ์
ความพยายามในการพัฒนา จุดสูง ลด

สรุป: การขอ แบบจำลองข้อมูลเอนทิตี ระบบจะทำการแมปอ็อบเจ็กต์ไปยังตารางและการแปลงคำสั่งค้นหาโดยอัตโนมัติ ในขณะเดียวกัน ADO.NET ช่วยให้นักพัฒนาสามารถควบคุมได้อย่างเต็มที่ แต่ต้องแลกมาด้วยการเขียนโค้ดด้วยตนเองมากขึ้น


45) คุณจะรักษาความปลอดภัยในการเข้าถึงฐานข้อมูลในแอปพลิเคชัน ADO.NET ได้อย่างไร?

ระบบรักษาความปลอดภัยใน ADO.NET เกี่ยวข้องกับสิ่งต่อไปนี้ การปกป้องสตริงการเชื่อมต่อ การป้องกันการโจมตีแบบ SQL injection และการรับประกันการเข้าถึงที่มีสิทธิ์น้อยที่สุด.

ปฏิบัติที่ดีที่สุด:

  1. ใช้การสืบค้นแบบมีพารามิเตอร์ — หลีกเลี่ยงการต่อสตริง SQL เข้าด้วยกัน
  2. เข้ารหัสสตริงการเชื่อมต่อ in web.config โดยใช้: aspnet_regiis -pef "connectionStrings" "C:\AppFolder"
  3. ใช้ Windows การยืนยันตัวตน แทนที่จะใช้การตรวจสอบสิทธิ์แบบ SQL หากเป็นไปได้
  4. หลีกเลี่ยงการจัดเก็บข้อมูลประจำตัว ในข้อความธรรมดา
  5. ตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้ป้อนทั้งหมด ก่อนดำเนินการกับฐานข้อมูล

ตัวอย่าง (คำสั่งที่ปลอดภัย):

cmd.Parameters.Add("@EmpID", SqlDbType.Int).Value = empId;

มาตรการเหล่านี้ช่วยลดความเสี่ยงจากการโจมตีด้วย SQL injection และการรั่วไหลของข้อมูลประจำตัวได้อย่างมาก


46) คุณจะดำเนินการแทรกข้อมูลจำนวนมากใน ADO.NET อย่างมีประสิทธิภาพได้อย่างไร?

สำหรับการป้อนข้อมูลปริมาณมาก คัดลอกจำนวนมาก SQL เป็นวิธีการที่เร็วที่สุดใน ADO.NET

ตัวอย่าง:

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
    bulkCopy.DestinationTableName = "Employees";
    bulkCopy.WriteToServer(dataTable);
}

ข้อดี:

  • แทรกข้อมูลหลายพันรายการได้อย่างรวดเร็ว
  • เหมาะอย่างยิ่งสำหรับงาน ETL (Extract, Transform, Load)
  • ช่วยลดจำนวนรอบการรับส่งข้อมูลระหว่างแอปพลิเคชันและฐานข้อมูล

หมายเหตุ ฟังก์ชัน SqlBulkCopy เหมาะที่สุดสำหรับ SQL Server และต้องมีการจับคู่โครงสร้างตารางที่เหมาะสม


47) เมธอด FillSchema() และ Fill() ใน DataAdapter แตกต่างกันอย่างไร?

วิธี จุดมุ่งหมาย ผลกระทบต่อแผนผัง
เติม() โหลดข้อมูลเท่านั้น ไม่ดึงข้อมูลสคีมา
เติม Schema() โหลดข้อมูล + โครงสร้างข้อมูล เรียกดูคำจำกัดความของคอลัมน์ ประเภทข้อมูล และข้อจำกัด

ตัวอย่าง:

dataAdapter.FillSchema(dataSet, SchemaType.Source);

ใช้ เติม Schema() เมื่อจำเป็นต้องทราบโครงสร้างของตาราง (คอลัมน์ ชนิดข้อมูล) ก่อนที่จะทำการประมวลผลหรือผูกข้อมูล


48) แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้งานอ็อบเจ็กต์ SqlConnection และ SqlCommand คืออะไร?

  1. ใช้ using งบ เพื่อให้มั่นใจได้ว่ามีการกำจัดอย่างถูกวิธี:
  2. using (SqlConnection con = new SqlConnection(connString))
    {
        con.Open();
        // operations
    }
    
  3. หลีกเลี่ยงการเปิดการเชื่อมต่อทิ้งไว้นานเกินความจำเป็น
  4. ใช้การรวมการเชื่อมต่อ (เปิดใช้งานโดยค่าเริ่มต้น)
  5. นำอ็อบเจ็กต์ SqlCommand กลับมาใช้ใหม่ สำหรับการดำเนินการที่คล้ายกันโดยใช้พารามิเตอร์
  6. จัดการกับข้อผิดพลาดอย่างนุ่มนวล โดยใช้ try-catch-finally
  7. หลีกเลี่ยงการใช้ SELECT *; ให้ระบุคอลัมน์อย่างชัดเจน

การปฏิบัติตามแนวทางเหล่านี้จะช่วยให้มั่นใจได้ถึงประสิทธิภาพสูงและการบริหารจัดการทรัพยากรอย่างมีประสิทธิภาพ


49) คุณจะตรวจจับและแก้ไขปัญหาการล็อกตาย (deadlock) ใน ADO.NET ได้อย่างไร?

A การหยุดชะงัก เกิดขึ้นเมื่อธุรกรรมสองรายการขึ้นไปขัดขวางซึ่งกันและกัน ใน ADO.NET โดยปกติแล้วจะส่งผลให้เกิดข้อผิดพลาด SqlException สีสดสวย หมายเลขข้อผิดพลาด 1205.

กลยุทธ์การจัดการ:

  1. ดักจับข้อผิดพลาดและลองทำธุรกรรมซ้ำอีกครั้ง
  2. เก็บรายการธุรกรรม สั้น กระชับ และมีประสิทธิภาพ.
  3. เข้าถึงตารางใน ลำดับที่สม่ำเสมอ ในทุกธุรกรรม
  4. ใช้อย่างเหมาะสม ระดับการแยกธุรกรรม กดไลก์ ReadCommitted.
  5. ตรวจสอบภาวะการติดตายโดยใช้ SQL Profiler หรือ Extended Events.

ตัวอย่าง (ตรรกะการลองใหม่):

int retryCount = 3;
while (retryCount-- > 0)
{
    try
    {
        // Transaction logic
        break;
    }
    catch (SqlException ex) when (ex.Number == 1205)
    {
        Thread.Sleep(2000); // retry delay
    }
}

50) ข้อดีและข้อเสียของการใช้ ADO.NET เมื่อเทียบกับเทคโนโลยีการเข้าถึงข้อมูลอื่นๆ มีอะไรบ้าง?

ข้อดี ข้อเสีย
ประสิทธิภาพสูงและการควบคุมที่แม่นยำ ต้องใช้โค้ดพื้นฐานเพิ่มเติม
รองรับทั้งรุ่นที่เชื่อมต่อและไม่เชื่อมต่อ ไม่มีการแมป ORM ในตัว
สามารถทำงานร่วมกับแหล่งข้อมูลหลายแหล่งได้ การบำรุงรักษา SQL ด้วยตนเอง
การผสานรวม XML และชุดข้อมูลอย่างสมบูรณ์ ผู้เริ่มต้นอาจทำผิดพลาดได้ง่ายกว่า
น้ำหนักเบาและไม่ต้องพึ่งพา การขยายขนาดทำได้ยากขึ้นเมื่อใช้โมเดลโดเมนที่ซับซ้อน

สรุป: ADO.NET ยังคงเป็น รากฐานของเลเยอร์การเข้าถึงข้อมูลทั้งหมดของ .NETเสนอขาย ความเร็ว ความยืดหยุ่น และความโปร่งใส- เทคโนโลยีเช่น กรอบเอนทิตี และ กระฉับกระเฉง สร้างขึ้นบนพื้นฐานของ ADO.NET ดังนั้นการเชี่ยวชาญ ADO.NET จึงเป็นสิ่งจำเป็นสำหรับนักพัฒนา .NET ระดับมืออาชีพ


🔍 คำถามสัมภาษณ์งาน ADO.NET ยอดนิยม พร้อมสถานการณ์จริงและคำตอบเชิงกลยุทธ์

1) ADO.NET คืออะไร และโดยทั่วไปแล้วใช้ในแอปพลิเคชันระดับองค์กรในด้านใดบ้าง?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความเข้าใจพื้นฐานของคุณเกี่ยวกับ ADO.NET และบทบาทของมันในแอปพลิเคชันที่ขับเคลื่อนด้วยข้อมูล โดยเฉพาะอย่างยิ่งภายในระบบนิเวศของ .NET

ตัวอย่างคำตอบ: ADO.NET เป็นเฟรมเวิร์กการเข้าถึงข้อมูลใน .NET ที่ใช้เชื่อมต่อแอปพลิเคชันกับฐานข้อมูลเชิงสัมพันธ์ เช่น SQL Server โดยมีคลาสสำหรับการดึงข้อมูล การจัดการ และการอัปเดตข้อมูลผ่านโมเดลที่เชื่อมต่อและไม่เชื่อมต่อ นิยมใช้ในแอปพลิเคชันระดับองค์กรเพื่อการสื่อสารฐานข้อมูลที่เชื่อถือได้และปรับขนาดได้


2) คุณช่วยอธิบายความแตกต่างระหว่างสถาปัตยกรรมแบบเชื่อมต่อและแบบไม่เชื่อมต่อใน ADO.NET ได้ไหม?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังประเมินความเข้าใจของคุณเกี่ยวกับประสิทธิภาพและข้อควรพิจารณาด้านความสามารถในการขยายขนาดในการเข้าถึงฐานข้อมูล

ตัวอย่างคำตอบ: สถาปัตยกรรมแบบเชื่อมต่อใช้วัตถุต่างๆ เช่น SqlDataReader ซึ่งจำเป็นต้องมีการเชื่อมต่อฐานข้อมูลที่เปิดอยู่ขณะอ่านข้อมูล ในขณะที่สถาปัตยกรรมแบบไม่เชื่อมต่อใช้ DataSet และ DataTable ซึ่งช่วยให้สามารถโหลดข้อมูลลงในหน่วยความจำและปิดการเชื่อมต่อฐานข้อมูลได้ตั้งแต่เนิ่นๆ ช่วยเพิ่มความสามารถในการขยายขนาดและลดการใช้ทรัพยากร


3) DataSet และ DataReader แตกต่างกันอย่างไร และเมื่อใดที่คุณควรเลือกใช้ตัวใดตัวหนึ่งมากกว่าอีกตัวหนึ่ง?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการดูว่าคุณสามารถเลือกใช้เครื่องมือที่เหมาะสมตามประสิทธิภาพและความต้องการของแอปพลิเคชันได้หรือไม่

ตัวอย่างคำตอบ: DataReader เป็นแบบอ่านอย่างเดียวและอ่านไปข้างหน้าได้เท่านั้น ทำให้ทำงานได้เร็วและประหยัดหน่วยความจำมากกว่าสำหรับชุดผลลัพธ์ขนาดใหญ่ ในขณะที่ DataSet เป็นแบบจัดเก็บข้อมูลในหน่วยความจำและรองรับหลายตารางและความสัมพันธ์ ในบทบาทก่อนหน้านี้ ผมใช้ DataReader สำหรับฟีเจอร์การรายงานประสิทธิภาพสูง และใช้ DataSet สำหรับสถานการณ์ที่ต้องการการจัดการข้อมูลแบบออฟไลน์


4) คุณจัดการการเชื่อมต่อฐานข้อมูลใน ADO.NET อย่างมีประสิทธิภาพได้อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการตรวจสอบความเข้าใจของคุณเกี่ยวกับแนวปฏิบัติที่ดีที่สุดที่เกี่ยวข้องกับการจัดการทรัพยากร

ตัวอย่างคำตอบ: การจัดการการเชื่อมต่ออย่างมีประสิทธิภาพเกี่ยวข้องกับการเปิดการเชื่อมต่อให้ช้าที่สุดเท่าที่จะเป็นไปได้ และปิดการเชื่อมต่อทันทีที่งานเสร็จสมบูรณ์ การใช้คำสั่ง `using` ช่วยให้มั่นใจได้ว่าการเชื่อมต่อจะถูกจัดการอย่างเหมาะสม การใช้พูลการเชื่อมต่อใน ADO.NET ยังช่วยปรับปรุงประสิทธิภาพโดยการนำการเชื่อมต่อที่มีอยู่แล้วกลับมาใช้ใหม่


5) การค้นหาแบบมีพารามิเตอร์คืออะไร และเหตุใดจึงมีความสำคัญ?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความเข้าใจของคุณเกี่ยวกับความปลอดภัยและการป้องกันการโจมตีด้วย SQL injection

ตัวอย่างคำตอบ: การใช้คำสั่ง SQL แบบมีพารามิเตอร์จะแยกตรรกะ SQL ออกจากข้อมูลที่ผู้ใช้ป้อน ซึ่งช่วยป้องกันการโจมตีแบบ SQL injection นอกจากนี้ยังช่วยปรับปรุงประสิทธิภาพโดยอนุญาตให้ใช้แผนการทำงานของคำสั่งซ้ำได้ ในงานก่อนหน้านี้ของผม การใช้คำสั่ง SQL แบบมีพารามิเตอร์เป็นข้อบังคับสำหรับทุกการดำเนินการกับฐานข้อมูลเพื่อรักษามาตรฐานความปลอดภัย


6) อธิบายสถานการณ์ที่คุณต้องปรับปรุงประสิทธิภาพการทำงานของฐานข้อมูลที่ช้าโดยใช้ ADO.NET

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังประเมินทักษะการแก้ปัญหาและประสบการณ์ในการปรับปรุงประสิทธิภาพการทำงานของคุณ

ตัวอย่างคำตอบ: ในตำแหน่งงานก่อนหน้านี้ ผมพบว่ามีคิวรีที่ทำงานช้าเนื่องจากการใช้ DataSet โดยไม่จำเป็น ผมจึงเปลี่ยนไปใช้ SqlDataReader และปรับปรุงคิวรี SQL ให้เหมาะสมยิ่งขึ้น ซึ่งช่วยลดเวลาในการประมวลผลและการใช้หน่วยความจำได้อย่างมาก


7) คุณจัดการกับข้อผิดพลาดในแอปพลิเคชัน ADO.NET อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการเข้าใจแนวทางของคุณในการจัดการข้อผิดพลาดและความเสถียรของแอปพลิเคชัน

ตัวอย่างคำตอบ: ฉันใช้บล็อก try-catch-finally เพื่อจัดการกับข้อยกเว้นต่างๆ เช่น SqlException การบันทึกรายละเอียดข้อผิดพลาดและการตรวจสอบให้แน่ใจว่าการเชื่อมต่อถูกปิดในบล็อก finally นั้นมีความสำคัญอย่างยิ่ง วิธีนี้ช่วยรักษาเสถียรภาพของแอปพลิเคชันและทำให้การแก้ไขปัญหาทำได้ง่ายขึ้น


8) DataAdapter คืออะไร และทำงานร่วมกับ DataSet อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทดสอบความเข้าใจของคุณเกี่ยวกับแนวคิดการซิงโครไนซ์ข้อมูล

ตัวอย่างคำตอบ: DataAdapter ทำหน้าที่เป็นสะพานเชื่อมระหว่าง DataSet กับฐานข้อมูล โดยใช้คำสั่ง Select, Insert, Update และ Delete เพื่อเติมข้อมูลลงใน DataSet และส่งต่อการเปลี่ยนแปลงกลับไปยังฐานข้อมูล ซึ่งมีประโยชน์ในสถานการณ์ที่การเชื่อมต่อขาดหายไปและต้องการอัปเดตข้อมูลจำนวนมากพร้อมกัน


9) คุณจะออกแบบโซลูชันที่ใช้ ADO.NET สำหรับแอปพลิเคชันที่มีการทำงานพร้อมกันสูงได้อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความคิดเชิงสถาปัตยกรรมและการพิจารณาถึงความสามารถในการขยายขนาดของคุณ

ตัวอย่างคำตอบ: ผมจะลดเวลาเปิดการเชื่อมต่อให้น้อยที่สุด ใช้การจัดการกลุ่มการเชื่อมต่อ เลือกใช้ DataReader เมื่อใดก็ตามที่เป็นไปได้ และตรวจสอบให้แน่ใจว่าการสืบค้น SQL มีประสิทธิภาพ ในบทบาทก่อนหน้านี้ของผม แนวทางนี้ช่วยรองรับผู้ใช้งานพร้อมกันจำนวนมากโดยไม่มีปัญหาคอขวดของฐานข้อมูล


10) คุณจะมั่นใจได้อย่างไรว่าโค้ด ADO.NET สามารถบำรุงรักษาและทดสอบได้?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์มองหาทักษะการเขียนโค้ดที่สะอาดและวิสัยทัศน์ระยะยาว

ตัวอย่างคำตอบ: ฉันทำให้การบำรุงรักษาทำได้ง่ายขึ้นโดยการแยกตรรกะการเข้าถึงข้อมูลออกเป็นที่เก็บข้อมูลหรือเลเยอร์การเข้าถึงข้อมูล การใช้ชื่อเมธอดที่ชัดเจน การสืบค้นข้อมูลแบบมีพารามิเตอร์ และการจัดการการเชื่อมต่อแบบรวมศูนย์ ช่วยเพิ่มความอ่านง่ายและความสามารถในการทดสอบ สามารถเขียนการทดสอบหน่วยได้โดยการแยกการทำงานของฐานข้อมูลไว้เบื้องหลังอินเทอร์เฟซ

สรุปโพสต์นี้ด้วย: