การเข้าถึงฐานข้อมูลADO

Download Report

Transcript การเข้าถึงฐานข้อมูลADO

1
(ActiveX Data Object)
ADO.NET
SqlConnection
OleDbConnection
OleDbCommand
OleDbDataReader
OleDbDataAdapter
DataSet
SqlDataAdapter
SqlCommand
SqlDataReader
2
1.
Connection ทำหน้ ำที่สร้ ำงกำรเชื่อมต่อเข้ ำกับฐำนข้ อมูล
1.
2.
2.
3.
4.
5.
OleDbConnection ติดต่อกับ Access, Oracel, SQL Server, MySQL
SqlConnection
ติดต่อกับ SQL Server
DataAdapter ทำหน้ ำที่เก็บชุดคำสัง่ SQL เพื่อคิวรี ข้อมูลออกมำจำกฐำนข้ อมูล
ผลลัพธ์ที่ได้ คือออบเจ็กต์ DataSet
DataSet ทำหน้ ำที่เก็บผลลัพธ์จำกำรทำคิวรี ข้อมูลจำกฐำนข้ อมูลที่ได้ จำก
DataAdapter
Command ทำหน้ ำที่เก็บชุดคำสัง่ SQL เพื่อคิวรี ข้อมูลออกมำจำกฐำนข้ อมูล
ผลลัพธ์ที่ได้ คือออบเจ็กต์ DataReader
DataReader ทำหน้ ำที่เก็บผลลัพธ์จำกำรทำคิวรี ข้อมูลจำกฐำนข้ อมูลที่ได้ จำก
Command
3



DataSet อ่ำนข้ อมูลทังหมดที
้
่คิวรี ได้ ภำยในครัง้ เดียว โดยใช้ คำสัง่ Fill() ของ
DataAdapter เหมำะกับกำรอ่ำนข้ อมูลจำนวนมำก
สำมำรถจัดกำรข้ อมูลที่ตวั DataSet เองได้
ใน 1 DataSet สำมำรถเก็บผลลัพธ์จำกกำรคิวรี ได้ หลำยๆ ครัง้ โดยตังชื
้ ่ออ้ ำงอิงที่
แตกต่ำงกันออกไป
4

ตัวอย่ำงตำรำง User
5
ตัวอย่ำง DataSet
6

DataReader อ่ำนข้ อมูลออกมำครัง้ ละ 1 record โดยใช้ คำสัง่ Read() เหมำะกับกำร
อ่ำนข้ อมูลจำนวนน้ อยๆ มีกำรทำงำนเร็ วกว่ำ DataSet
◦ ถ้ ำต้ องกำรอ่ำนข้ อมูลจำนวนมำกขึ ้นต้ องมีกำรเก็บผลลัพธ์ไว้ ใน DataTable
โดยใช้ คำสัง่ Load()
◦ กำรอ่ำนข้ อมูลของ DataReader นันเป็
้ นกำรอ่ำนข้ อมูลโดยกำรเลื่อน pointer
ไปข้ ำงหน้ ำเพียงอย่ำงเดียว (forward-only)
7
ตัวอย่ำง DataReader (1)
8
ตัวอย่ำง DataReader (2)
9



System.Data
System.Data.SqlClient
System.Data.OleDb
// ติดต่อกับ SQL Server
// ติดต่อกับ Access, Oracle, MySQL
10

สร้ ำงฐำนข้ อมูลใหม่
◦ Project > add new item > SQL Server Database
◦ ตังชื
้ ่อฐำนข้ อมูลเป็ น Company.mdf

สร้ ำงตำรำงโดยไปที่ Database explorer > table > add new table
◦ กำหนดให้ สร้ ำงตำรำง Group เก็บข้ อมูลประเภทของผู้ใช้ งำน
◦ และตำรำง User เก็บข้ อมูลผู้ใช้ งำน
11
• ตำรำง Group
• ตำรำง User
12

ตำรำง Group

ตำรำง User
13

สร้ ำง Database diagram เพื่อสร้ ำงควำมสัมพันธ์ระหว่ำงตำรำง โดยคลิก๊ ที่
Database diagram > add new diagram
14
สร้ างคลาส dbcon (แบบ static) เพื่อเชื่อมต่ อฐานข้ อมูล
public static class dbcon {
public static SqlConnection conn = null;
private static string constr =
@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Company.mdf;
Integrated Security=True;Connect Timeout=30;User Instance=True";
public static void connectToDB() {
conn = new SqlConnection(constr);
if (conn.State == ConnectionState.Open) {
conn.Close();
}
conn.Open();
}
public static void closeDB() {
if (conn.State == ConnectionState.Open) {
conn.Close();
}
}
}
15

