ADO.NET : Introduction

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

สองแนวคิดที่แตกต่าง

    ในวงการฐานข้อมูลแบบสัมพันธ์ (Relational Database) ซึ่งมีส่วนแบ่งตลาดเกือบ 100% นั้น มีแนวคิดเรื่องชนิดของข้อมูลที่เก็บลงบน DBMS ทางด้านของ Oracle และ Informix มีแนวคิดจะรวมศูยน์ของข้อมูลทุกสิ่งทุกอย่างให้เก็บลงที่ DBMS ของตัวเอง ดังนั้น DBMS ลักษณะนี้จึงเรียกว่า Universal Database

    ส่วนแนวคิดที่ 2 ซึ่งฐานข้อมูลส่วนมากใช้แนวคิดนี้ ซึ่งรวมทั้ง Microsoft ด้วย มีแนวคิดว่าข้อมูลมันเคยอยู่ที่ไหนก็ให้มันอยู่ที่เดิม ไม่ต้องรวบเข้ามาเก็บที่ DBMS เช่นข้อมูลเอกสารก็ยังคงให้อยู่ในแฟ้มประเภท word หรือ excel เป็นต้น ข้อมูลทุกประเภทควรอยู่ที่เดิมของมัน ดังนั้น DBMS ของ Microsoft ที่ชื่อว่า Microsoft SQL Server นั้นจึงไม่ค่อยมีึึความสามารถในการเก็บข้อมูลแฟ้มต่างๆ เช่นพวกรูปภาพ สิ่งที่เก็บได้เก่งนั้นก็เป็นจำพวกคำ ประโยค ตัวเลข หรือวันที่เท่านั้น

    ในเมื่อ Microsoft เลือกให้ SQL Server เก็บชนิดข้อมูลได้จำกัดแถมยังแฟ้มต่างๆ ไม่ได้ถูกรวบเข้ามา ดังนั้นจึงเป็นความจำเป็นอยู่เองที่ Microsoft จำเป็นต้องสร้าง Library เพื่อให้สามารถอ่านเขียนแฟ้มข้อมูลชนิดต่างๆ ได้ เรามาลองดูพัฒนาการของ Library ในมุมมองของ Microsoftกันหน่อยดีกว่า

ยุคมืด API

    ในยุคแรก เรา้ติดต่อกับ Database ยากมาก เราต้องใช้ Library เฉพาะ ซึ่งส่วนมากเขียนขึ้นมากให้ใช้กับภาษา C เท่านั้น เช่น DB-Lib และ CT-Lib ของ Sybase เป็น Library ที่ให้โปรแกรมเมอร์ภาษา C เขียนติดต่อกับ Sybase แต่ถ้าใครเคยลองเขียนจะเข้าใจ ผมเคยลองแล้ว ต้องสั่งหลายสิบคำสั่งของ CT-Lib เพื่อดึงข้อมูล Sybase มายังเครื่องของผม ยุ่งมากครับ

    ในสมัยนั้น Library ตัวอื่นๆ ก็พอจะมี เช่น CodeBase เอาไว้ติดต่อกับพวก XBase เช่น dBase FoxBase ForPro เป็นต้น และอีกตัวคือ Paradox Engine เอาไว้ติดต่อกับ Paradox ของ Borland ซึ่งเหล่านี้จะสังเกตได้ว่า

แนวคิดปฏิวัติ ODBC

    Microsoft หันมาจับตลาดฐานข้อมูลเหมือนกัน โดยการสร้างสิ่งที่ชื่อว่า Open DataBase Connection (ODBC) สิ่งนี้ปฏิวัติการเขียน Library ใหม่หมด ซึ่งแบ่ง Library ออกเป็นชั้นๆ ซึ่งชั้นบนคือ Interface จะมีได้แบบเดียว ส่วนชั้นล่างจะมีลักษณะเป็น plug in สำหรับ database แบบต่างๆ ดังนั้นไม่ว่าคุณจะติดต่อกับ DBMS ตัวใดก็ตาม คุณเขียนแบบเดียวกันหมด คุณเพียงเลือกว่าจะใช้ plug in ตัวใดเพื่อไปติดต่อกับ DBMS ที่ต้องการ เรามาดูข้อดีของ ODBC กันว่ามันแก้ปัญหาข้างบนได้อย่างไร

