1 / 22

การ เข้าถึง ฐานข้อมูล ด้วย กลุ่ม object ADO.NET

การ เข้าถึง ฐานข้อมูล ด้วย กลุ่ม object ADO.NET. กลุ่ม object หลักของสถาปัตยกรรม ADO.NET. (ActiveX Data Object). หน้าที่ของแต่ละ object. Connection ทำหน้าที่สร้างการเชื่อมต่อเข้ากับฐานข้อมูล OleDbConnection ติดต่อกับ Access, Oracel , SQL Server, MySQL

lynna
Download Presentation

การ เข้าถึง ฐานข้อมูล ด้วย กลุ่ม object ADO.NET

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. การเข้าถึงฐานข้อมูลด้วยกลุ่ม object ADO.NET

  2. กลุ่ม object หลักของสถาปัตยกรรม ADO.NET (ActiveX Data Object)

  3. หน้าที่ของแต่ละ object • Connection ทำหน้าที่สร้างการเชื่อมต่อเข้ากับฐานข้อมูล • OleDbConnectionติดต่อกับ Access, Oracel, SQL Server, MySQL • SqlConnectionติดต่อกับ SQL Server • DataAdapter ทำหน้าที่เก็บชุดคำสั่ง SQL เพื่อคิวรีข้อมูลออกมาจากฐานข้อมูล ผลลัพธ์ที่ได้คือออบเจ็กต์ DataSet • DataSetทำหน้าที่เก็บผลลัพธ์จาการทำคิวรีข้อมูลจากฐานข้อมูลที่ได้จากDataAdapter • Command ทำหน้าที่เก็บชุดคำสั่ง SQL เพื่อคิวรีข้อมูลออกมาจากฐานข้อมูล ผลลัพธ์ที่ได้คือออบเจ็กต์ DataReader • DataReaderทำหน้าที่เก็บผลลัพธ์จาการทำคิวรีข้อมูลจากฐานข้อมูลที่ได้จาก Command

  4. การใช้งาน DataSet • DataSetอ่านข้อมูลทั้งหมดที่คิวรีได้ภายในครั้งเดียว โดยใช้คำสั่ง Fill() ของDataAdapterเหมาะกับการอ่านข้อมูลจำนวนมาก • สามารถจัดการข้อมูลที่ตัวDataSet เองได้ • ใน 1DataSetสามารถเก็บผลลัพธ์จากการคิวรีได้หลายๆ ครั้งโดยตั้งชื่ออ้างอิงที่แตกต่างกันออกไป

  5. ตัวอย่างการใช้งานDataSet • ตัวอย่างตาราง User

  6. ตัวอย่างDataSet

  7. การใช้งาน DataReader • DataReaderอ่านข้อมูลออกมาครั้งละ 1record โดยใช้คำสั่ง Read() เหมาะกับการอ่านข้อมูลจำนวนน้อยๆ มีการทำงานเร็วกว่าDataSet • ถ้าต้องการอ่านข้อมูลจำนวนมากขึ้นต้องมีการเก็บผลลัพธ์ไว้ในDataTableโดยใช้คำสั่ง Load() • การอ่านข้อมูลของDataReaderนั้นเป็นการอ่านข้อมูลโดยการเลื่อน pointer ไปข้างหน้าเพียงอย่างเดียว (forward-only)

  8. ตัวอย่างDataReader (1)

  9. ตัวอย่างDataReader (2)

  10. Namespace ของ ADO.NET • System.Data • System.Data.SqlClient // ติดต่อกับ SQL Server • System.Data.OleDb // ติดต่อกับ Access, Oracle, MySQL

  11. สร้างฐานข้อมูล และตาราง • สร้างฐานข้อมูลใหม่ • Project > add new item > SQL Server Database • ตั้งชื่อฐานข้อมูลเป็นCompany.mdf • สร้างตารางโดยไปที่ Database explorer> table > add new table • กำหนดให้สร้างตาราง Group เก็บข้อมูลประเภทของผู้ใช้งาน • และตารางUserเก็บข้อมูลผู้ใช้งาน

  12. ตารางGroup • ตาราง User

  13. ตารางGroup • ตารางUser

  14. Database diagram • สร้าง Database diagram เพื่อสร้างความสัมพันธ์ระหว่างตาราง โดยคลิ๊กที่ Database diagram > add new diagram

  15. สร้างคลาสdbcon(แบบ static) เพื่อเชื่อมต่อฐานข้อมูล publicstaticclassdbcon{ publicstaticSqlConnectionconn=null; privatestaticstringconstr=@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Company.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; publicstaticvoidconnectToDB() { conn=newSqlConnection(constr); if (conn.State==ConnectionState.Open) { conn.Close(); } conn.Open(); } publicstaticvoidcloseDB() { if (conn.State==ConnectionState.Open) { conn.Close(); } } }

  16. สร้างหน้าสมัครสมาชิก Register.aspx • เขียนเมธอดconnect_db() ภายในหน้านี้ เพื่อทดสอบว่าสามารถเชื่อมต่อฐานข้อมูลได้สำเร็จ (โดยเรียกใช้เมธอดconnectToDB() ที่เคยได้เขียนไว้แล้วในคลาส dbcon)โดยต้องทดสอบเมธอด connect_db()นี้ โดยเรียกใช้จาก Page_Load() protected void connect_db() { try{ dbcon.connectToDB(); Response.Write(“เชื่อมต่อฐานข้อมูลสำเร็จ<br/>"); } catch (Exception ex) { Response.Write("เชื่อมต่อฐานข้อมูลไม่สำเร็จ<br />" + ex); } }

  17. สร้างฟอร์มสำหรับกรอกข้อมูลผู้ใช้งานสร้างฟอร์มสำหรับกรอกข้อมูลผู้ใช้งาน

  18. เขียนคำสั่งให้ดึงข้อมูลฟิลด์ groupNameจากตาราง Group มาแสดงในDropDownList protectedvoidselect_group() { connect_db(); stringselect_sql="select * from [Group]"; //ประมวลผลคำสั่งsqlโดยใช้ SqlCommand โดยมี connection ส่งเข้าไปเป็นพารามิเตอร์ SqlCommandcmd=newSqlCommand(select_sql, dbcon.conn); //สร้างdatareaderเพื่ออ่านข้อมูลผลลัพธ์ที่ได้ SqlDataReaderreader=cmd.ExecuteReader(); //สร้างdatatableเพื่อเก็บผลลัพธ์ที่ได้อีกต่อหนึ่ง DataTabledt=newDataTable(); //โหลดผลลัพธ์จาก datareaderมาเก็บใน datatable dt.Load(reader); //สั่งให้แสดงผลลัพธ์ใน dropdownlist ddlGroup.DataSource=dt; ddlGroup.DataTextField="groupName"; //ชื่อฟิลด์ที่แสดงผล ddlGroup.DataValueField="groupID"; //ชื่อฟิลด์ที่returnค่าออกมา ddlGroup.DataBind(); //สั่งbind ให้แสดงผลลัพธ์จาก datatableลงใน dropdown //ddlGroup.Items.Insert(0, "please select"); dbcon.closeDB(); }

  19. เรียกใช้เมธอดselect_groupจากPage_Loadเรียกใช้เมธอดselect_groupจากPage_Load protectedvoidPage_Load(objectsender, EventArgse) { if (Page.IsPostBack==false) //คือเปิดเพจมาครั้งแรก select_group(); } ** property IsPostBack จะเป็น true ก็ต่อเมื่อเพจนั้นถูกเปิดมาแล้วเป็นครั้งที่ 2 ขึ้นไป (เช่นผู้ใช้กด refreshหรือมี event อื่นเกิดขึ้นในหน้านั้นแล้ว)

  20. ก่อนจะ insert ข้อมูลผู้ใช้ ให้ตรวจสอบก่อนว่า username นั้นไม่ซ้ำกับข้อมูลที่มีอยู่แล้ว protectedboolvalid_username() { connect_db(); stringselect_sql=“……………………………………………………………….."; SqlCommandcmd=newSqlCommand(select_sql, dbcon.conn); cmd.Parameters.AddWithValue(“ชื่อพารามิเตอร์", ค่าที่กำหนดให้); SqlDataReaderreader=cmd.ExecuteReader(); if (reader.HasRows) { lbCheck.Text="Username ถูกใช้งานแล้ว"; dbcon.closeDB(); returnfalse; } lbCheck.Text="สามารถใช้ Username นี้ได้"; dbcon.closeDB(); returntrue; }

  21. เมื่อกดปุ่ม Register ให้ insert ข้อมูลลงตาราง user protectedvoid btnRegister_Click(objectsender, EventArgse){ if (valid_username()) { //check ก่อนว่า username นี้ยังไม่ถูกใช้งาน try{ connect_db(); //กำหนดคำสั่งsqlinsert ข้อมูลลงตาราง SqlCommandinsert_cmd=newSqlCommand(“………………………", …………………); //ให้ค่าพารามิเตอร์ต่างๆ insert_cmd.Parameters.AddWithValue(“………..", ………………….); ……. //ประมวลผลคำสั่ง sql ใช้ExecuteNonQuery() คือไม่ returnผลลัพธ์แถวกลับมา insert_cmd.ExecuteNonQuery(); lbStatus.Text="เพิ่มข้อมูลสำเร็จ"; } catch (SqlExceptionse) { lbStatus.Text="เพิ่มข้อมูลไม่สำเร็จ "+se.ToString(); } dbcon.closeDB(); } else { lbStatus.Text="เพิ่มข้อมูลไม่สำเร็จ เนื่องจาก username นี้ถูกใช้แล้ว"; } }

  22. แบบฝึกหัด • สร้างหน้า Default.aspx • ปุ่ม register ให้ลิ้งค์ไปหน้า Register.aspx • ปุ่ม login เมื่อผู้ใช้กรอก username และ password แล้วให้ไปตรวจสอบว่าข้อมูลทั้งสองตรงกับในฐานข้อมูลหรือไม่ • ถ้าตรงกัน ก็ให้เข้าสู่ระบบได้แล้วลิ้งค์ไปหน้าใหม่ก็ได้(สร้างมาเพิ่มเติม) • ถ้าไม่ตรงกัน ก็แจ้งเตือนว่าให้ตรวจสอบ username, password อีกครั้งผ่าน label • เพิ่มเติม: ถ้าสามารถแยกความแตกต่างของกลุ่มผู้ใช้ได้จะได้คะแนนเพิ่ม • เช่น username: ton อยู่ groupID ที่ 2 คือเป็น employee ก็ให้ลิ้งค์มาหน้า employee • username: tea อยู่groupIDที่ 4 คือเป็น manager ก็ให้ลิ้งค์มาหน้า manager

More Related