Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > .NET Framework > Forum > สอบถามวิธีการสร้าง Store Procedure แบบมีและไม่มีพารามิเตอร์ ใน MySql ครับ



 

สอบถามวิธีการสร้าง Store Procedure แบบมีและไม่มีพารามิเตอร์ ใน MySql ครับ

 



Topic : 108126



โพสกระทู้ ( 133 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook



ใช้ SELECT ธรรมดามานานแล้วครับ อยากเปลี่ยนเป็น Store แต่ งง อะครับ ผมใช้ MySql ครับ จะเขียนC# เรียก Store ใน MySql แต่สร้าง Store ยังไม่ทราบว่าถูกต้องหรือไม่ครับ ผมสร้าง Store โดยใช้ SQL อันนี้รันใน MySql เลยครับ (ถูกต้องหรือไม่ครับ)

Code (SQL)
DROP PROCEDURE IF EXISTS spEMPLOYEE$$
CREATE PROCEDURE spEMPLOYEE()
BEGIN
SELECT * FROM EMPLOYEE where '1'='1';
END$$


อยากทราบว่า Mysql เค้าสร้าง Store กันยังไงหรอครับ และ วิธีการเรียกใช้ใน C# แบบมีพารามิเตอร์อะไรแบบนี้อะครับ
(คำว่าพารามิเตอร์ที่ผมเข้าใจคือ WHERE อะไร ก็ว่าไปอย่างนั้นหรือเปล่าครับ)
ขอบคุณมากครับ



Tag : .NET, MySQL, C#, Windows









ประวัติการแก้ไข
2014-05-06 14:29:32
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-05-06 10:28:26 By : teerapat_kan View : 1825 Reply : 2
 

 

No. 1



โพสกระทู้ ( 154 )
บทความ ( 0 )



สถานะออฟไลน์


เป็นเรื่องที่ต้องอธิบายกันพอสมควรนะครับ

0. ก่อนเริ่มบททดสอบต้องปูพื้นการสร้าง Store Procedure กันก่อน ซึ่งสามารถเข้าไปเรียนรู้ได้ที่เว็บนี้

http://www.mysqltutorial.org
http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

เรียนตามหัวข้อถ้าทราบแล้วข้ามไป

  • Introduction to MySQL Stored Procedures

  • Getting Started with MySQL Stored Procedures

  • MySQL Stored Procedure Variables

  • MySQL Stored Procedure Parameters

  • MySQL IF Statement

  • MySQL CASE Statement

  • Hints for Choosing Between IF and CASE Statements

  • Loop in Stored Procedures

  • MySQL Cursor

  • Listing Stored Procedures in a MySQL Database

  • MySQL Error Handling in Stored Procedures

  • Raising Error Conditions with SIGNAL / RESIGNAL Statements

  • MySQL Stored Function



1. แรกเริ่มเลยนะครับการจะทำให้ C# ติดต่อกับ MySQL ได้ ต้องไปติดตั้ง MySQL Connector ก่อน จากที่นี้

http://dev.mysql.com/downloads/connector/net/

2. ทดลองสร้าง Store Procedure ใน MySQL แบบง่ายๆ ที่มีการส่งพารามิเตอร์เข้าไป (อ้างอิงตัวอย่างจากเว็บไซต์ข้อ 0)

Code (SQL)
DELIMITER $$
CREATE PROCEDURE CountOrderByStatus(
         IN orderStatus VARCHAR(25),
         OUT total INT)
BEGIN
    SELECT count(orderNumber)
    INTO total
    FROM orders
    WHERE status = orderStatus;
END$$
DELIMITER ;


อ่านดูก็เข้าใจได้ว่า
Store Procedure ตัวนี้มีชื่อว่า "CountOrderByStatus"
มีการรับค่าเพียง 1 ค่าคือ orderStatus เป็นชนิด VARCHAR(25) (string ใน C#)
มีการส่งค่ากลับเป็น INT (int ใน C#) ชื่อว่า total

ชุดคำสั่งคือ ทำการ Select จำนวน orderNumber เข้าไปใส่ที่ตัวแปร total จากตาราง orders โดยใช้เงื่อนไข status เท่ากับ orderStatus (ค่าที่ส่งเข้ามา) อ่านโปรแกรมกลับไปแบบนี้จะสามารถสร้างฐานข้อมูลตามโครงสร้างของตารางได้

ชื่อตาราง orders มีรายละเอียดดังนี้
===========================================
ฟิวล์ ชนิด
===========================================
id INT
orderNumber VARCHAR(30)
status VARCHAR(25)

ทำการ insert ข้อมูลเข้าไปแบบสุ่มแล้วลอง Run Store Procedure ตัวนี้ดู

Code (SQL)
CALL CountOrderByStatus('Shipped', @total);
SELECT @total;


ค่าที่ออกมาก็จะ Return กลับมาตามข้อมูลที่พบ ปรากฎที่ตัวแปร total ได้ค่าอะไรกลับมาก็ตามแต่ที่เราทำข้อมูลเข้าไป

สังเกตว่าเราได้สร้าง Store Procedure แล้ว ด้วยคำสั่ง CREATE PROCEDURE CountOrderByStatus ทำให้ Store Procedure ตัวนี้ไม่หายไปไหน สร้างเพียงครั้งเดียวนะครับ

3. ทดสอบเขียนโปรแกรม C# เพื่อติดต่อกับ Store Procedure

ข้อนี้ต้องติดตั้ง MySQL Connector จากข้อ 1 มาก่อน เพื่อเราจะได้ใช้งาน Component ของ MySQL ได้ยังไงละครับ

นำ MySQL เข้ามาใน Project แล้วอ้างอิงดังนี้

Code (C#)
using MySql.Data;
using MySql.Data.MySqlClient;


ผมจะไม่สร้างโปรเจคทั้งหมดให้นะครับ เอาเฉพาะฉากที่ต้องดึงค่ามาเลยแล้วกัน

Code (C#)
// สร้าง Function GetTotal ทำการ Return Integer กลับมา โดยส่ง status เข้าไป
public int GetTotal(string status)
{
    int totalResult = 0;

    using (MySqlConnection conn = new MySqlConnection("connection string ต่อฐานข้อมูลนะครับ"))
    // สังเกตบรรทัดล่างนะครับ สร้าง MySqlCommand แต่โยนชื่อ Store Procedure เข้าไปเลยนะครับ
    using (MySqlCommand cmd = new MySqlCommand("CountOrderByStatus", conn))
    {
        // จุดนี้สำคัญ กำหนด CommandType เป็น Store Procedure
        cmd.CommandType = CommandType.StoredProcedure;

        // ตรงนี้ก็สำคัญ ส่งค่าล้อตามพารามิเตอร์ที่สร้างไว้ เป็น input parameter
        // ข้อกำหนดคือถ้าเป็น MySQL ชื่อพารามิเตอร์ต้องใส่ ? เข้าไปข้างหน้าชื่อ แต่ถ้าเป็นฐานข้อมูลอื่นให้ใช้ @
        cmd.Parameters.AddWithValue("?orderStatus", status);
        cmd.Parameters["?orderStatus"].Direction = ParameterDirection.Input;

        // อย่าลืมกำหนด parameter out ด้วย ทุกครั้งต้องกำหนดพารามิเตอร์ให้ครบทุกชนิดนะครับ
        // อันนี้เป็น out ที่จะออกมาเป็น int ก็กำหนดไปดังคำสั่งข้างล่าง
        cmd.Parameters.Add(new MySqlParameter("?total", MySqlDbType.Int32));
        cmd.Parameters["?total"].Direction = ParameterDirection.Output;

        // เปิด Connection
        conn.Open();
        
        // ทำการ Execute คำสั่ง Store Procedure
        cmd.ExecuteNonQuery();

        // ปิด Connection
        conn.Close();

        // จะได้ของออกมาตรงนี้
        totalResult = (int)cmd.Parameters["?total"].Value;
    }

    return totalResult;
}


วิธีเรียก Function

Code (C#)
// ทดสอบการเรียกเข้าไปทำงาน Store Procedure แล้วผ่านค่ากลับมาที่ Textbox1
this.textbox1.Text = GetTotal("Shipped").ToString();


จบแล้วครับ ผมไม่ได้ลง Code จริง อาจมีติดบ้างเล็กน้อยตอน compiler ยังไงพยายาม compiler ให้ผ่าน ชี้ช่องให้ขนาดนี้แล้วต้องทำได้แน่นอนแล้วครับ โชคดีครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-05-06 17:53:10 By : gunnermontana
 


 

No. 2



โพสกระทู้ ( 133 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ขอบคุณมากเลยครับท่าน จะลองเริ่มศึกษาดู ถ้าติดยังไงจะมาปรึกษานะครับ _/\_
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-05-06 20:43:59 By : teerapat_kan
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามวิธีการสร้าง Store Procedure แบบมีและไม่มีพารามิเตอร์ ใน MySql ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่