- ArrayList
:on :09 March 2005
ArrayList Collection
เป็น Collection ที่ใช้จัดเก็บข้อมูลแบบเรียงลำดับ ที่แต่ละสมาชิกจะถูกกำกับด้วยลำดับที่ที่ปรากฏภายใน Collection ดังนั้นในการเรียกใช้สมาชิกภายใน Collection นี้ จึงต้องระบุถึงลำดับที่ของสมาชิกที่ต้องการใช้งานทุกครั้ง
- Hashtable
:on :09 March 2005
Hashtable Collection เป็น Collection ที่ใช้ในการจัดเก็บข้อมูลแบบเรียงลำดับเช่นเดียวกับ ArrayList เพียงแต่ แต่ละสมาชิกจะถูกกำกับด้วยชื่อของสมาชิกแทน ดังนั้นการเรียกใช้สมาชิกภายใน Collection นี้จึงต้องระบุ ถึงชื่อของสมาชิกที่ต้องการใช้งานแทน สำหรับลำดับที่ที่ปรากฏภายใน Collection จะเรียงตามลำดับการจัดเก็บ
- Sortedlist
:on :09 March 2005
Sortedlist Collection
เป็น Collection ที่นำเอาคุณลักษณะของ ArrayList และ HashTable มารวมกัน ดังนั้นการเรียกใช้งานสมาชิกภายใน Collection นี้ จึงสามารถระบุได้ทั้งลำดับที่หรือชื่อของสมาชิก
- การรับส่งข้อมูลระหว่าง Browser และ Web Server
:on :09 March 2005
การรับส่งข้อมูลระหว่าง Browser และ Web Server
การนำเอาข้อมูลที่ป้อนไว้ใน Control ต่างๆ จากหน้าจอมาประมวลผลในโปรแกรม Server-Side Script จริงๆแล้วเป็นการทำงานตามแนวคิดของ Client/Server หรือกล่าวอีกนัยหนึ่งคือ เป็นการทำงานร่วมกัน ระหว่าง Client และ Server โดย Client จะได้แก่ โปรแกรม Browser ส่วน Server จะได้แก่ โปรแกรม Web Server ดังนั้นในการศึกษาถึงวิธีการต่างๆที่จะนำเอาข้อมูลที่ป้อนไว้ไปประมวลผลได้นั้น จำเป็นอย่างยิ่งที่จะต้องรู้จักรูปแบบและวิธีการส่งข้อมูลของ Browser ไปยัง Web Server
- QueryString
:on :09 March 2005
Object "Request" เป็น Object ที่ทำหน้าที่ในการรับข้อมูลจาก Control และฟอร์มต่างๆ จากเครื่อง Client เพื่อส่งไปยัง Web Server โดยที่ Object "Request" นี้จะมี Collection ที่ใช้งานอยู่ 2 Collection ด้วยกันคือ "QueryString" และ "Form"
- Collection "Form"
:on :10 March 2005
Collection "Form" เป็น Collection ที่มีหน้าที่จัดเก็บข้อมูลของ Control ต่างๆ ที่กำหนดอยู่ภายใน Tag "Form" ซึ่งถูกส่งออกจาก Browser ไปยัง Web Server ในรูปแบบของ Request เช่นเดียวกันกับ QueryString
- การอ่านข้อมูลใน Control จาก Property
:on :10 March 2005
ข้อจำกัดข้อหนึ่งสำหรับ Web Page ที่พัฒนาโดยใช้ ASP ก็คือ Element ที่กำหนดขึ้นใช้งานบน Page ไม่สามารถจัดเก็บค่าที่ได้กำหนดให้กับ Element ต่างๆที่เกิดขึ้นในการเรียกใช้ Page ก่อนหน้าไว้ได้
ดังนั้นในการอ่านข้อมูลที่ผู้ใช้กำหนดไว้ใน Element ต่างๆที่ถูกส่งจาก Browser มายัง Web Server จึงต้องอาศัย Object "Request"
แต่สำหรับ ASP.NET เนื่องจากได้นำเอา ASP.NET Server Control เข้ามาใช้งานแทน Element ที่กำหนดขึ้นจาก HTML Tag จึงส่งผลให้การอ่านข้อมูลที่ผู้ใช้กำหนดไว้ใน Control ต่างๆที่ถูกส่งจาก Browser มายัง Web Server นอกเหนือจากการใช้ Object "Request" แล้ว ถ้าใช้ ASP.NET Server Control ในการสร้าง เรายังสามารถอ่านข้อมูลที่ผู้ใช้กำหนดไว้ใน Control จาก Property ได้โดยตรงอีกดัวย ซึ่งแต่ละ Control ก็มี Property ที่ใช้อ่านค่าต่างๆ กันไปดังนี้
ALTER TABLE [dbo].[image] WITH NOCHECK ADD CONSTRAINT [PK_image] PRIMARY KEY NONCLUSTERED ( [img_pk] ) ON [PRIMARY] GO สำหรับตารางนี้ไม่ต้องสร้างก็ได้ ถ้าคุณใช้ในส่วนของ Upload ไปแล้วเพราะตารางเหมือนกัน ################################################################### ################################################################### TestImage.aspx <html> <head><title>View Image from the database</title></head> <body bgcolor=#FFFFFF> Here is the image, viewed from a database:<br /> <img src="viewimage.aspx?img=1" border=1> </body> </html> ไฟล์นี่เอาไว้ใช้เรียกรูปภาพจากฐานข้อมูลมาแสดงโดยใช้การเรียกตามหมายเลข id จากไฟล์ viewimage.aspx ################################################################### ################################################################### ViewImage.aspx
<%@ Page language="c#" Src="ViewImage.aspx.cs" Inherits="DBImages.ViewImage" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html> <head></head> <body> <form id="ViewImage" method="post" runat="server"></form> </body> </html>
สำหรับไฟล์ viewimage.aspx ก็จะเรียกค่ามาจาก ViewImage.aspx.csอีกทีหนึ่งโดยเรียกออกมาในลักษณะของ form
################################################################### ################################################################### ViewImage.aspx.cs (CodeBehind file) using System; using System.Collections; using System.Configuration; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace DBImages { /// <summary> /// Summary description for ViewImage. /// </summary> public class ViewImage : System.Web.UI.Page { public ViewImage() { } private void Page_Load(object sender, System.EventArgs e) { //get the image id from the url string ImageId = Request.QueryString["img"]; //build our query statement string sqlText = "SELECT img_data, img_contenttype FROM Image WHERE img_pk = " + ImageId; SqlConnection connection = new SqlConnection( ConfigurationSettings.AppSettings["DSN"].ToString() ); SqlCommand command = new SqlCommand( sqlText, connection); //open the database and get a datareader connection.Open(); SqlDataReader dr = command.ExecuteReader(); if ( dr.Read()) //yup we found our image { Response.ContentType = dr["img_contenttype"].ToString(); Response.BinaryWrite( (byte[]) dr["img_data"] ); } connection.Close(); } } } สำหรับไฟล์ นี้จะเป็นไฟล์ที่ทำหน้าที่ดึงข้อมูลที่ถูกแปลงจาก Binary เป็น Byte เพื่อเก็บเข้าฐานข้อมูล และเวลาจะเอาออกมาก็จะแปลงกลับจาก Byte เป็น Binary
จากปัญหาที่หลายๆคนบ่นกันมาตลอดถึงข้อด้อยของ ASP ก็คือการที่จะทำอะไรแล้วก็ต้องพึ่งคอมโพเนนท์ ซึ่งถ้าไม่มีคอมโพเนนท์คอยช่วย ASP ก็เหมือนคนที่แต่งตัวแล้วแต่ไม่ใส่เครื่องประดับ
สำหรับคอมโพเนนท์ที่ใช้กับ ASP ในส่วนมากจะเป็นการกระทำ 2 อย่างคือ การส่งเมลล์และการอัพโหลดโดยส่วนใหญ่จะอยู่ที่การอัพโหลดซะมากกว่า สำหรับตัวอย่างนี้เราจะมาใช้ประโยชน์ของ Scripting.FileSystemObject คิดว่าหลายคนคงยังไม่ลืมจะว่ามันคืออะไร แต่เราจะมาใช้ประโยชน์จากมันนี่แหละในการเขียนคำสั่งอัพโหลดโดยไม่ต้องไปหาคอมโพเนนท์ของค่ายต่างๆมาช่วยเลยตามตัวอย่างนี้ครับ
uploadFile.asp (ส่วนของการรับค่าและอัพโหลดสู่ Server) <% @language="vbscript" %> <% Option Explicit %> <% Server.ScriptTimeout = 5400 Dim postedData, binData, counter, contentType, errorMsg Dim boundary, formData, uploadRequest Dim fso, browserType, startPos, endPos Dim filePath, fileName, savePath, savefile, fileCount Dim requestFiles(9, 1) ' Allow for ten files Dim strFileUploadPath Dim Num Dim strResNewCode strFileUploadPath = "message"
binData = Request.BinaryRead(Request.TotalBytes) For counter = 1 To LenB(binData) postedData = postedData & Chr(AscB(MidB(binData, counter, 1))) Next
End If ' สุคค่าตัวเลขเพื่อเปลี่ยนชื่อไฟล์ในกรณีที่อัพโหลดชื่อไฟล์ไปซ้ำกัน Randomize Num = Int(654892011602*Rnd+44923568) strResNewCode="ASPThai"+CStr(Num)+"422"
filePath = strFileUploadPath &"/" & fileName ' ทำการค้นหาในโฟลเดอร์ที่จะอัพโหลดว่ามีชื่อไฟล์ที่ซ้ำกับไฟล์ที่ส่งเข้ามาใหม่หรือไม่ ถ้ามีให้เปลี่ยนชื่อไฟล์ที่ส่งมาใหม่ If fso.FileExists(Server.MapPath( filePath)) = True Then fileName = strResNewCode & "_" & fileName End If
filePath = strFileUploadPath &"/" & fileName
' เริ่มทำการเซฟข้อมูลด้วหลักการ อ่านข้อมูลและสร้างขึ้นใหม่ savePath = Server.MapPath(filePath) Set saveFile = fso.CreateTextFile(savePath, True) saveFile.Write(requestFiles(counter, 0)) saveFile.Close Next
Set saveFile = Nothing Set fso = Nothing Set uploadRequest = Nothing If errorMsg = "" Then Response.Write "<br>File Upload completed successfully.</p>" Else Response.Write "<br>An error occured - " & errorMsg & "</p>" End If %> </body> </html> <%
Private Sub parseFormData() Dim counter, endMarker, fieldInfo, fieldValue For counter = 0 To UBound(formData) endMarker = InStr(formData(counter), vbCrLf & vbCrLf) If endMarker > 0 Then