<asp:AccessDataSource> ID = "ชื่อแหล่งที่มาของฉัน" Runat = "เซิร์ฟเวอร์" DataFile = "MyMDBName.mdb" SelectCommand="เลือก MyField1, MyField2 จาก MyTable"> </asp:AccessDataSource> |
<html> <หัว> <หัวข้อ><TIO ch02-1 แสดงข้อมูล MDB</หัวข้อ> <หัว> <ร่างกาย> <h3>ch02 TIO 2 การสาธิตการเชื่อมต่อกับแหล่ง MDB </h3> <ร่างกาย> </html> |
<%@ ภาษาหน้า = "VB" %> <html> <head><title><ch02 TIO 2 แสดงข้อมูล MDB</title></head> <ร่างกาย> <h3>ch02 TIO 2 การสาธิตการเชื่อมต่อกับแหล่ง MDB </h3> <แบบฟอร์ม runat="เซิร์ฟเวอร์"> <asp:accessdatasource id = "NorthwindProductsAccDataSource" runat = "เซิร์ฟเวอร์" selectcommand="เลือก * จากผลิตภัณฑ์" datafile="~/App_Data/Northwind.mdb"> </asp:accessdatasource> <asp:gridview id = "NorthwindProductsGridView" runat = "เซิร์ฟเวอร์" datasourceid="NorthwindProductsAccDataSource"> </asp:gridview>< </แบบฟอร์ม><</ร่างกาย></html> |
<asp:accessdatasource id = "NorthwindProductsAccDataSource" runat = "เซิร์ฟเวอร์" selectcommand="Selcet * จาก [ยอดขายตามหมวดหมู่] " Datafile="~/App_Data/Northwind.mdb"> </asp:accessdatasource> |
(14) เปิดเบราว์เซอร์และดูหน้า
ตัวอย่างหมายเหตุ #2 - เชื่อมต่อกับ MDB และแสดงข้อมูลด้วย GridView
คุณมีตัวควบคุมสองตัวบนเพจ ประการแรก AccessDataSource ดำเนินการเชื่อมต่อกับวัตถุ ADO.NET ที่เชื่อมต่อกับกลไก JET ที่โต้ตอบกับไฟล์ MDB อย่างที่สองคือ GridView ซึ่งใช้เพื่อรับข้อมูลและแปลงรูปแบบเป็นรูปแบบ HTML ที่สามารถแสดงบนเพจได้ โปรดทราบว่าการตั้งชื่อ (ID) ที่สื่อความหมายแก่แต่ละตัวควบคุมเป็นสิ่งสำคัญมาก จากนั้นคุณต้องตรวจสอบให้แน่ใจว่าตัวควบคุมที่ผูกกับข้อมูล (GridView) ใช้คุณสมบัติ DataSourceID เพื่ออ้างอิง ID ของ AccessDataSource เพื่อใช้ AccessDataSource เป็นแหล่งข้อมูล
การแสดงข้อมูลจากแบบสอบถามไม่ใช่เรื่องยาก ใน Access คุณสามารถใช้ชื่อแบบสอบถามแทนชื่อตารางได้ มีสองคำแนะนำที่นี่ ขั้นแรก หากมีช่องว่างในชื่อของตารางหรือแบบสอบถาม ชื่อทั้งหมดจะต้องอยู่ในวงเล็บเหลี่ยม ประการที่สอง ข้อความค้นหาที่ผู้ใช้ป้อนข้อมูล (เช่น "ยอดขายในปีที่กำหนด" จำเป็นต้องทราบว่าปีใด) เกี่ยวข้องกับเทคนิคที่อยู่นอกเหนือขอบเขตของหนังสือเล่มนี้
หลังจากทำตามขั้นตอนก่อนหน้านี้เสร็จแล้ว คุณจะเห็นข้อมูลที่ได้รับจากตัวควบคุม AccessDataSource ที่แสดงบนเพจ บทต่อๆ ไปจะกล่าวถึงรายละเอียด GridView แต่บทนี้จะยังคงเน้นไปที่การควบคุมแหล่งข้อมูลต่อไป
เลือกตัวแปรในคำสั่ง
เมื่อสร้างแหล่งข้อมูลใน VWD วิซาร์ดจะขอให้คุณระบุคอลัมน์ที่ต้องแสดงหรือสร้างคำสั่ง SQL แบบกำหนดเอง ใน "Try It Away" ก่อนหน้านี้ คุณเพียงแค่เลือกคอลัมน์ไม่กี่คอลัมน์ คำสั่ง SQL ที่ซับซ้อนมากขึ้นสามารถระบุได้หลายวิธี:
● ใช้กล่องโต้ตอบแบบโต้ตอบ
● ป้อนคำสั่ง SQL ที่กำหนดเองในตัวช่วยสร้าง AccessDataSource (เรียกโดยงานอำนวยความสะดวกในการกำหนดค่าแหล่งข้อมูลในตัวควบคุม)
● ป้อนคำสั่งในตารางคุณสมบัติ
● ป้อนคำสั่งโดยตรงในมาร์กอัปของมุมมองแหล่งที่มา
การเลือกคอลัมน์ในตัวช่วยสร้าง Access DataSource เป็นเทคนิคที่แนะนำสำหรับการสืบค้นแบบง่ายที่ส่งคืนคอลัมน์ตั้งแต่หนึ่งคอลัมน์ขึ้นไปจากตารางที่แยกจากกัน เนื่องจากจะช่วยลดข้อผิดพลาดในการพิมพ์และไวยากรณ์ (ดูรูปที่ 2-3) ในตัวช่วยสร้างนี้ คุณสามารถเลือกชื่อของตารางหรือคิวรีจากรายการดรอปดาวน์ชื่อได้ จากนั้นคุณสามารถเลือกคอลัมน์ที่ต้องการในตารางหรือแบบสอบถามได้โดยการเลือกคอลัมน์ทั้งหมด (*) หรือกลุ่มของคอลัมน์ใดๆ หากคุณคลิกปุ่มเรียงลำดับตาม คุณสามารถจัดเรียงตามคอลัมน์ใดก็ได้ในแหล่งข้อมูล หากมีข้อจำกัดในคอลัมน์แรก ฟิลด์ที่เลือกใน จากนั้นโดย จะถูกนำมาใช้ เมื่อคุณเลือกตัวเลือกจากตัวช่วยสร้าง โปรดทราบว่าไวยากรณ์ SQL จริงสำหรับ SelectCommand จะแสดงในกล่องข้อความแบบอ่านอย่างเดียวด้วย
รูปที่ 2-3
คุณสามารถใช้ปุ่ม WHERE ในตัวช่วยสร้างเพื่อสร้างคำสั่ง SQL พร้อมพารามิเตอร์ได้ ส่วนนี้จะแนะนำในบทที่ 9 เราจะข้ามการเลือกนี้ไปก่อน แต่สิ่งสำคัญคือก่อนใช้งาน คุณต้องใช้พารามิเตอร์เหล่านี้ซึ่งจะกล่าวถึงในหนังสือเล่มนี้ต่อไป ในไซต์ที่ใช้งาน ให้หลีกเลี่ยงการเชื่อมต่ออินพุตของผู้ใช้กับคำสั่ง SQL โดยตรง การเพิกเฉยปัญหาเกี่ยวกับพารามิเตอร์จะทำให้ไซต์ของคุณถูกโจมตีด้วยการแทรก SQL เทคนิคการโจมตีนี้ใช้อักขระเท็จจากอินพุตของผู้ใช้เพื่อทำให้คำสั่ง SQL ดั้งเดิมเป็นโมฆะ จากนั้นแทนที่ด้วยคำสั่งแบบทำลาย คุณสามารถใช้คอลเลกชันพารามิเตอร์เพื่อส่งข้อมูลผู้ใช้ไปยังคอลเลกชันพารามิเตอร์ ADO.NET ซึ่งสามารถใช้ฟังก์ชันการทำงานของคอลเลกชันเพื่อลดปัญหาการแทรก SQL
แม้ว่าวิซาร์ดกำหนดค่าแหล่งข้อมูลจะมีตัวเลือกมากมายเพื่อช่วยสร้างคำสั่ง SQL ได้อย่างรวดเร็ว แต่บางครั้งคุณยังคงต้องป้อน (หรือแก้ไข) คำสั่ง SQL โดยตรงใน SelectCommand ที่ทำเครื่องหมายไว้ ตัวช่วยสร้าง AccessDataSource อนุญาตให้ดำเนินการเหล่านี้ ในหน้าตัวช่วยสร้างสำหรับการเลือกตาราง แบบสอบถาม และคอลัมน์ คุณสามารถเลือกปุ่มตัวเลือกสำหรับ "ระบุคำสั่ง SQL แบบกำหนดเองหรือขั้นตอนการจัดเก็บ" หลังจากเลือกตัวเลือกนี้ในหน้าวิซาร์ดแล้ว ให้คลิกปุ่มถัดไปเพื่อเข้าสู่หน้าอื่นที่คุณสามารถป้อนคำสั่งที่กำหนดเองในพื้นที่ข้อความได้โดยตรง คุณยังสามารถใช้ Visual Studio QueryBuilder เพื่อสร้างคำสั่งแบบกำหนดเองแบบมองเห็นได้ โดยใช้เครื่องมือที่คล้ายกับ Access QueryBuilder มาก
หากคุณไม่ต้องการใช้วิซาร์ด คุณสามารถเลือกป้อนคำสั่ง SQL แบบกำหนดเองในตารางคุณสมบัติของตัวควบคุม AccessDataSource หรือคุณสามารถสลับไปที่มุมมอง Source และป้อนคำสั่งในคุณสมบัติ SelectCommand ของแท็กควบคุม AccessDataSource
มีหนังสือเกี่ยวกับ SQL อยู่หลายเล่ม (ประเภทเดียวกับเล่มนี้ Beginning SQL Programming , ISBN 1-861001-80-0) และหนังสือเล่มนี้มีคำแนะนำสั้นๆ ในภาคผนวก หากคุณวางแผนที่จะเรียนรู้ไวยากรณ์ SQL คุณสามารถเริ่มต้นด้วยการเรียนรู้คำสั่งสำหรับการส่งคืนส่วนของระเบียน (TOP และ DISTINCT) ไวยากรณ์สำหรับการเปลี่ยนชื่อฟิลด์ (AS) และเทคนิคในการส่งคืนฟิลด์จากสองตารางที่เกี่ยวข้องกัน (JOIN) . แบบฝึกหัดต่อไปนี้จะสำรวจตัวแปรบางตัวในคำสั่ง SQL
ลอง #3 - การเปลี่ยนคำสั่ง Select ใน AccessDataSource ในแบบฝึกหัดนี้ คุณจะแสดงคอลัมน์เฉพาะและบันทึกเฉพาะจากตารางผลิตภัณฑ์ของ Northwind หน้าจะถูกสร้างขึ้นเพื่อแสดงข้อมูลที่ได้รับจากการสืบค้น โปรดทราบว่าในแบบฝึกหัดนี้ กฎการเลือกมีอยู่แล้วในซอร์สโค้ด ขณะนี้ไม่มีการป้อนข้อมูลจากผู้ใช้เป็นตัวเลือก
(1) สร้างไฟล์ชื่อ ch02_TIO_3_AlternateSelect-Commands.aspx ใน C:WebsitesBegAspNet2Dbch02
(2) เพิ่มตัวควบคุม AccessDataSource โดยมี Northwind เป็น ID และตั้งค่า MDB เป็น App_DataNorthwind.mdb ในชุดกล่องโต้ตอบ ให้ตั้งค่าคำสั่ง Select เพื่อดึงข้อมูลเขตข้อมูลทั้งหมดจากตารางผลิตภัณฑ์ ("ชื่อ"=ผลิตภัณฑ์) ดูที่มุมมองแหล่งที่มาและสังเกตคำสั่งที่คุณสร้างขึ้น ดังที่แสดงด้านล่าง:
เลือก * จากผลิตภัณฑ์ |
<%@ ภาษาหน้า = "VB" %> <html> <หัว runat="เซิร์ฟเวอร์"> <title><ch02 TIO 3 เลือก Conimands</title> </หัว>< <ร่างกาย> <h3><ch02 TIO 3 เลือก Coinmands สำรอง</h3>< <แบบฟอร์ม runat="เซิร์ฟเวอร์"> <asp:accessdatasource id = "NorthwindAccDataSource" runat = "เซิร์ฟเวอร์" selectcommand="เลือก * จากผลิตภัณฑ์" datafile=" ~/App_Data/Northwind.mdb"> </asp:accessdatasource> <asp:gridview id = "GridViewl" runat = "เซิร์ฟเวอร์" datasourceid="NorthwindAccDataSource"> </asp:gridview>< </แบบฟอร์ม> </ตัว> </html> |
SELECT * จาก [ผลิตภัณฑ์] WHERE (CategroyID=3) |
<asp:accessdatasource id = "NorthwindAccDataSource" runat = "เซิร์ฟเวอร์" selectcommand = "เลือก * จาก [ผลิตภัณฑ์] โดยที่ (CategoryID = 3) " Datafile="~App_Data/Northwind.mdb"> </asp:accessdatasource> |
เลือก * จากผลิตภัณฑ์ โดยที่ ProductID = 12 เลือก * จากผลิตภัณฑ์ WHERE ชื่อผลิตภัณฑ์ = 'ซอสแครนเบอร์รี่ Northwoods' SELECT * จากผลิตภัณฑ์ WHERE ProductID <11 เลือก * จากผลิตภัณฑ์ WHERE ProductID <11 เรียงตามชื่อผลิตภัณฑ์ จากน้อยไปมาก เลือก * จากผลิตภัณฑ์ โดยที่ SupplierID = 6 หรือ SupplierID = 8 เลือก * จากผลิตภัณฑ์ WHERE SupplierID = 24 AND UnitPrice > 10 |
ตัวแปรในตำแหน่งไฟล์ MDB
ไฟล์ MDB จะถูกจัดเก็บไว้ในตำแหน่งทางกายภาพต่างๆ บนฮาร์ดดิสก์: โฟลเดอร์เดียวกันกับเว็บเพจ โฟลเดอร์ย่อยภายใต้เว็บเพจ หรือโฟลเดอร์อื่นๆ บนเครื่อง ฯลฯ ใน Visual Web Developer ไฟล์เหล่านี้สามารถเรียกดูได้บ่อยครั้งในตัวออกแบบ และมีการป้อนพาธที่ถูกต้องไปยังไฟล์ MDB อย่างไรก็ตาม หากคุณวางแผนที่จะป้อนรหัสของคุณเอง คุณจะต้องปฏิบัติตามไวยากรณ์ที่อธิบายไว้ในส่วนนี้
คุณสมบัติ DataFile ของตัวควบคุม AccessDataSource มีเส้นทางของเพจที่มีคุณสมบัติครบถ้วน (เช่น เริ่มต้นด้วยอักษรระบุไดรฟ์) หรือระบุโดยสัมพันธ์กับตำแหน่งของเพจที่มี AccessDataSource เส้นทางยังสามารถสัมพันธ์กับแอปพลิเคชันได้ เช่น การใช้ไวยากรณ์ของ URL เพื่ออ้างอิงเส้นทาง ไวยากรณ์นี้จะแทนที่สัญลักษณ์ (~) ด้วยไดเรกทอรีรากของแอปพลิเคชัน ตัวอย่างเช่น: ~App_Dataproduces.mdb การใช้เส้นทางที่เกี่ยวข้องกับแอปพลิเคชันทำให้ง่ายต่อการย้ายเพจจากที่หนึ่งไปยังอีกที่หนึ่งโดยไม่ทำลายการอ้างอิงไปยังฐานข้อมูล ดังนั้นจึงขอแนะนำให้ใช้เส้นทางที่เกี่ยวข้องกับแอปพลิเคชันทุกครั้งที่เป็นไปได้
ขั้นแรก มาดูไวยากรณ์ของเส้นทางแบบเต็ม ซึ่งมีเส้นทางทั้งหมดไปยังไฟล์ MDB โดยเริ่มจากรากของไดรฟ์คอมพิวเตอร์ที่มีไฟล์อยู่:
<asp: เข้าถึงแหล่งข้อมูล datafile= "C:WebSitesWebApplicationApp_DataMyMdb.mdb"> |
<asp:accessdatasource |
<asp:accessdatasource . datafile="MyDaughterFolder/MyMdb.mdb"> |
<asp:accessdatasource . datafile="../MyMdb.mdb"> |
<asp:accessdatasource="~App_Data/MyMdb> |