Saturday, October 17, 2009

ใช้ insert แบบ ใช้ Parameters เพื่อแก้ปัญหาการ add ตัวอักษร อัญประกาศ ( sigle quot )

ตอนนั้นทำระบบ E-Library

(asp.net (vb) , MS Sql server 2008, Microsoft visual studio )


แล้วเวลาที่ทำหน้าเพิ่มข้อมูลของหนังสือ

พบว่าจำเป็นจะต้องใช้ตัวอักษร อัญประกาศ หรือ sigle quot

อย่างเช่น คำว่า I'm making a difference จะใช้ replace ก็คงไม่เหมาะ

เคย search เจอที่เค้าแนะนำให้ใช้การ Insert ข้อมูลแบบ Parameters

ก็เลยเอามาใช้ แต่ก็ยังไม่รู้จนถึงตอนนี้ว่า ใช้วิธีใหนดีที่สุด

แปะโค๊ดเอาไว้ก่อนละกัน

Try
Dim strSql As String
strSql = "Insert Into elib_media(id,isbn,name,author,publisher,edition,years,pages,description,quantity,nameunit,id_mediatype,id_mediacategory,date_add)"
strSql += " Values(@Para1,@Para2,@Para3,@Para4,@Para5,@Para6,@Para7,@Para8,@Para9,@Para10,@Para11,@Para12,@Para13,@Para14)"
Dim cmd As New SqlCommand(strSql, conn)
cmd.Parameters.AddWithValue("@Para1", maxid)
cmd.Parameters.AddWithValue("@Para2", Trim(txtisbn.Text))
cmd.Parameters.AddWithValue("@Para3", Trim(txtname.Text))
cmd.Parameters.AddWithValue("@Para4", Trim(txtauthor.Text))
cmd.Parameters.AddWithValue("@Para5", Trim(txtpublisher.Text))
cmd.Parameters.AddWithValue("@Para6", Trim(txtedition.Text))
cmd.Parameters.AddWithValue("@Para7", Trim(txtyear.Text))
cmd.Parameters.AddWithValue("@Para8", Trim(txtpages.Text))
cmd.Parameters.AddWithValue("@Para9", Trim(txtdetail.Text))
cmd.Parameters.AddWithValue("@Para10", Trim(txtquantity.Text))
cmd.Parameters.AddWithValue("@Para11", Trim(txtnameunit.Text))
cmd.Parameters.AddWithValue("@Para12", Trim(ddltype.SelectedValue))
cmd.Parameters.AddWithValue("@Para13", Trim(ddlcate.SelectedValue))
cmd.Parameters.AddWithValue("@Para14", dateAdd)
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
Catch ex As Exception
If conn.State = ConnectionState.Open Then
conn.Close()
End If
Exit Sub
End Try

3 comments:

  1. มาแปะไว้ก่อนค่ะ บล็อกน่าสนใจมากเลยค่ะ
    ขอลิงค์ติดตามล่ะกันนะ

    ReplyDelete
  2. แนะนำให้ใช้แบบ Parameter ดีกว่้าครับ ข้อดีคือ
    1. ป้องกัน SQLInjection ได้อย่างกรณีที่น้องฝ้ายเจอปัญหาน่ะละครับ
    2. ความเร็วในการทำงาน กรณีที่ต้องมีการบันทึกหลายๆรายการ (วนลูปเพื่อบันทึกลงตาราง) เพราะ แบบ Parameter นั้นตัว Database สามารถทำ Cache SQL statement ได้ (น่าจะทำได้เกือบทุกตัวแล้วมั้งตอนนี้)
    3. การทำ Biding Parameter นั้นจะได้ Performance ที่ดีนั้นอยู่ที่การใช้ด้วยครับ
    เท่าที่รู้ก็เท่านี้ครับ ส่วนข้ออื่นๆรอท่านอื่นมาตอบละกัน

    ป.ล หากเป็น Java ละก็จะเรียกว่า PrepareStatement ซึ่งการใช้งานก็ไม่ต่างกันมาก แต่ Java ทำ Batch ได้ ไม่รู้ว่าทาง .net ทำอย่างไง

    ReplyDelete
  3. ขอบคุณทั้งสองความคิดเห็นนะคะ

    ReplyDelete

แวะเข้ามา ทักทายกันบ้างก็ได้ค่ะ