\

Facebook


วันพุธที่ 11 กันยายน พ.ศ. 2556

อยากให้ชีวิตง่ายขึ้นต้องใช้ Store Procedure [WinForm c# + SQL Server]

คราวที่แล้วผม Blog เกี่ยวกับการติดต่อฐานข้อมูลด้วย SQLConnection ไปแล้ว คราวนี้เพิ่มความเก๋ไปอีกนิดหน่อยด้วยการเรียกใช้คำสั่ง SQL ด้วย Store Procedure ที่สร้างไปในดาต้าเบส โดยตัวอย่างนี้จะสร้างโปรแกรมค้นหาข้อมูลผู้ใช้งาน(ยูสเซอร์)อย่างง่ายๆ >> คำถามคือใช้แล้วชีวิตดียังไง?


คำตอบคือ แทนที่เราจะเขียนโค๊ด sql ซ้ำๆคำสั่งเดิมๆที่หน้า form ของเรา น่าจะมีวิธีที่สามารถเรียกใช้งาน query ทันทีได้เลยโดยไม่ต้องมาเริ่มต้นเขียนคิวรี่ "SELECT * FROM..." ใหม่ทุกครั้งไป นั้นแหละครับเรียกว่า store procedure ซึ่งคำสั้งเหล่านี้เราจะเขียนเตรียมไว้ก่อนที่ดาต้าเบสของเรา แล้วตั้งชื่อมันไว้ พอจะใช้งานแต่ละทีก็เลือกตามชื่อแล้วส่งตัวแปรที่จำเป็นไปให้ จากนั้นนั่งรอเอ็กซิคิวผลลัพธ์ได้เลยครับ

วิธีการสร้าง store procedure บน SQL Server 2008 R2
เข้าไปที่เบสปัจจุบัน แล้วเลือกโฟลเดอร์  Programability > Store procedures จากนั้นคลิกขวาเลือเมนู New Store Procedure.. เพื่อเพิ่มสโตร์โพซิเยอร์ตัวใหม่เข้าไป แล้วเซ็ตค่าตามรูปเลยครับ (อย่าลืมเปลี่ยนค่าที่อยู่ในกรอบสีแดงให้ตรงกับที่อยู่ในเบสของคุณด้วย)


เตรียมสิ่งต่อไปนี้ก่อน

สร้าง Databaseไว้ ชื่อว่า Sample โดยกำหนดให้มีตาราง User แล้ว add ข้อมูลไว้สัก 2-3 บรรทัดนะครับ
สร้าง Windows Form Application ขึ้นมา ตั้งชื่อว่า SearchApplication แล้วจัดหน้าจอให้ได้แบบด้านล่างนี้เลยครับ โดยเราจะรับข้อมูลชื่อ User จาก textEdit ด้านบนสุดแล้วเมื่อกดปุ่ม search โปรแกรมจะวิ่งไปค้นหาข้อมูลผ่าน store procedure ที่เราสร้างเอาไว้ แล้วแสดงค่าผลลัพธืตรงกรอบ result ที่เป็น label edit
สร้าง store procedures ขึ้นมาใหม่



ในโค๊ด อธิบายนิดหน่อย
การเพิ่ม parameter นั้นมีวธีการคือ cmd.Parameters.Add(new SqlParameter("@strName", text));
โดย @strName เป็นชื่อ store ที่อยู่ในดาต้าเบส ซึ่งเราต้องส่งไปให้ถูกตัวด้วย
text เป็นค่าของตัวแปรที่เราจะส่งไป >> อย่าลืมว่าใน c# และ SQL Server ก็มี FileType เช่นกัน ถ้า Map ไม่ตรงก็จะ error เช่น map stringในc# to intในSQLServer แบบนี้ไม่ได้นะครับ เพราะจะไม่ขึ้น error ตอน complie แต่พังแน่ๆตอน run
จากนั้นเพิ่ม Command Type ให้ SQL รู้จักด้วยว่า "Connection ต่อไปนี้คือ store" ด้วยการเซ็ต cmd.CommandType = CommandType.StoredProcedure; เพิ่มเข้าไป >> นอกจากนี้ก็เหมือนกัน SQLConnection โค๊ดเดิมทุกประการ







โค๊ดสมบูรณ์ด้านล่างนี้ครับ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace ConsoleSqlConnect
{
    public partial class Search : Form
    {
        public Search()
        {
            InitializeComponent();
            labelControl1.Text = "";
        }
        string text = string.Empty;
        SqlConnection sqlConn = null;
        private void Search_Load(object sender, EventArgs e)
        {
            string ConnectionString = GetConnectionString();
            sqlConn = new SqlConnection(ConnectionString);
             
        }
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            labelControl1.Text = "";
            text = textEdit1.EditValue.ToString();
            try
            {
                sqlConn.Open();
                using (SqlCommand cmd = new SqlCommand("SearchUserName", sqlConn))
                {
 
                    #region sql
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add(new SqlParameter("@strName", text));
                    SqlDataReader result = cmd.ExecuteReader();
                    if(result != null)
                    {
                    while (result.Read())
                    {
                        labelControl1.Text = " Item Found >> " + System.Environment.NewLine +
                            "\tUserName : " + result[1] + System.Environment.NewLine + "\tPassword : " + result[2];
                    }
                    }
                    else{
                    }
                    #endregion
                }
                sqlConn.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error : " + ex);
            }
 
        }
        private static string GetConnectionString()
        {
            string strConnect = "";
 
            string localhost = "(local)";
            string userName = "sa";
            string Password = "12345";
            string Catalog = "Sample";
 
            strConnect = "Data Source=" + localhost + ";Initial Catalog=" + Catalog + ";User ID=" + userName + ";Password=" + Password + "";
            return strConnect;
        }
    }
}<div class="preloader"><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>
1
<div class="preloader"><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>
อยากเปลี่ยน query เป็นแบบอื่นก็แก้ไขในฟิลล์ BEGIN ได้เลยครับ หรืออยากเพิ่มคำสั่งอื่นๆก็สร้างสโตรมาใหม่ แล้วเพิ่มตัวแปรเข้าไปก็ได้ จัดเป็นหมวดหมู่คำสั่ง select alter delete ให้เป็นระเบียบ

