ASP การบรรยายที่ 6: ASP และฐานข้อมูล (1)
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-05-30 19:55:05
ในการบรรยายครั้งก่อน เราได้เรียนรู้เนื้อหาพื้นฐานของ ASP ด้วยการใช้ความรู้นี้อย่างยืดหยุ่น คุณสามารถใช้ ASP เพื่อสร้างเว็บไซต์ได้แล้ว แต่โดยทั่วไปแล้ว เว็บไซต์ที่แท้จริงและสมบูรณ์ไม่สามารถแยกออกจากฐานข้อมูลได้ เนื่องจากข้อมูลจำนวนเล็กน้อย เช่น จำนวนผู้เยี่ยมชมหน้าเว็บ สามารถจัดเก็บไว้ในไฟล์ข้อความได้ แต่ในการใช้งานจริง ข้อมูลที่จำเป็นต้องมี ที่บันทึกไว้มีมากกว่านี้มาก ทีละนิด และข้อมูลเหล่านี้มักจะเกี่ยวข้องกัน การใช้ฐานข้อมูลเพื่อจัดการข้อมูลเหล่านี้สามารถสืบค้นและอัปเดตได้อย่างง่ายดาย ฐานข้อมูลมีหลายประเภท เช่น ฐานข้อมูล Fox (.dbf), ฐานข้อมูล Access (.mdb), Informix, Oracle และ SQL Server เป็นต้น ในการบรรยายนี้ ผมจะใช้ฐานข้อมูล Microsoft Access และ SQL Server 7.0 เป็นตัวอย่างในการ แสดง ASP วิธีการเข้าถึงฐานข้อมูล ทำไมต้องเลือกเอเอสพี? สถิติแสดงให้เห็นว่าปัจจุบัน SQL Server 7.0 เป็นฐานข้อมูลที่รวดเร็วและคุ้มค่าที่สุด และเว็บไซต์ขนาดใหญ่หลายแห่ง เช่น www.8848.net, www.dell.com, www.hotbot.com ถูกสร้างขึ้นโดยใช้เทคโนโลยี ASP ดังนั้น ASP จึงเป็น เป็นเทคโนโลยีที่ค่อนข้างง่ายที่จะเชี่ยวชาญและใช้งานได้จริง คุณควรพยายามเข้าถึงมัน ทำความเข้าใจ แล้วใช้มันด้วยความมั่นใจและความกล้าหาญ
ควรเตรียมอะไรบ้างก่อนการศึกษาต่อ:
1. หากคุณไม่เคยติดต่อกับฐานข้อมูลมาก่อน ขอแนะนำให้ติดตั้ง Microsoft Access ใน Office ก่อน และเรียนรู้ความรู้พื้นฐานของฐานข้อมูล
2. วิธีที่ดีที่สุดคือติดตั้ง Microsoft SQL Server 7.0 เมื่อติดตั้งแล้วจะสามารถใช้งานได้ทันทีโดยไม่ต้องตั้งค่าใดๆ โปรดทราบว่าควรติดตั้งเวอร์ชัน DeskTop ใน Windows 9.x ในขณะที่เวอร์ชันก่อน 7.0 สามารถติดตั้งได้ใน NT Server เท่านั้น
3. เนื้อหาที่กล่าวถึงต่อไปจำเป็นต้องมีส่วนประกอบที่เรียกว่า MDAC (Microsoft Data Access Components) ส่วนประกอบนี้รวมอยู่ใน ASP แล้ว หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับเนื้อหาที่เกี่ยวข้อง หรือดาวน์โหลดเวอร์ชันล่าสุด คุณสามารถไปที่ http:// www. microsoft.com/data
1. การสร้างการเชื่อมต่อกับฐานข้อมูล ก่อนที่จะเริ่มต้นอย่างเป็นทางการ ให้ฉันแนะนำ ADO - ActiveX Data Objects หากคุณยังใหม่ต่อแนวคิดนี้ คุณเพียงแค่ต้องคิดว่า ADO เป็นสะพานเชื่อมระหว่าง ASP และฐานข้อมูล
(1) วิธีที่ 1 เพื่อสร้างการเชื่อมต่อกับฐานข้อมูล Microsoft Access: ตัวอย่าง wuf40.asp
<% @LANGUAGE = VBScript %>
<% ' wuf40.asp
ตัวเลือกที่ชัดเจน
ดิมซีเอ็นน์, StrCnn
' 1 - สร้างวัตถุการเชื่อมต่อ
ตั้งค่า Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "ไดรเวอร์={ไดรเวอร์ Microsoft Access (*.mdb)}; DBQ=" & Server.MapPath("asp") & "NorthWind.mdb;"
'2 - เปิดฐานข้อมูลโดยใช้วิธีการเปิดของวัตถุการเชื่อมต่อ
Cnn.เปิด StrCnn
Response.Write Server.MapPath("asp") & "NorthWind.mdb;" & "<br>"
Response.Write "การเชื่อมต่อฐานข้อมูลสำเร็จ: " & Cnn.State & "<br>"
'3 - ปิดการเชื่อมต่อโดยใช้วิธีปิดของออบเจ็กต์การเชื่อมต่อ
ซีเอ็น.ปิด
Response.Write "ฐานข้อมูลถูกปิดแล้ว: " & Cnn.State
'4 - ลบวัตถุการเชื่อมต่อออกจากหน่วยความจำเพื่อปล่อยทรัพยากร
ตั้งค่า Cnn = ไม่มีเลย
-
Northwind.mdb เป็นฐานข้อมูลตัวอย่างที่มาพร้อมกับ Microsoft Access97 โดยปกติแล้วจะอยู่ในไดเร็กทอรี "Microsoft OfficeOfficeSamples" คุณสามารถค้นหาได้ด้วยตัวเอง จากนั้นคัดลอกไฟล์นี้ไปยังไดเร็กทอรีที่เกี่ยวข้องของเว็บเซิร์ฟเวอร์ (ใน this เช่น ใส่ไว้ใน C :InetPubhomeasp)
ที่นี่ เมธอด MapPath ของวัตถุเซิร์ฟเวอร์แปลงเส้นทางเสมือนที่ระบุเป็นเส้นทางไฟล์จริง และผลลัพธ์สุดท้ายจะคล้ายกับ: C:InetPubhomeaspNorthwind.mdb
วิธีที่ 2: ใช้ OLE DB เพื่อสร้างการเชื่อมต่อ Microsoft Access ส่วนสำคัญแสดงอยู่ด้านล่าง
ตั้งค่า Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "ผู้ให้บริการ = Microsoft.Jet.OLEDB.4.0; แหล่งข้อมูล = C:InetpubhomeaspNorthwind.mdb"
Cnn.เปิด StrCnn
(2) วิธีที่ 1 เพื่อสร้างการเชื่อมต่อกับฐานข้อมูล SQL Server: ใช้ OLE DB เพื่อเชื่อมต่อกับ SQL Server สำหรับรายละเอียด โปรดดูรูทีน wuf41.asp
ตั้งค่า Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider=sqloledb; ID ผู้ใช้=sa; รหัสผ่าน=; แค็ตตาล็อกเริ่มต้น=pubs; แหล่งข้อมูล=ICBCZJP"
Cnn.เปิด StrCnn
ระบุชื่อฐานข้อมูลหลัง Initial Catalog และชื่อเครื่องหลัง Data Source (นั่นคือ ชื่อคอมพิวเตอร์ใน Network → Properties → Identity) หรือที่อยู่ IP (จำเป็นต้องติดตั้งบริการ DNS)
วิธีที่สอง:
ตั้งค่า Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "ไดรเวอร์={SQL Server};Server=ICBCZJP;UID=sa;PWD=;ฐานข้อมูล=pubs"
Cnn.เปิด StrCnn
นอกเหนือจากสองวิธีข้างต้นแล้ว แน่นอนว่าคุณยังสามารถใช้วิธีที่คลาสสิกที่สุดที่นำมาใช้ในบทความและสื่อต่างๆ มากมาย: การใช้ ODBC เพื่อสร้างการเชื่อมต่อ นั่นคือการสร้างการเชื่อมต่อใน "แหล่งข้อมูล ODBC" ในแผงควบคุมเว็บเซิร์ฟเวอร์ก่อน จากนั้นใช้สตริงการเชื่อมต่อที่คล้ายกับ "StrCnn ="DSN=ADOCnn; UID = sa;PWD=;Database=pubs"" ใน ASP . ฉันจะไม่แนะนำโดยละเอียดที่นี่ ประการแรก นี่ไม่ใช่วิธีที่ดีที่สุด ประการที่สอง วัสดุอื่นได้แนะนำวิธีนี้
นอกจากนี้ หากคุณสนใจ คุณสามารถดาวน์โหลดรูทีน wuf42.asp เพื่อดูวิธีใช้คุณสมบัติ ConnectionTimeout และ ConnectionString ของอ็อบเจ็กต์ Connection
2. ฐานข้อมูลเริ่มต้นที่นี่ - การดึงข้อมูลที่มีอยู่แล้วในฐานข้อมูล ตอนนี้ถือว่าคุณมีความรู้ฐานข้อมูลพื้นฐานที่สุดแล้วและรู้วิธีใช้ Microsoft Access เพื่อเปิดตาราง "Shipper" ใน Northwind.mdb และดู ข้อมูลที่เก็บอยู่ในตารางบางส่วน ตอนนี้คำถามคือจะใช้ ASP เพื่อแสดงข้อมูลนี้ในเบราว์เซอร์ได้อย่างไร ต่อไปนี้เป็นสามวิธี
คำเตือนพิเศษ: หากรากฐานฐานข้อมูลของคุณอ่อนแอ คุณจะต้องใช้วิธีที่สองเท่านั้น อย่าโลภเพื่อหลีกเลี่ยงการไปไกลเกินไป ดังนั้นจำไว้! จดจำ!
วิธีที่ 1: ใช้วัตถุการเชื่อมต่อเท่านั้น ตัวอย่าง wuf43.asp
<% @LANGUAGE = VBScript %>
<% ' wuf43.asp
ตัวเลือกที่ชัดเจน
'ประโยคนี้มีความสำคัญมาก สามารถมั่นใจได้ว่าข้อมูลที่คุณเห็นไม่ใช่ข้อมูลที่แคชไว้บนไคลเอนต์
'แต่ข้อมูลล่าสุดจะอัพเดทได้ตลอดเวลาทางฝั่งเซิร์ฟเวอร์
การตอบกลับหมดอายุ = 0
'ส่วนที่ 1: การสร้างการเชื่อมต่อ
ดิมซีเอ็นน์, StrCnn
ตั้งค่า Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "ผู้ให้บริการ = Microsoft.Jet.OLEDB.4.0; แหล่งข้อมูล = C:InetpubhomeaspNorthwind.mdb"
Cnn.เปิด StrCnn
'ส่วนที่ 2: ใช้วิธีการดำเนินการของวัตถุการเชื่อมต่อเพื่อรับชุดระเบียน
หรี่ StrSQL, rsTest
'ต่อไปนี้เป็นคำสั่ง SQL (คำสั่งสืบค้นแบบมีโครงสร้าง) ซึ่งจะไม่มีการกล่าวถึงโดยละเอียดในการบรรยายนี้ ขอแนะนำให้อ่านหนังสือเล่มนี้ การใช้งานขั้นพื้นฐานค่อนข้างง่าย และคุณสามารถเรียนรู้ได้เมื่อคุณเรียนรู้แล้ว
'ประโยคนี้หมายถึงการเลือกข้อมูลทั้งหมดจากตารางผู้ให้บริการ
StrSQL = "เลือก * จากผู้จัดส่ง"
ตั้งค่า rsTest = Cnn.Execute(StrSQL)
-
<HTML>
<ร่างกาย>
<% 'ส่วนที่ 3: แสดงชุดบันทึกที่ได้รับบนเบราว์เซอร์
'วนซ้ำไปที่จุดสิ้นสุดของบันทึก - แสดงทีละบรรทัด บันทึกต่อบันทึก
ทำในขณะที่ไม่ใช่ rsTest.EOF
'สองบรรทัดต่อไปนี้มีผลเหมือนกัน กล่าวคือ rsTest("รหัสผู้จัดส่ง") เทียบเท่ากับ rsTest(0)
Response.เขียน rsTest("รหัสผู้จัดส่ง") & " " & rsTest("ชื่อบริษัท") & " " & rsTest("โทรศัพท์") & " " & "<BR>"
'การตอบสนองเขียน rsTest (0) & " " & rsTest (1) & " " & rsTest (2) & " " & "<BR>"
'ย้ายไปยังบันทึกถัดไป - ประโยคนี้จะต้องไม่ละเว้น ไม่เช่นนั้นจะตกอยู่ในวงวนไม่สิ้นสุด
rsTest.MoveNext
วนซ้ำ
ตอนที่ 4: ทำความสะอาดสนามรบ
ซีเอ็น.ปิด
ตั้งค่า rsTest = ไม่มีเลย: ตั้งค่า Cnn = ไม่มีเลย
-
</ร่างกาย>
</HTML>
ตัวอย่างนี้ง่ายมาก ส่วนที่สามจะแสดงข้อมูลในรูปแบบเอาต์พุตทั่วไปของฐานข้อมูล คุณสามารถอ้างอิงถึงความรู้ที่คุณได้เรียนรู้มาก่อนและเพิ่มตารางและสีเพื่อทำให้ผลลัพธ์ออกมาสวยงาม
ผู้ใช้ที่ไม่ใช่รุ่นน้องสามารถอ้างอิงถึง wuf44.asp เพื่อดูการใช้งานวิธี Execute โดยสมบูรณ์
วิธีที่ 2: โดยการสร้างวัตถุ Recordset - โปรดจำไว้ว่าผู้เริ่มต้นจำเป็นต้องเชี่ยวชาญวิธีนี้เท่านั้น
ตัวอย่าง: wuf45.asp ส่วนอื่นๆ จะเหมือนกับ wuf43.asp คีย์อยู่ที่ส่วนที่สองของโปรแกรม
'ส่วนที่ 2: รับชุดระเบียนโดยการสร้างวัตถุชุดระเบียน
หรี่ StrSQL, rsTest
'สร้างวัตถุชุดระเบียน
ตั้งค่า rsTest = Server.CreateObject("ADODB.Recordset")
StrSQL = "เลือก ID ผู้ให้บริการ หมายเลขโทรศัพท์ ชื่อบริษัท จากผู้ให้บริการ โดยที่หมายเลขโทรศัพท์ = '(503) 555-9931'"
'แนบวัตถุ Recordset กับการเชื่อมต่อ Cnn
ตั้งค่า rsTest.ActiveConnection = Cnn
'เปิดชุดระเบียนโดยใช้วิธีการเปิดของวัตถุชุดระเบียน
rsTest.เปิด StrSQL
ตอนนี้เรามาดูการใช้งานที่สมบูรณ์ของเมธอด Open ของอ็อบเจ็กต์ Recordset เช่น wuf48.asp
<% @LANGUAGE = VBScript %>
<% ' wuf48.asp
ตัวเลือกที่ชัดเจน
การตอบกลับหมดอายุ = 0
-
<!--#include file="adovbs.inc"-->
-
'ส่วนที่ 1: การสร้างการเชื่อมต่อ
ดิมซีเอ็นน์, StrCnn
ตั้งค่า Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "ผู้ให้บริการ = Microsoft.Jet.OLEDB.4.0; แหล่งข้อมูล = C:InetpubhomeaspNorthwind.mdb"
Cnn.เปิด StrCnn
'ส่วนที่ 2: รับชุดระเบียนโดยการสร้างวัตถุ RecordSet
การทดสอบติ่มซำ
ตั้งค่า rsTest = Server.CreateObject("ADODB.Recordset")
rsTest.Open "ผู้จัดส่ง",Cnn,adOpenForwardOnly,adLockReadOnly,adCmdTable
-
<HTML>
<ร่างกาย>
<% 'ส่วนที่ 3: แสดงชุดบันทึกที่ได้รับบนเบราว์เซอร์
ทำในขณะที่ไม่ใช่ rsTest.EOF
การตอบสนองเขียน rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
วนซ้ำ
ตอนที่ 4: ทำความสะอาดสนามรบ
rsTest.Close: Cnn.ปิด
ตั้งค่า rsTest = ไม่มีเลย: ตั้งค่า Cnn = ไม่มีเลย
-
</ร่างกาย>
</HTML>
วิเคราะห์:
1. ดูประโยคสำคัญก่อน:
rsTest.Open "ผู้จัดส่ง",Cnn,adOpenForwardOnly,adLockReadOnly,adCmdTable
พารามิเตอร์แรกอาจเป็นชื่อตาราง (เช่น: ผู้ส่งสินค้า) หรือคำสั่ง SQL (เช่น wuf45.asp)
พารามิเตอร์ที่สองระบุการเชื่อมต่อปัจจุบัน
พารามิเตอร์ที่สามระบุ CursorType ซึ่งกำหนดประเภทของเคอร์เซอร์ที่ผู้ให้บริการควรใช้เมื่อเปิดชุดระเบียน ซึ่งใช้เคอร์เซอร์ที่เลื่อนไปข้างหน้าเท่านั้น
พารามิเตอร์ที่สี่ระบุ LockType ซึ่งกำหนดประเภทของการล็อค (การทำงานพร้อมกัน) ที่ผู้ให้บริการควรใช้เมื่อเปิดชุดระเบียน ระบุอ่านอย่างเดียวที่นี่
พารามิเตอร์ตัวที่ห้าเกี่ยวข้องกับพารามิเตอร์ตัวแรก หากพารามิเตอร์แรกในตัวอย่างนี้คือชื่อตาราง พารามิเตอร์ตัวที่ห้าจะใช้ adCmdTable หากพารามิเตอร์ตัวแรกคือคำสั่ง SQL พารามิเตอร์ตัวแรกจะเป็น adCmdText เช่น:
rsTest.Open "เลือก * จากผู้ให้บริการ",Cnn,adOpenForwardOnly,adLockReadOnly,adCmdText
ฉันไม่คิดว่าคนส่วนใหญ่จะเข้าใจความหมายของพารามิเตอร์ทั้งห้านี้ได้จริงๆ ในตอนแรก เพียงแค่คัดลอกและใช้พวกมัน ในอนาคต เราจะยังคงติดต่อกันต่อไป และเราจะเป็น สมบูรณ์แบบเมื่อเราคุ้นเคยกับมัน
พารามิเตอร์ทั้งสอง CursorType และ LockType จะอธิบายโดยละเอียดด้านล่าง เพียงเพื่อดึงข้อมูล คุณจะต้องตั้งค่าตามตัวอย่างนี้เท่านั้น
2. พารามิเตอร์ทั้งห้านี้สามารถตั้งค่าได้โดยใช้คุณสมบัติของวัตถุ Recordset เช่น wuf46.asp
'ส่วนที่ 2: รับชุดระเบียนโดยการสร้างวัตถุชุดระเบียน
การทดสอบติ่มซำ
ตั้งค่า rsTest = Server.CreateObject("ADODB.Recordset")
rsTest.ActiveConnection = CNN
rsTest.CursorType = adOpenForwardOnly
rsTest.LockType = adLockReadOnly
rsTest.Open "ผู้จัดส่ง", , , ,adCmdTable
3. ดูประโยคนี้อีกครั้ง: <!--#include file="adovbs.inc"-->
(1) เนื่องจากมีการใช้ค่าคงที่ เช่น adOpenForwardOnly, adLockReadOnly และ adCmdText จึงจำเป็นต้องรวมไฟล์ adovbs.inc
(2) ไฟล์ adovbs.inc โดยทั่วไปจะอยู่ในไดเร็กทอรี Program FilesCommon FilesSYSTEMADO คุณสามารถคัดลอกไปยังไดเร็กทอรีปัจจุบันของเว็บเซิร์ฟเวอร์ได้ (ไฟล์นี้รวมอยู่ในแพ็คเกจดาวน์โหลดสำหรับการบรรยายนี้ด้วย) .
(3) เปิดไฟล์นี้ด้วย Notepad แล้วลองดู แล้วคุณจะเข้าใจว่าเหตุใดจึงต้องใช้ไฟล์นี้
วิธีที่สาม: โดยการแนะนำวัตถุ Command - ควรศึกษาภายใต้สมมติฐานว่าคุณมีความสามารถ
<% @LANGUAGE = VBScript %>
<% ' wuf47.asp
ตัวเลือกที่ชัดเจน
การตอบกลับหมดอายุ = 0
-
<!--#include file="adovbs.inc"-->
-
'ส่วนที่ 1: การสร้างการเชื่อมต่อ
ดิมซีเอ็นน์, StrCnn
ตั้งค่า Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "ผู้ให้บริการ = Microsoft.Jet.OLEDB.4.0; แหล่งข้อมูล = C:InetpubhomeaspNorthwind.mdb"
Cnn.เปิด StrCnn
'ส่วนที่ 2: รับชุดระเบียนโดยการสร้างวัตถุ Command
หรี่ StrSQL, rsTest, cmdTest
'สร้างวัตถุคำสั่ง
ตั้งค่า cmdTest = Server.CreateObject("ADODB.Command")
StrSQL = "เลือกสูงสุด (ปริมาณ) จากรายละเอียดคำสั่งซื้อ"
cmdTest.CommandText = StrSQL
cmdTest.CommandType = adCmdText 'บ่งชี้ว่าประเภทคำสั่งเป็นคำสั่ง SQL
ตั้งค่า cmdTest.ActiveConnection = Cnn
'ใช้วิธีการดำเนินการของวัตถุคำสั่งเพื่อรับชุดระเบียน
ตั้งค่า rsTest = cmdTest.Execute
-
<HTML>
<ร่างกาย>
<% 'ส่วนที่ 3: แสดงชุดบันทึกที่ได้รับบนเบราว์เซอร์
ทำในขณะที่ไม่ใช่ rsTest.EOF
การตอบกลับเขียน rsTest(0) & "<BR>"
rsTest.MoveNext
วนซ้ำ
'ตอนที่ 4: ทำความสะอาดสนามรบ
rsTest.Close: Cnn.ปิด
Set rsTest = Nothing: Set cmdTest=Nothing: Set Cnn = Nothing
-
</ร่างกาย>
</HTML>
การใช้อ็อบเจ็กต์ Command จะมีการอธิบายในการเขียนโปรแกรมเชิงลึกของฐานข้อมูลในอนาคต
การบรรยายนี้แนะนำวิธีเชื่อมต่อกับฐานข้อมูลและดึงข้อมูลฐานข้อมูลเป็นหลัก ผู้เริ่มต้นจะสับสนเล็กน้อยอย่างหลีกเลี่ยงไม่ได้ คุณจะต้องเรียนรู้ประเด็นความรู้ต่อไปนี้:
1. วิธีใช้ OLE DB เพื่อสร้างการเชื่อมต่อกับฐานข้อมูล Microsoft Access
2. วิธีใช้ OLE DB เพื่อสร้างการเชื่อมต่อกับฐานข้อมูล Microsoft SQL Server
3. วิธีการดึงข้อมูลจากฐานข้อมูลโดยการสร้างวัตถุ Recordset