Jet Engine ลูกเล่นแพรวพราว

    เมื่อ Microsoft เข้าซื้อกิจการของบริษัท Fox Holding ซึ่งเป็นผู้ผลิต FoxBase, FoxPlus และ FoxPro ทาง Microsoft ได้รับการถ่ายทอดเทคโนโลยี่จาก Fox ไปไม่น้อย ผลลัพธ์คือ Library ตัวใหม่ ที่ใข้แทน ODBC ในการติดต่อ DBMS ยอดนิยมในสมัยนั้น เช่น Dbase, FoxPro เป็น ต้น รวมทั้ง excel และ text อีกด้วย ในที่นี้ Jet Engine ยังรองรับ DBMS ตัวใหม่ของ Microsoft ที่ชือว่า Access อีกด้วย ซึ่ง Access นี้เองเป็นการลอกแนวคิดจาก FoxPro มาเช่นการรวมแฟ้มข้อมูลหลายแฟ้มมาเป็นแฟ้มเดียว การใช้ภาษา SQL ในการดึงข้อมูล และการค้นหาข้อมูลที่รวดเร็วโดยใช้ Rushmore Technology เหล่านี้ล้วนได้รับการถ่ายทอดจาก Fox ทั้งสิ้น

DAO พระเอกขี่ม้าขาวตัวจริง

    Data Access Object (DAO) เป็น Library ที่ทาง Microsoft สร้างขึ้นให้สำหรับภาษา Visual Basic 3.0 ใช้ในการติดต่อกับ DBMS หลักการของ DAO นั้นจริงๆ แล้วไม่มีอะไรมาก มันทำหน้าที่รับคำสั่งจากโปรแกรมที่เราเขียน แล้วไปสั่ง ODBC หรือ JET Engine ต่อ ซึ่งสิ่งนี้เป็นการเปิดโลกใหม่ให้กับ Visual Basic ให้พ้นสภาพจาก "ของเล่น" เรามาดูข้อดีกัน

RDO เก่งนัก สำหรับติดต่อ DBMS ตัวใหญ่

    Remote Data Object (RDO) เป็น Library ที่ทาง Microsoft เขียนใหม่ เพื่อให้ติดต่อกับฐานข้อมูลเฉพาะตัวใหญ่ๆ เช่น Microsoft SQL Server, Oracle, Informix เป็นต้น ถ้าเราใช้ DAO ก็ใช้ได้อยู่ แต่ก็มีปัญหาเพราะ DAO กินเนื้อที่มาก เปลือง Memory แล้วอีกอย่างคือพวก DBMS ตัวใหญ่เหล่านั้น มีหลักการดึงข้อมูลที่ดีอยู่แล้ว ดังนั้น Library ที่สั่งงานนั้นไม่จำเป็นต้องระบุวิธีทำ เพียงแค่ส่งโจทย์ที่เป็นภาษา SQL ไปให้ก็พอ ทำให้ประหยัด Memory ได้มาก และทำงานได้เร็วกว่ามาก เพราะ DAO ยังไงก็คิดสูตรในการดึงข้อมูลได้ไม่เก่งเท่าตัวของ DBMS เอง

RDO ไม่ใช่ของใหม่เสียทีเดียว มันซ้ำซ้อนกับ ODBC เหมือนกัน ODBC มี plug in ตัวหนึ่งที่ชื่อว่า ODBCDirect ซึ่งเหมือนกับ RDO เกือบทุกประการ

