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,038

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


 

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

 
Topic : 108126



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

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

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


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

Code (SQL)
1.DROP PROCEDURE IF EXISTS spEMPLOYEE$$
2.CREATE PROCEDURE spEMPLOYEE()
3.BEGIN
4.SELECT * FROM EMPLOYEE where '1'='1';
5.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 : 1897 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)
01.DELIMITER $$
02.CREATE PROCEDURE CountOrderByStatus(
03.         IN orderStatus VARCHAR(25),
04.         OUT total INT)
05.BEGIN
06.    SELECT count(orderNumber)
07.    INTO total
08.    FROM orders
09.    WHERE status = orderStatus;
10.END$$
11.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)
1.CALL CountOrderByStatus('Shipped', @total);
2.SELECT @total;


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

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

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

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

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

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


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

Code (C#)
01.// สร้าง Function GetTotal ทำการ Return Integer กลับมา โดยส่ง status เข้าไป
02.public int GetTotal(string status)
03.{
04.    int totalResult = 0;
05. 
06.    using (MySqlConnection conn = new MySqlConnection("connection string ต่อฐานข้อมูลนะครับ"))
07.    // สังเกตบรรทัดล่างนะครับ สร้าง MySqlCommand แต่โยนชื่อ Store Procedure เข้าไปเลยนะครับ
08.    using (MySqlCommand cmd = new MySqlCommand("CountOrderByStatus", conn))
09.    {
10.        // จุดนี้สำคัญ กำหนด CommandType เป็น Store Procedure
11.        cmd.CommandType = CommandType.StoredProcedure;
12. 
13.        // ตรงนี้ก็สำคัญ ส่งค่าล้อตามพารามิเตอร์ที่สร้างไว้ เป็น input parameter
14.        // ข้อกำหนดคือถ้าเป็น MySQL ชื่อพารามิเตอร์ต้องใส่ ? เข้าไปข้างหน้าชื่อ แต่ถ้าเป็นฐานข้อมูลอื่นให้ใช้ @
15.        cmd.Parameters.AddWithValue("?orderStatus", status);
16.        cmd.Parameters["?orderStatus"].Direction = ParameterDirection.Input;
17. 
18.        // อย่าลืมกำหนด parameter out ด้วย ทุกครั้งต้องกำหนดพารามิเตอร์ให้ครบทุกชนิดนะครับ
19.        // อันนี้เป็น out ที่จะออกมาเป็น int ก็กำหนดไปดังคำสั่งข้างล่าง
20.        cmd.Parameters.Add(new MySqlParameter("?total", MySqlDbType.Int32));
21.        cmd.Parameters["?total"].Direction = ParameterDirection.Output;
22. 
23.        // เปิด Connection
24.        conn.Open();
25.         
26.        // ทำการ Execute คำสั่ง Store Procedure
27.        cmd.ExecuteNonQuery();
28. 
29.        // ปิด Connection
30.        conn.Close();
31. 
32.        // จะได้ของออกมาตรงนี้
33.        totalResult = (int)cmd.Parameters["?total"].Value;
34.    }
35. 
36.    return totalResult;
37.}


วิธีเรียก Function

Code (C#)
1.// ทดสอบการเรียกเข้าไปทำงาน Store Procedure แล้วผ่านค่ากลับมาที่ Textbox1
2.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 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





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