//
you're reading...
C#

เขียนโปรแกรมติดต่อ Microsoft SQL Server(MSSQL) ด้วย Data Provider ตอน 1

เขียนโปรแกรมติดต่อ Microsoft SQL Server(MSSQL) ด้วย Data Provider ตอน 1
การเขียนโปรแกรมติดต่อ Microsoft SQL Server(MSSQL) ด้วย Data Provider
สามารถทำได้ 2 วิธี
1. Connected เป็นการติดต่อกับข้อมูลโดยตรง แต่ก่อนอื่นเราต้องรู้จัก Class ที่เป็น พระเอก
ของ เราก่อน ทั้งสามตัว คือ
SqlConnection ใช้ในการเชื่อมต่อ MSSQL
SqlCommand ใช้ในการระบุ SQL Command
SqlDataReader ใช้ในการเก็บผลลัพย์ ที่ได้จาก การเรียกใช้คำสั่ง ExecuteReader
ของ SqlCommand
ซึ่ง สุดหล่อ ทั้ง 3 นี้อยู่ใน namespace ที่ชื่อว่า System.Data.SqlClient;
มาดูตัวอย่าง วิธีเขียน กันเลยดีกว่า


using System.Data.SqlClient;
class Program
{
    static void Main(string[] args)
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Data Source=Server; Initial Catalog=Database; User Id=username;Password=password;";
        conn.Open();
    }
}
 

ก่อนอื่นให้ทำการสร้าง ตัว SqlConnection ขึ่นมาก่อน จากตัวอย่างนี้คือ

SqlConnection conn = new SqlConnection();

หลังจากนั้น ให้ทำการกำหนด connectionString ให้ตัว
Property ConnectionString ของ ตัว conn ที่เราประกาศไว้

 
conn.ConnectionString = "Data Source=myServer; 
Initial Catalog=myDatabase;User Id=myUsername;Password=myPassword;"; 


แล้ว ConnectionString มันคืออะไรละ ConnectionString มันคือ ประโยค
หรือข้อความ ที่ใช้เก็บ รายละเอียด หรือ ข้อมูล ที่จำเป็นในการใช้ติดต่อ
DataSource(แหล่งข้อมูล) แล้วเราจะรู้ได้ไงว่า DataSource แต่ละชนิดจะต้องเขียน
ConnectionString ยังไง ในที่นี้ เราติดต่อ DataSouce คือ MSSQL
ซึ่งเป็นการเขียนติดต่อแบบ ปกติ ใช้ user ของตัว mssql ในการติดต่อ โดย
Data Source=myServer
myServer คือ ชื่อของตัว Database Server โดยถ้า MSSQL อยู่บนเครื่อง ที่ รัน
โปรแกรม สามารถใช้ . หรือ (local) แทน ชื่อเครื่อง Database Server ได้
Initial Catalog=myDatabase
myDatabase คือ ชื่อ Database ที่เราต้องการติดต่อ
User Id=myUsername
myUsername คือ ชื่อ user ในตัว MSSQL ที่มี สิทธิ ในการใช้ งาน myDatabase
Password=myPassword
myPassword คือ password ของ myUser
เราสามารถ ดูตัวอย่าง ConnectionString ที่ใช้สำหรับ ติดต่อ DataSorce ชนิดอื่นๆ
เช่น DB2, MySQL, XML ฯลณ ได้ที่ http://www.connectionstrings.com

conn.Open();

เป็นการสั่งให้ เชื่อมต่อไปที่ MSSQL
ถ้า run โปรแกรม แล้ว ไม่เกิด Error แสดงว่า เรา สามารถ เชื่อมต่อกับ MSSQL ได้แล้ว
ต่อไป เราจะมารัน SQL Command ผ่านตัว SqlCommand ตัว SqlCommand นั้น
จะมี Method ที่ใช้ในการ Execute คำสั่งอยู่ 3 ประเภท
- ExecuteReader ใช้ Execute คำสั่ง ที่ต้องการผลลัพย์มากกว่า 1 แถว หรือ 1 คอลัม
เช่น
SELECT id, name FROM employee
– ผลลัพย์ที่ได้ มากกว่า 1 แถว และ มากกว่า 1 คอลัมย์
SELECT id FROM employee
– ผลลัพย์ที่ได้ มากกว่า 1 แถว แต่ได้ 1 คอลัมย์
SELECT TOP id, name FROM employee
– ผลลัพย์ที่ได้ ได้ 1 แถว และ ต้องการ 1 คอลัมย์
SELECT * FROM employee
– ผลลัพย์ที่ได้ ได้ ทุก แถว และ ทุก คอลัมย์

