17 October 2013

สิ่งเล็กๆ ที่เรียกว่า Stored Procedures

[ย้ายบทความจาก Gushared.com]
    ช่วงหลังๆถ้าใครได้ติดตามเราจะเห็นว่าผมได้พูดเกี่ยวกับ Stored Procedures แต่มาคราวนี้เราจะมาลองใช้งานมันดู โดยหลักๆผมจะแบ่งเป็นสองส่วน ส่วนแรกจะเป็นการสร้าง Stored Procedures ใน SQL Server และส่วนที่สองจะเป็นส่วนของตัวอย่างการเรียกใช้งาน
ส่วนที่ 1 : การสร้าง Stored Procedures หลังจากที่เราเข้าโปรแกรม SQL Server เรียบร้อยแล้ว คลิกขวาที่ดาต้าเบส -> Programmability -> Stored Procedures -> New Stored Procedure...

    จากนั้นโปรแกรมจะสร้างโค๊ดตัวอย่างขึ้นมาให้ ภาษาที่ใช้สำหรับ Stored Procedures ของ SQL Server จะเรียกว่า T/SQL โดยตัวอย่างที่ผมจะแสดงนี้เป็นการทดสอบดึงข้อมูลขึ้นมา 10 ข้อมูล
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ส่วนของการสร้าง Procedures โดยผมจะให้ชื่อว่า Get10Records
-- แต่ถ้าเป็นกรณีที่สร้างเรียบร้อยแล้ว แต่ต้องการแก้ไขต้องเปลี่ยนจาก "CREATE" เป็น "ALTER"
CREATE PROCEDURE Get10Records
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
        -- ส่วนของการเขียนโค๊ดสำหรับจัดการข้อมูล
 SELECT TOP 10 * FROM dbo.TestSP 
END
GO


ส่วนที่ 2 : การเรียกใช้งาน Stored Procedures (Ex.Console Application)
ตัวอย่างโค๊ดสำหรับเรียกใช้ Stored Procedures
        static void Main(string[] args)
        {

            SqlConnection sqlcon = new SqlConnection();
            sqlcon.ConnectionString = "Data Source=.;Initial Catalog=GuShared;User id=xxxx;Password=xxxxx";

            sqlcon.Open(); 
            //ในส่วนของ Command String ให้ใส่เป็นชื่อ Stored Procedures ที่เราสร้างแทน
            SqlCommand mycom = new SqlCommand("Get10Records", sqlcon);
            mycom.CommandType = CommandType.StoredProcedure;

            SqlDataAdapter ad = new SqlDataAdapter(mycom);

            DataSet ds = new DataSet();

            ad.Fill(ds);
            Console.WriteLine("Get data : " + ds.Tables[0].Rows.Count + " Records");
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                Console.WriteLine(ds.Tables[0].Rows[i][1]);
            }

            sqlcon.Close();
            Console.Read();
        }
ผลลัพธ์ของโปรแกรม
    ประโยชน์อย่างแรกที่เห็นชัดๆเลย สมมติว่าเว็บไซต์ที่เราทำแสดงข้อมูลเรียกจาก A ไป Z แต่วันดีคืนดีลูกค้าบอกไม่เอา จะเอาแบบเรียงจาก Z ไป A
- ทำแบบเดิมๆ แก้ไข SQL Command ในโปรเจค -> Publish -> อัพไฟล์ขึ้นบนเซิฟเวอร์
- แต่ถ้าใช้ Stored Procedures แค่แก้ไขโค๊ดใน Stored Procedures แค่นั้นก็เป็นอันเรียบร้อย