เขียนเมธอด 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);
}
}
16
17
เขียนคาสั่งให้ ดงึ ข้ อมูลฟิ ลด์ groupName จากตาราง Group มาแสดงใน DropDownList
protected void select_group() {
connect_db();
string select_sql = "select * from [Group]";
//ประมวลผลคำสั่ งsql โดยใช้ SqlCommand โดยมี connection ส่งเขำไปเป็
นพำรำมิเตอร ์
้
SqlCommand cmd = new SqlCommand(select_sql, dbcon.conn);
//สรำงdatareader
เพือ
่ อำนข
อมู
้
่
้ ลผลลัพธที
์ ไ่ ด้
SqlDataReader reader = cmd.ExecuteReader();
//สรำงdatatable
เพือ
่ เก็บผลลัพธที
่ง
้
์ ไ่ ดอี
้ กตอหนึ
่
DataTable dt = new DataTable();
//โหลดผลลัพธจำก
datareader มำเก็บใน datatable
์
dt.Load(reader);
//สั่ งให้แสดงผลลัพธใน
dropdownlist
์
ddlGroup.DataSource = dt;
ddlGroup.DataTextField = "groupName"; //ชือ
่ ฟิ ลดที
่ สดงผล
์ แ
ddlGroup.DataValueField = "groupID"; //ชือ
่ ฟิ ลดที
์ r่ eturnคำออกมำ
่
ddlGroup.DataBind(); //สั่ งbind ให้แสดงผลลัพธจำก
datatable ลงใน dropdown
์
//ddlGroup.Items.Insert(0, "please select");
}
dbcon.closeDB();
18
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false) //คือเปิ ดเพจมำครัง้ แรก
select_group();
}
** property IsPostBack จะเป็ น true ก็ต่อเมื่อเพจนันถู
้ กเปิ ดมำแล้ วเป็ นครัง้ ที่ 2 ขึ ้น
ไป (เช่นผู้ใช้ กด refresh หรื อมี event อื่นเกิดขึ ้นในหน้ ำนันแล้
้ ว)
19
protected bool valid_username() {
connect_db();
string select_sql = “………………………………………………………………..";
SqlCommand cmd = new SqlCommand(select_sql, dbcon.conn);
cmd.Parameters.AddWithValue(“ชือ
่ พำรำมิเตอร",
่ ำหนดให้);
์ คำที
่ ก
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
lbCheck.Text= "Username ถูกใช้งำนแลว";
้
dbcon.closeDB();
return false;
}
}
lbCheck.Text = "สำมำรถใช้ Username นี้ได";
้
dbcon.closeDB();
return true;
20
protected void btnRegister_Click(object sender, EventArgs e) {
if (valid_username()) {
//check
ก่อนว่า username นี้ ยงั ไม่ถกู ใช้งาน
try {
connect_db();
//กาหนดคาสัง่ sql insert
ข้อมูลลงตาราง
SqlCommand insert_cmd = new SqlCommand(“………………………", …………………);
//ให้ค่าพารามิเตอร์ต่างๆ
insert_cmd.Parameters.AddWithValue(“………..", ………………….);
…….
//ประมวลผลคาสัง่ sql
ใช้ ExecuteNonQuery() คือไม่ return ผลลัพธ์แถวกลับมา
insert_cmd.ExecuteNonQuery();
lbStatus.Text = "เพิม
่ ขอมู
้ ลสำเร็จ";
}
catch (SqlException se) {
lbStatus.Text ="เพิม
่ ข้อมูลไมส
่ ำเร็จ " + se.ToString();
}
dbcon.closeDB();
}
else {
lbStatus.Text = "เพิม
่ ขอมู
้ ลไมส
่ ำเร็จ เนื่องจำก username นี้ถูกใช้แลว";
้
}
}
21



สร้ ำงหน้ ำ Default.aspx
ปุ่ ม register ให้ ลิ ้งค์ไปหน้ ำ Register.aspx
ปุ่ ม login เมื่อผู้ใช้ กรอก username และ password แล้ วให้ ไปตรวจสอบว่ำข้ อมูลทังสอง
้
ตรงกับในฐำนข้ อมูลหรื อไม่
◦ ถ้ ำตรงกัน ก็ให้ เข้ ำสูร่ ะบบได้ แล้ วลิ ้งค์ไปหน้ ำใหม่ก็ได้ (สร้ ำงมำเพิ่มเติม)
◦ ถ้ ำไม่ตรงกัน ก็แจ้ งเตือนว่ำให้ ตรวจสอบ username, password อีกครัง้ ผ่ำน label

เพิ่มเติม: ถ้ ำสำมำรถแยกควำมแตกต่ำงของกลุม่ ผู้ใช้ ได้ จะได้ คะแนนเพิ่ม
◦ เช่น username: ton อยู่ groupID ที่ 2 คือเป็ น employee ก็ให้ ลิ ้งค์มำหน้ ำ employee
◦ username: tea อยู่ groupID ที่ 4 คือเป็ น manager ก็ให้ ลิ ้งค์มำหน้ ำ manager
22