ตัวอย่าง


using System.Data.SqlClient;

class Program
{
    static void Main(string[] args)
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Data Source=Server; Initial Catalog=Database;User Id=username;Password=password;";
        conn.Open(); SqlCommand comm = new SqlCommand();
        comm.Connection = conn;
        comm.CommandText = "SELECT * FROM tbl";
        SqlDataReader read = comm.ExecuteReader();
        conn.Close();
    }
}


- ExecuteScalar ใช้ Execute คำสั่ง ที่ต้องการผลลัพย์ ที่เป็น ค่าคงที่ ค่าเดียว
ส่วนมากจะใช้ รัน คำสั่ง aggregate function พวก MIN, MAX, AVE, COUNT
, SUM เช่น
SELECT MAX(salary) FROM employee
-- หาเงินเดือนที่มากกว่าที่สุด
SELECT COUNT(id) FROM employee
-- หาว่ามีพนักงานกี่คน
เนื่องจาก ผลลัพย์ จากคำสั่ง ExecuteScalar จะถูกส่ง กลับมาเป็น Object
เมื่อต้องนำไปใช้ จึงต้อง Convert ให้ตรงกับ DataType ตามความต้องการก่อน นะครับ

ตัวอย่าง

 
using System;
using System.Data.SqlClient;

class Program
{
    static void Main(string[] args)
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Data Source=Server; 
Initial Catalog=Database;User Id=username;Password=password;";
        conn.Open(); SqlCommand comm = new SqlCommand();
        comm.Connection = conn;
        comm.CommandText = "SELECT MAX(salary) FROM employee";
        int maxSalary = Convert.ToInt32(comm.ExecuteScalar());
        comm.CommandText = "SELECT MAX(registerDate) FROM employee";
        DateTime registerDate = Convert.ToDateTime(comm.ExecuteScalar()); conn.Close();
    }
}


- ExecuteNonQuery ใช้ Execute ที่ไม่ใช้คำสั่ง Query หรือ คำสั่ง อะไรก็ได้ ที่ไม่ใช้
คำสั่ง SELECT ผลลัพย์ที่ได้จากคำสั่งนี้คือ rows affected หรือจำนวน แถวของข้อมูลที่เกิด
ผลกระทบ จากคำสั่งที่นำไป Execute เช่น

INSERT INTO employee(id, name) VALUE
S(‘1’, ‘dude’)
--ถ้าคำสั่งนี้ execute สำเร็จ จะเกิด data ขึ่น 1 แถว ซึ่ง ผลลัพย์ที่ ส่งกลับคืนจากคำสั่งนี้
คือ 1 หรือ rows affected ได้ 1

UPDATE employee SET name = ‘mr.’ + name WHERE gender = ‘M’
--สมมุติว่า คำสั่งนี้ execute สำเร็จและมีจำนวน row ที่ถูกแก้ไข ด้วยคำสั่งนี้ไป 25 row
หมายความว่า คำสั่งนี้จะได้ ผลลัพย์ที่ ส่งกลับคืนจากคำสั่งนี้คือ 25
หรือ rows affected ได้ 25

ตัวอย่าง


using System;
using System.Data.SqlClient;

class Program
{
    static void Main(string[] args)
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Data Source=Server; 
Initial Catalog=Database;User Id=username;Password=password;";
        conn.Open(); SqlCommand comm = new SqlCommand();
        comm.Connection = conn;
        comm.CommandText = "UPDATE employee SET name = 'mr.' + name WHERE gender = 'm'";
        int rowAffected = comm.ExecuteNonQuery(); conn.Close();
    }
}


การเขียนโปรแกรมติดต่อ แบบ Connected จบลงแค่นี้นะครับ เดียวมา ต่อ Disconnected
ใน ตอน 2 นะครับ

2. Disconnected เป็นการติดต่อกับข้อมูล ที่ถูกเก็บบนหน่วยความจำ คือมีการดึงข้อมูลที่ได้
จาก MSSQL มาเก็บไว้ที่ ตัวพักข้อมูล(DataTable) แล้วเล่นกับข้อมูลที่อยู่ใน
ตัวพักข้อมูล(DataTable) อีกที่

การสนทนา

1 thoughts on “เขียนโปรแกรมติดต่อ Microsoft SQL Server(MSSQL) ด้วย Data Provider ตอน 1

  1. แตงค์ๆ

    Posted by Kimz | พฤษภาคม 4, 2011, 9:09 am

ใส่ความเห็น