2 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...

บทความดีครับ แต่เห็นในบทความหลายครั้งใช้คำว่า คัวแปล ที่ถูกต้องเป็น ตัวแปร ครับ ถ้าแก้ไขได้จะดีมากคนรุ่นหลังๆ หรือเด็กๆ ที่สนใจเข้ามาอ่านจะได้ใช้คำที่ถูกต้องตามไปด้วย ขอบคุณครับ

Chin Chayut กล่าวว่า...

แก้ไขแล้ว ขอบคุณมากครับ

May be like this posts

  • [ SQL SERVER ] Prevent Saving Changes Recreated แค่แก้คอลลัมม์ จะให้ดรอปเทเบิลแล้วสร้างใหม่เฉย
    20/05/2014 - 0 Comments
    ธรรมดาของ SQL SERVER 2008 R2 เวลาที่เราจะแก้ไขดาต้าไทป์ของคอลัมม์ให้เป็นประเภทอื่น เช่น แก้จาก int เป็น…
  • อัพเดตโค๊ด Revisionล่าสุดมาMerge >> แล้วโค๊ดอะไรเปลี่ยนแปลงบ้าง
    27/08/2013 - 0 Comments
    การใช้งาน Revision Control ในโปรเจกค์เขียนโปรแกรมที่มีขนาดใหญ่ถือว่าจำเป็นมาก…
  • [Xdebug] PHP Debug on Eclipse เซ็ตตัวดีบักเกอร์
    03/04/2014 - 0 Comments
    พูดถึงวิธีดีบักไฟล์ PHP ถ้าเป็นครั้งแรกที่เริ่มจับใหม่ๆมั่นใจเลยว่าหลายๆคนต้องเคย echo ค่าออกมาทีละบบรทัด…
  • เทคนิคง่ายๆในการแสดงข้อมูลประเภทการเงิน การบัญชี ใน SQL SERVER
    01/10/2015 - 0 Comments
    ในเรื่องเงินๆทองๆ หน่วยที่น้อยที่สุดคือ 1 สตางค์ (ทศนิยมสองตำแหน่งจะได้ 0.01) และ SQL SERVER…
  • วิธีการเป็น Administrator บน PC ของตัวเอง
    25/08/2013 - 0 Comments
    ผมว่าออกจะน่าขำไปสักนิด กับการที่เครื่องคอมพิวเตอร์ของตัวเองแท้ๆแต่กลับ log in เข้าใช้ได้เพียง User…
  • Doodle Rubik ตัวใหม่ของ Google เล่นกันละยัง
    18/05/2014 - 0 Comments
    วันนี้ 19/5 เข้าหน้ากูเกิ้ลแล้วเจอ Doodle ตัวใหม่ เป็นรูบิค 3x3…
  • เช็คราคาเที่ยวบินจบในคลิกเดียวด้วย Selenium IDE ใช้เวลาแค่ 3 วิ
    22/06/2017 - 0 Comments
    เวลาวางแผนไปเที่ยวต่างจังหวัดหรือต่างประเทศ มันต้องมีอารมณ์ต้องเข้าไปเช็คที่พัก…