ADO และ OLEDB การเดินทางที่สิ้นสุด

    ในยุคที่กระแสของ Oracle กำลังแรงเรื่อง Universal Database ผนวกกับทางภาษา Java เริ่มได้รับความนิยม ทาง Java มี JDBC ซึ่งเลียนแบบ ODBC ของ Microsoft ทำให้ Microsoft ตัดสินใจล้มกระดานในสิ่งที่ตัวเองทำมาทั้งหมด โดยการประกาศหยุดพัฒนา DAO และ ODBC และประกาศ โครงการ Universal Data Access (UDA) เพื่อแข่งกับ Unveral Database อย่างที่เคยเขียนบอกไปว่ายึดหลักข้อมูลอยู่ที่เดิม แต่จะมี Library พิเศษตัวหนึ่งเพื่อใช้ในการติดต่อ Library แบบใหม่ที่ว่านี้ใช้ทดแทน ODBC โดยตั้งชื่อว่า OLEDB ซึ่ง Library ตัวนี้ถ้าเทียบกันแล้วกับ ODBC มันเป็นมวยคนละรุ่น ทำเอา ODBC เป็นของเด็กเล่นไปเลย และ Microsoft ประกาศ Library ตัวใหม่สำหรับติดต่อกับ OLEDB อย่างง่าย เรียกว่า ActiveX Data Object (ADO) ซึ่งเอามาใช้ทดแทน DAO และ RDO

Microsoft ไม่เคยจัดงานสัมมนาสำหรับ Library ตัวไหนเลย ยกเว้นตัวนี้ครับ ทาง Microsoft ยอมจัดงานสัมมนาทั้งงานเพื่อแนะนำ ADO และ OLEDB ในเกือบทุกประเทศ เป็นการประกาศว่าเอาจริงแน่นอน เรามาดูข้อดูกัน

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

ADO.NET Reinvent The Wheel

    เมื่อ Microsoft สร้างประกาศโครงการ NGWS (Next Generation of Windows Service) ซึ่งดำๆ มืดๆ ไม่รู้แนวทางแน่นอนว่า Microsoft กำลังทำอะไรในสมัยนั้น แต่ที่แน่ๆ สิ่งที่เราเห็นคือมี Library ตัวใหม่ที่ชื่อว่า ADO+ มาพร้อมกับ ASP+ ทำให้ชวนคิดไปว่า Microsoft กำลังทำอะไกับ Web เป็นแน่ แต่เมื่อโครงการ NGWS ถูกเปลี่ยนชื่อมาเป็น .Net Framework พร้อมกับ ADO+ เปลี่ยนชื่อเป็น ADO.NET และ ASP+ เปลี่ยนชื่อเป็น ASP.NET เราก็ถึงบางอ้อที่ว่า Microsoft คงไม่ได้เน้น Web เพียงอย่างเดียว แต่มันเป็นเหมือนกับ Virual Machine ของ Java เลย ในระยะอันสั้น Microsoft คงต้องเน้นที่ Web ก่อน เพราะจุดนี้กำลังเป็นจุดขาย

มีคำสำนวนกล่าวว่า "Don't Reinvent the wheel" ความหมายคืออะไรที่มันดีอยู่แล้วอย่าได้ไปวุ่นวายเปลี่ยนแปลงปรับปรุงมันอีก ผลร้ายจะมากกว่าผลดี เมื่อ ADO+ และ ADO.NET ออกมา แนวคิดยังคล้ายกับ ADO แต่วิธีการเขียนกลับรื้อใหม่ ให้เขียนรูปแบบใหม่ ซึ่งผู้ที่เป็น ADO อยู่แล้วต้องเรียนใหม่ครับ ดังนั้น ADO.NET จึงถูกสำนวนข้างต้นเล่นงานจนย่ำแย่แม้กระทั่งในปัจจุบัน แต่เป็นที่ยอมรับกันว่า ADO.NET มีข้อดีเหนือกว่า ADO บ้าง คนติเขาติตรงที่ว่าใช้วิธี update โดยรักษา Syntax แบบเดิมก็น่าจะได้ แต่ Microsoft ไม่ทำ เรื่องนี้เราทำอะไรไม่ได้หรอกครับ เมื่อ ADO.NET ออกมา ADO คงต้องถูกผลักให้อยู่ใน Maintainance Mode นั่นก็คือแก้บั๊กอย่างเดียว มันคือถูกบังคับกลายๆ ให้ต้องหันมาใช้ ADO.NET อยู่ดี

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

ข้อดีของ ADO.NET

    อยากที่กล่าวไปแล้วในข้างต้น ADO และ ADO.NET นั้นไม่ได้เป็นก้าวกระโดดในการพัฒนา แต่ ADO.NET มีข้อดีอยู่บ้างเมื่อเทียบกับ ADO ดังนี้ครับ