420 likes | 742 Views
การเชื่อมต่อฐานข้อมูลด้วย ADO.NET ( VB.NET ). เอกสารสำหรับ การเรียนใน สัปดาห์ที่ 7. อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com xnattapong@hotmail.com xnattapong@yahoo.com. Agenda. โครงสร้างการทำงาน คลาสใน ADO.NET เปรียบเทียบ Dataset กับ RecordSet ใน ADO
E N D
การเชื่อมต่อฐานข้อมูลด้วย ADO.NET( VB.NET ) เอกสารสำหรับ การเรียนใน สัปดาห์ที่ 7 อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com xnattapong@hotmail.com xnattapong@yahoo.com
Agenda • โครงสร้างการทำงาน • คลาสใน ADO.NET • เปรียบเทียบ Dataset กับ RecordSet ใน ADO • Namespace ที่ใช้งานกับฐานข้อมูล
โครงสร้างการทำงานใน ADO.NET
คลาสใน ADO.NET .NET Data Provider DataSet Connection Data Adapter Transaction DataTableCollection Select Command DataTable Command Insert Command DataRowCollection Parameter Update Command DataColumncollection DataReader ConstraintCollection Delete Command DataRelationCollection Data Base XML
คลาสใน ADO.NET • สามารถแบ่งออกเป็น 2 กลุ่ม ดังนี้ • กลุ่มที่ 1 เป็นกลุ่มคลาสที่ทำงานร่วมกับฐานข้อมูลแบบเปิดการเชื่อมต่อ (connected database) • กลุ่มที่ 2 เป็นกลุ่มคลาสที่ทำงานร่วมกับฐานข้อมูลแบบกาตัดการเชื่อมต่อ (disconnected database)
กลุ่มที่ 1 เป็นกลุ่มคลาสที่ทำงานร่วมกับฐานข้อมูลแบบเปิดการเชื่อมต่อ (connected database) • สามารถแยกออกเป็น 2 กลุ่มย่อยตามประเภทของ Data Provider ได้ดังนี้ • SQL Server .NET Data Provider • OLEDB .NET Data Provider
กลุ่มที่ 2 เป็นกลุ่มคลาสที่ทำงานร่วมกับฐานข้อมูลแบบกาตัดการเชื่อมต่อ (disconnected database) • การทำงานใน Layer แรก ซึ่งเป็นส่วนที่ทำงานแบบเชื่อต่อฐานจ้อมลตลอดเวลานั้นเหมาะกับการทำงานที่มีปริมาณข้อมูลไม่มากนักและการประมวลผลไม่ซับซ้อนจนทำให้สิ้นเปลื้องหน่วยความจำและทรัพยากรอื่น ๆ ของคอมพิวเตอร์ มากเกินไป โดยจะประกอบไปด้วยคลาสต่าง ๆ ดังต่อไปนี้ • คลาส Connection • คลาส Command • คลาส Data Reader • คลาส DataAdapter • คลาส DataSet
ติดต่อฐานข้อมูลด้วย ADO.NET • ในการติดต่อและการจัดการกับฐานข้อมูลใดๆ โดยทั่วไปแล้วจะมีขั้นตอนที่สำคัญดังต่อไปนี้ • ติดต่อฐานข้อมูลด้วยคลาส Connection • สร้าง Object จากคลาส Connection • เปิดการเชื่อมต่อด้วยเมธอด Open() • การแสดงข้อมูลด้วยคลาส DataReader • ประมวลผลคำสั่ง SQL ด้วยคลาส Command • ทำงานแบบปิดการเชื่อมต่อด้วย DataSet และ DataAdapter • ปิดการเชื่อมต่อด้วยเมธอด Close()
ติดต่อฐานข้อมูลด้วยคลาส Connection • ก่อนที่เราจะเข้าถึงและจัดการฐานข้อมูล เราจะต้องสร้างการติดต่อกับฐานข้อมูลก่อน สำหรับภาษา VB.NET จะใช้คำสั่ง Imports เพื่ออ้างอิงถึงเนมสเปซไว้บรรทัดสุดของโปรแกรมเพื่อเรียกใช้คลาสที่เหมาะสมกับประเภทของฐานข้อมูล 1. ตัวอย่างการอ้างอิงถึงเนมสเปซเพื่อเรียกใช้คลาสในกลุ่ม OLE DB .NET Data Provider
ติดต่อฐานข้อมูลด้วยคลาส Connection • สร้าง Object จากคลาส Connection รูปแบบที่ 1 Dim ObjConn as Oledbconnection ObjConn = new Oledbconnection(strconn) 2. รูปแบบที่ 2 Dim ObjConn as New Oledbconnection(strconn) โดย ObjConn หมายถึง ออบเจ็กต์ที่สร้างจากคลาส connection strconn หมายถึง connection string หรือ ประโยคข้อความที่ประกอบไปด้วย อาร์กิวเมนต์ต่าง ๆที่ใช้ติดต่อฐานข้อมูล
ติดต่อฐานข้อมูลด้วยคลาส Connection • ตัวอย่างการสร้าง Object จากคลาส Connection 2. ต.ย. Dim MyConn as Oledbconnection Dim strconn as string=“Provider=Microsoft.jet.OLEDB.4.0; Data source=c:\MyDB.MDB” MyConn = new Oledbconnection(strconn) โดย MyConn หมายถึง ออบเจ็กต์ที่สร้างจากคลาส connection strconn หมายถึง connection string หรือ ประโยคข้อความที่ประกอบไปด้วย อาร์กิวเมนต์ต่าง ๆที่ใช้ติดต่อฐานข้อมูล
ติดต่อฐานข้อมูลด้วยคลาส Connection • เปิดการเชื่อมต่อกับฐานข้อมูลด้วยเมธอด Open() 3. ต.ย. Dim MyConn as Oledbconnection Dim strconn as string=“Provider=Microsoft.jet.OLEDB.4.0; Data source=c:\MyDB.MDB” MyConn = new Oledbconnection(strconn) MyConn.Open()
ติดต่อฐานข้อมูลด้วยคลาส Connection • ปิดการเชื่อมต่อกับฐานข้อมูลด้วยเมธอด Close() 4. ต.ย. Dim MyConn as Oledbconnection Dim strconn as string=“Provider=Microsoft.jet.OLEDB.4.0; Data source=c:\MyDB.MDB” MyConn = new Oledbconnection(strconn) MyConn.Open() ‘ ทำงาน กับ ฐานข้อมูล ‘ เมื่อต้องการยกเลิกการทำงาน กับ ฐานข้อมูล MyConn.Close()
ติดต่อฐานข้อมูลด้วยคลาส Connection • แสดงข้อมูลด้วยคลาส DataReader สร้างออบเจ็คจ์จากคลาส DataReader Dim ObjdtReader as OledbDataReader 5. ประมวลผลด้วยคำสั่ง ExecuteReader() ObjdtReader= ObjCmd.ExecuteReader() เข้าถึงข้อมูลแตล่ะเรคคอร์ดด้วเมธอด Read() ObjdtReader.Read() โดย ObjdtReader หมายถึง ออบเจ็กต์ที่สร้างจากคลาส DataReader ObjCmd หมายถึง ออบเจ็กต์ที่สร้างจากคลาส Command
ติดต่อฐานข้อมูลด้วยคลาส Connection • แสดงข้อมูลด้วยคลาส DataReader เข้าถึงข้อมูลแตล่ะฟิลด์ด้วย พร็อพเพอร์ตี้ Item() แบบที่ 1 ObjdtReader.Item(field) แบบที่ 2 ObjdtReader(field) 5. โดย ObjdtReader หมายถึง ออบเจ็กต์ที่สร้างจากคลาส DataReader field หมายถึง ชื่อฟิลด์หรือสำดับที่ของฟิลด์ในเรคคอร์ดนั้น ( 0.. n-1)
ติดต่อฐานข้อมูลด้วยคลาส Connection • ตัวอย่างการแสดงข้อมูลด้วยคลาส DataReader 5.1 Dim MyConn as Oledbconnection Dim strconn as string=“Provider=Microsoft.jet.OLEDB.4.0; Data source=c:\MyDB.MDB” MyConn = new Oledbconnection(strconn) MyConn.Open() ‘ ทำงาน กับ ฐานข้อมูลโดยใช้ DataReader Dim MyReader as OleDbDataReader Dim MyCmd as OleDbCommand = new OleDbCommand(“Select * From Customer”,MyConn) MyReader = MyCmd.ExecuteReader() MyReader.Read() Lb1.Text = MyReader.Item(“CusID”) Lb2.Text = MyReader.Item(“CusName”) Lb3.Text = MyReader.Item(“CusAddress”) ‘ เมื่อต้องการยกเลิกการทำงาน กับ ฐานข้อมูล MyReader.Close() MyConn.Close()
อ่านข้อมูลจากฐานข้อมูลด้วย DataReader Lb1.Text = MyReader.Item(“CusID”) Lb2.Text = MyReader.Item(“CusName”) Lb3.Text = MyReader.Item(“CusAddress”)
ติดต่อฐานข้อมูลด้วยคลาส Connection • ตัวอย่างการแสดงข้อมูลด้วยคลาส DataReader 5.2 Dim MyConn as Oledbconnection Dim strconn as string=“Provider=Microsoft.jet.OLEDB.4.0; Data source=c:\MyDB.MDB” MyConn = new Oledbconnection(strconn) MyConn.Open() ‘ ทำงาน กับ ฐานข้อมูลโดยใช้ DataReader Dim MyReader as OleDbDataReader Dim MyCmd as OleDbCommand = new OleDbCommand(“Select * From Customer”,MyConn) MyReader = MyCmd.ExecuteReader() While MyReader.Read() Lb1.Text &= MyReader.Item(“CusID”) & vbcrlf Lb2.Text &= MyReader.Item(“CusName”) & vbcrlf Lb3.Text &= MyReader.Item(“CusAddress”) & vbcrlf End While ‘ เมื่อต้องการยกเลิกการทำงาน กับ ฐานข้อมูล MyReader.Close() MyConn.Close()
ติดต่อฐานข้อมูลด้วยคลาส Connection • ประมวลผลคำสั่งด้วยคลาส Command 6. แบบที่ 1 Dim objCmd as OleDbCommand objCmd = New OleDbCommand(sqlCmd,MyConn) แบบที่ 2 Dim objCmd as OleDbCommand = New OleDbCommand(sqlCmd,MyConn) โดย ObjCmd หมายถึง ออบเจ็กต์ที่สร้างจากคลาส Command sqlCmd หมายถึง ประโยคคำสั่ง SQL MyConn หมายถึง ออบเจ็กต์ที่สร้างจากคลาส connection
ติดต่อฐานข้อมูลด้วยคลาส Connection • ประมวลผลคำสั่งด้วยเมธอด ExecuteNonQuery() • เป็นเมธอดที่ใช้ประมวลผลคำสั่ง เช่น เพิ่มเรคคอร์ดใหม่ ลบเรคคอร์ด แก้ไขข้อมูล โดยไม่ส่งผลลัพธ์ใด ๆ กลับมา (Non-Query) 6. objCmd.ExecuteNonQuery() โดยที่ ObjCmd หมายถึง ออบเจ็กต์ที่สร้างจากคลาส Command
ติดต่อฐานข้อมูลด้วยคลาส Connection • ประมวลผลคำสั่งด้วยเมธอด ExecuteNonQuery() • กรณีส่งผลลัพธ์กลับคืนมาเป็นจำนวนเรคอร์ดที่ถูกประมวลผล 6.1 varRecAffected = objCmd.ExecuteNonQuery() โดยที่ ObjCmd หมายถึง ออบเจ็กต์ที่สร้างจากคลาส Command varRecAffected หมายถึง ตัวแปรที่จะใช้เก็บจำนวนเรคอร์ดที่ถูกประมวลผล
ติดต่อฐานข้อมูลด้วยคลาส Connection • ประมวลผลคำสั่งด้วยเมธอด ExecuteScalar() • เป็นเมธอดที่ส่งผลลัพธ์ที่ได้จากการประมวผลคำสั่ง SQL กลับคืนมาเพียงค่าเดียวเช่น ผลลัพธ์ที่ได้จากการประมวลผลฟังก์ชั่นสรุป (Aggregate Function) 6.2 varResult = objCmd.ExecuteScalar() โดยที่ varResult หมายถึงตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากการประมวลผลกลุ่มเรคอร์ดเช่น ค่าที่ได้จากฟังก์ชั่น sum,count,average เป็นต้น ObjCmd หมายถึง ออบเจ็กต์ที่สร้างจากคลาส Command
ทำงานแบบ disconnected databaseด้วย DataSet และ DataAdapter • สร้างออบเจ็กต์จากคลาส DataAdapter 7. Dim objdtAdapter As OleDbDataAdapter objdtAdapter = New OleDbDataAdapter(sqlCmd,objConn) โดยที่ objdtAdapter หมายถึงออบเจ็กต์ที่สร้างจากคลาส DataAdapter objConn หมายถึงออบเจ็กต์ที่สร้างจากคลาส Connection sqlCmd หมายถึง ประโยคคำสั่งที่นำมาสร้างตารางใน dataset
ทำงานแบบ disconnected databaseด้วย DataSet และ DataAdapter • สร้างออบเจ็กต์จากคลาส DataSet 7.1 Dim objdtSet As DataSet objdtSet = new DataSet โดยที่ objdtSet หมายถึงออบเจ็กต์ที่สร้างจากคลาส DataSet
ทำงานแบบ disconnected databaseด้วย DataSet และ DataAdapter • นำข้อมูลมาไว้ใน DataSet ด้วยเมธอด Fill() 7.2 objdtAdapter.Fill(objdtSet,dataname) โดยที่ objdtSet หมายถึงออบเจ็กต์ที่สร้างจากคลาส DataSet
VB4 user id=sa; password=123 DataAdapter Fill Update UpdateCommand Disconnected Model DataSet Connection SelectCommand CommandBuilder
DataSet and DataAdapter Objects DataSet DataAdapter Data Source DataTable SelectCommand Fill CommandBuilder Update Connection UpdateCommand DataAdapter DataTable SelectCommand Fill CommandBuilder Update UpdateCommand
Retriving data from DataSet Table Name Column Name TextBox1.Text = DS.Tables("Customer").Rows(2)("Name") Row number DataSet Customer Product
DataRow DataColumn • Delete an existing row DataRow DataTable DataRelation DataSet1.Tables("TableName").Rows({number}) DataSet1.Tables("TableName").Rows({number}).Delete
กรณีศึกษาระบบจองห้องพักโรงแรม AsiaAirport • ข้อมูลห้องพัก (TblRoom) • ประเภทห้องพัก (TblRoomType) • ข้อมูลลูกค้า (TblCustomer) • ข้อมูลพนักงานโรงแรม (TblEmployee) • ข้อมูลการจองห้องพัก (TblReservation) • ข้อมูลสมาชิก (TblMember)
E-R Diagram ประเภท เป็น จอง ลูกค้า ห้องพัก พนักงาน
ออกแบบตาราง TblCustomer • ข้อมูลลูกค้าประกอบไปด้วยรายละเอียดดังต่อไปนี้ • รหัสลูกค้า • คำนำหน้า • ชื่อ - นามสกุลลูกค้า • ที่อยู่ • เบอร์โทร • เพศ • อาชีพ
ต.ย. การจองห้องพักผ่านทางเว็บไซต์
ป้อนข้อมูลลงในตาราง TblCustomer ป้อนข้อมูลตัวอย่างลูกค้าโดยมีรายละเอียดดังต่อไปนี้
ออกแบบตาราง TblMember • ข้อมูลสมาชิกประกอบไปด้วยรายละเอียดดังต่อไปนี้ • รหัสสมาชิก • ชื่อผู้ใช้ระบบ • รหัสผ่าน • ชื่อเต็ม • ประเภทผู้ใช้งาน • อีเมล์
ป้อนข้อมูลลงในตาราง TblMember ป้อนข้อมูลตัวอย่างลงในตารางข้อมูลสมาชิก (TblMember)โดยมีรายละเอียดดังต่อไปนี้
ออกแบบหน้าต่าง Login LbUserName LbPassword TxtUserName TxtPassword