ASP.NET(C#) การเพิ่มข้อมูลลง Database ด้วยแบบ statement prepare
หลังจากที่ดูตัวอย่างการดึงข้อมูลมาแสดงใน GridView แล้วมาครั้งนี้ดูการ insert หรือเพิ่มข้อมูลลงฐานข้อมูลบ้างว่ามีอะไร เริ่มแรกเหมือนทุกครั้งก็เปิด project หรือ website เริ่มต้น แล้วให้ทำการสร้างไฟล์ชื่อว่า prepare.aspx ตอนจากนั้นก็ให้ทำการสร้าง Label และ Textbox รวมไปถึง Button สร้างหน้า Form เพื่อเพิ่มข้อมูลในตาราง Shippers ในฐานข้อมูลตัวอย่าง Northwind โดการสร้าง Form นั้นจะลากจาก ToolBox หรือพิมโค้ดดังต่อไปนี้ก็ได้
[sourcecode language=”HTML”]
[/sourcecode]
เมื่อสร้าง Form เสร็จก็ให้ทำการเขียนโค้ดเมื่อกดปุ่ม Save โดยมีโค้ดดังนี้
[sourcecode language=”c#”]
SqlConnection conn = new SqlConnection(@”server=.\sqlexpress;integrated security=true;database=northwind”);
conn.Open();
string sqlString = “INSERT INTO Shippers(CompanyName, Phone) VALUES(@CompanyName, @Phone)”;
SqlCommand comm = new SqlCommand(sqlString, conn);
comm.Parameters.Add(“@CompanyName”, SqlDbType.NVarChar).Value = txtCompanyName.Text;
comm.Parameters.Add(“@Phone”, SqlDbType.NVarChar).Value = txtPhone.Text;
comm.ExecuteNonQuery();
Response.Write(“ADD”);
txtCompanyName.Text = “”;
txtPhone.Text = “”;
[/sourcecode]
เมื่อเขียนโค้ดเสร็จแล้วทำการบันทึกแล้วกด F5 หรือ CTRL+F5 ก็แล้วแต่จะแสดงหน้าจอแบบในรูป
เมื่อกดปุ่ม Save ข้อมูลจะถูกบันทึกลงฐานข้อมูล โดยใช้คำสั่ง SQL INSERT ข้อมูลก็จะอยู่ในฐานข้อมูล
จากโค้ดจะเห็นว่ามันก็เริ่มต้นด้วยการเชื่อมต่อ server database เมื่อบทความก่อนๆ เช่น ASP.NET(C#) การใช้งาน SqlDataReader กับ GridView
แต่ในครั้งนี้จะเป็นการสั่ง insert โดยมีการใช้ prepare statement คือการเตรียมคำสั่ง SQL ไว้ก่อนแล้วหลังจากนั้นก็จะค่อยส่งค่าเข้าไป วิธีนี้มีข้อดีตรงทีจะสามารถป้องกัน SQL Injection ได้ เพราะจะทำให้ไม่เกิดการ Query คำสั่งอันตรายเข้าไปกับค่าที่ส่งมา โดยการ prepare statement นั้นจะมีขั้นตอนดังนี้
เริ่มที่ มีตัวแปรเก็บคำสั่ง SQL เหมือนๆกันแต่จะมีการใช้เครื่องหมาย @ตามด้วยชื่อ parameter ที่ต้องการเช่น
string sqlString = “INSERT INTO Shippers(CompanyName, Phone) VALUES(@CompanyName, @Phone)”;
หลังจากนั้นเราก็กำหนดให้กับ SqlCommand
ต่อจากนั้นก็ใช้ คำสั่งแบบ comm.Parameters.Add(“@CompanyName”, SqlDbType.NVarChar).Value = txtCompanyName.Text;
จะเป็นการกำหนดค่าให้ parameter ที่มีชื่อว่า CompanyName โดยในฐานข้อมูลนั้นเก็บเป็น nvarchar เราก็ต้องใช้ SqlDbType.NVarChar ซึ่งตัว SqlDbTyp ก็จะมีชนิดข้อมูลแบบต่างๆให้เลือกเมื่อเรากำหนดเสร็จแล้วก็ทำการ ExecuteNonQuery หรือจะ Query ก็ตามแต่รูปแบบ SQL ก็เป็นอันว่าเสร็จสิ้น แต่อย่าลืม
using System.Data;
using System.Data.SqlClient;
ก่อนจะทำงานเชื่อมต่อกับ database นะครับ