VWD2005 ประกอบด้วย SQL Server 2005 Express Edition ซึ่งเป็นเวอร์ชันฟรีของ SQL Server 2005 ที่มุ่งเป้าไปที่นักพัฒนาที่ไม่เป็นมืออาชีพหรือผู้ที่กระตือรือร้นที่ต้องการสร้างแอปพลิเคชันด้วยโซลูชันฐานข้อมูลที่เรียบง่าย เนื่องจาก SQL Server Express รองรับโมเดลการเขียนโปรแกรม SQL Server ที่สมบูรณ์ เช่น SQLCLR, T-SQL, กระบวนการจัดเก็บ, มุมมอง, ทริกเกอร์ และชนิดข้อมูล XML คุณจึงสามารถใช้ SQL Server Express เพื่อเรียนรู้เกี่ยวกับเทคโนโลยีเหล่านี้และรับรองว่าแอปพลิเคชันของคุณสามารถรันได้ บนแพลตฟอร์มระดับสูงกว่า (เช่น SQL Server Enterprise Edition) SQL Server Express ดาวน์โหลดและติดตั้งได้ง่าย (มีขนาดน้อยกว่า 36MB) และรวมอยู่ใน Visual Studio 2005 และ Visual Web Developer 2005
Visual Studio มีเครื่องมือสำหรับการจัดการฐานข้อมูล เช่น Database Explorer และ Query Builder ซึ่งคุณสามารถใช้ในการจัดการฐานข้อมูล SQL Server Express Visual Studio ยังสนับสนุนฐานข้อมูลแบบไฟล์ใหม่สำหรับการสร้างฐานข้อมูล SQL Server Express โดยเป็นส่วนหนึ่งของโครงการ ในเวลาเดียวกัน Visual Studio 2005 และ SQL Server 2005 Express มอบโซลูชันที่สมบูรณ์สำหรับการสร้างและปรับใช้แอปพลิเคชันเว็บที่ขับเคลื่อนด้วยข้อมูล รวมถึงคุณลักษณะต่อไปนี้:
· รายการข้อมูลโครงการฐานข้อมูล
· การเชื่อมต่อฐานข้อมูลท้องถิ่น
· การจัดการเบราว์เซอร์ฐานข้อมูล
· การเชื่อมต่อเส้นทางสัมพัทธ์ สตริง
· สนับสนุนการปรับใช้ XCopy
· สนับสนุนการดีบักแบบรวม
บทความนี้อธิบายวิธีฐานข้อมูลแบบไฟล์ใน Visual Studio 2005 และวิธีที่ผู้ออกแบบสร้างและใช้ฐานข้อมูลเหล่านี้
Visual Web Developer และ DataVisual
Web Developer มีเครื่องมือมากมายสำหรับการใช้ฐานข้อมูลกับเว็บแอปพลิเคชัน คุณสามารถใช้หน้าต่างเลือกฐานข้อมูลเพื่อเชื่อมต่อกับฐานข้อมูลได้อย่างง่ายดายและสร้างหรือดูไดอะแกรมหรือสคีมาฐานข้อมูล คุณยังสามารถใช้กล่องโต้ตอบตัวสร้างแบบสอบถามและตารางผลลัพธ์แบบสอบถามเพื่อสอบถามฐานข้อมูลและเติมข้อมูลได้ การสร้างฐานข้อมูลใหม่ (โดยใช้ไฟล์ในเครื่อง) ก็มีให้เป็นรายการข้อมูลโครงการด้วย
เมื่อคุณเชื่อมต่อกับฐานข้อมูลใน Visual Web Developer แล้ว คุณสามารถลากและวางตารางฐานข้อมูลลงบนเพจได้โดยตรงเพื่อสร้างตัวควบคุม GridView ที่ผูกกับข้อมูล Visual Web Developer จะสร้างการควบคุมแหล่งข้อมูลที่เกี่ยวข้องโดยอัตโนมัติ และกำหนดค่าการดำเนินการเลือก อัปเดต แทรก และลบตามตารางข้อมูล การดำเนินการที่รวดเร็วนี้ช่วยให้คุณประหยัดเวลาได้มากในการสร้างแหล่งข้อมูลด้วยตนเอง และคุณสามารถแทนที่ GridView ด้วยการควบคุมที่ผูกกับข้อมูลที่เหมาะสมได้ตามต้องการ
ฐานข้อมูลท้องถิ่นและเซิร์ฟเวอร์
คุณอาจคุ้นเคยกับฐานข้อมูลบนเซิร์ฟเวอร์และสตริงการเชื่อมต่อแล้ว ในกรณีนี้ เซิร์ฟเวอร์ฐานข้อมูล (เช่น SQL Server 2005) จะเชื่อมโยงชื่อฐานข้อมูลกับไฟล์ฐานข้อมูลที่เซิร์ฟเวอร์ดูแล คุณสามารถเชื่อมต่อกับฐานข้อมูลบนเซิร์ฟเวอร์ได้โดยการระบุชื่อเซิร์ฟเวอร์ ชื่อฐานข้อมูล และข้อมูลประจำตัว ตัวอย่างเช่น:
"server=(local)SQLExpress;database=Pubs;Integrated Security=true"
อย่างไรก็ตาม Visual Studio 2005 ยังสนับสนุนการ แนวคิดของฐานข้อมูลท้องถิ่น ซึ่งเป็นไฟล์ที่เพิ่มในไดเร็กทอรี App_Data ของเว็บแอปพลิเคชันปัจจุบัน การเก็บไฟล์ข้อมูลไว้ในไดเร็กทอรี App_Data นั้นปลอดภัย เนื่องจากเนื้อหาของไดเร็กทอรีนี้จะไม่ตอบสนองต่อคำขอของผู้ใช้ ไดเร็กทอรีนี้ยังเป็นสถานที่ที่แนะนำสำหรับจัดเก็บไฟล์ XML และที่เก็บข้อมูลอื่นๆ ฐานข้อมูล Native SQL Server Express มีนามสกุล .MDF (เช่น "MyDatabase.MDF") ซึ่งเป็นรูปแบบไฟล์มาตรฐานที่ SQL Server รองรับ เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ ฐานข้อมูลยังมีไฟล์บันทึกที่เกี่ยวข้องด้วย (เช่น "MyDatabase_log.LDF") ตำแหน่งของไฟล์ฐานข้อมูลและไฟล์บันทึกจะต้องอยู่ด้วยกัน
เราสามารถแนบฐานข้อมูลไฟล์ในเครื่องกับ SQL Server Express ได้โดยอัตโนมัติโดยใช้สตริงการเชื่อมต่อเส้นทางสัมพันธ์ เส้นทางสัมพัทธ์ช่วยให้แน่ใจว่าการเชื่อมต่อฐานข้อมูลจะไม่ถูกขัดจังหวะเมื่อแอปพลิเคชันถูกย้ายไปยังตำแหน่งอื่น สตริงการเชื่อมต่อเส้นทางสัมพัทธ์ในแอปพลิเคชันเว็บมีลักษณะดังนี้:
"server=(local)SQLExpress;AttachDbFileName=|DataDirectory|MyDatabase.mdf;Integrated Security=true;User Instance=true"
สตริงการเชื่อมต่อข้างต้นมีแอตทริบิวต์เพิ่มเติมอีกสองรายการ . คุณสมบัติ AttachDbFileName ระบุตำแหน่งของไฟล์ฐานข้อมูลที่แนบแบบไดนามิกกับเซิร์ฟเวอร์เมื่อเปิดการเชื่อมต่อ แม้ว่าคุณสมบัตินี้สามารถยอมรับเส้นทางแบบเต็มไปยังฐานข้อมูลได้ (เช่น การใช้ไวยากรณ์ |DataDirectory|) แต่ในขณะรันไทม์ เส้นทางนี้จะถูกแทนที่ด้วยไดเรกทอรี App_Data ของแอปพลิเคชัน นอกจากนี้ยังช่วยให้แน่ใจว่าการเชื่อมต่อจะไม่ถูกขัดจังหวะเมื่อแอปพลิเคชันถูกย้ายไปยังตำแหน่งอื่น คุณสมบัติที่สองคือ User Instance=true ซึ่งระบุว่า SQL Server Express แนบฐานข้อมูลอย่างไร ในกรณีนี้ SQL Server Express จะสร้างกระบวนการใหม่เพื่อแนบฐานข้อมูลกับอินสแตนซ์ใหม่ โดยทำงานเป็นผู้ใช้ที่เปิดการเชื่อมต่อ ในแอปพลิเคชัน ASP.NET ผู้ใช้รายนี้คือบัญชี ASPNET ภายในเครื่องหรือบริการเครือข่ายเริ่มต้น ขึ้นอยู่กับระบบปฏิบัติการ ในการแนบไฟล์ฐานข้อมูลที่ได้รับจากบัญชีที่ไม่ใช่ผู้ดูแลระบบอย่างปลอดภัย (เช่น บัญชี ASP.NET) จำเป็นต้องสร้างอินสแตนซ์ผู้ใช้ SQL Server แยกต่างหาก
โปรดทราบ: เนื่องจากตามค่าเริ่มต้น แอปพลิเคชัน ASP.NET ทั้งหมดทำงานในกระบวนการเดียวกัน แอปพลิเคชันทั้งหมดจะแนบฐานข้อมูลท้องถิ่นกับอินสแตนซ์ SQL Server Express เดียวกัน ซึ่งหมายความว่าแอปพลิเคชันทั้งหมดมีสิทธิ์เข้าถึงฐานข้อมูลทั้งหมดที่แนบกับอินสแตนซ์นี้เหมือนกัน ไม่ว่าแอปพลิเคชันจะแนบไปกับฐานข้อมูลใดตั้งแต่แรกก็ตาม เพื่อแยกแอปพลิเคชันที่แตกต่างกัน คุณต้องให้แต่ละแอปพลิเคชันทำงานในกระบวนการของผู้ปฏิบัติงานหรือกลุ่มแอปพลิเคชันที่แตกต่างกัน (ใน IIS 6) ด้วยเหตุนี้ ฐานข้อมูล SQL Server ภายในเครื่องจึงมีวัตถุประสงค์หลักเพื่ออำนวยความสะดวกในการพัฒนา และไม่ได้มีวัตถุประสงค์เพื่อแทนที่ฐานข้อมูลบนเซิร์ฟเวอร์ในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกัน
จุดสำคัญอีกประการหนึ่งคือผู้ใช้สองคนไม่ได้รับอนุญาตให้เชื่อมต่อกับฐานข้อมูลท้องถิ่นในเวลาเดียวกัน เมื่อออกแบบแอปพลิเคชันใน Visual Studio ตัวออกแบบจะปล่อยการเชื่อมต่อโดยอัตโนมัติเพื่อให้แน่ใจว่า Visual Studio และ ASP.NET สามารถแชร์ไฟล์ฐานข้อมูลได้ (ตัวอย่างเช่น เมื่อทำการดีบักแอปพลิเคชันที่ทำงานอยู่ในตัวออกแบบ)
การสร้างฐานข้อมูลท้องถิ่น
คุณสามารถสร้างฐานข้อมูลท้องถิ่นในโครงการแอปพลิเคชัน Visual Studio Web ได้อย่างง่ายดาย เนื่องจาก Visual Studio มาพร้อมกับ SQL Server Express ที่ติดตั้งไว้ คุณสามารถใช้ขั้นตอนต่อไปนี้เพื่อสร้างฐานข้อมูลท้องถิ่น เพิ่มตาราง และเติมข้อมูล
ในการสร้างฐานข้อมูลท้องถิ่น:
1. คลิกขวาใน Solution Browser และเลือกตัวเลือก "เพิ่มรายการใหม่..."
2. เลือกรายการ "ฐานข้อมูล SQL" และระบุชื่อไฟล์ เช่น "Database.mdf"
3. Visual Studio แจ้งให้เพิ่มไฟล์นี้ลงในไดเร็กทอรี App_Data คลิก "ใช่"
4. Visual Studio เพิ่มไฟล์นี้และเชื่อมต่อกับฐานข้อมูลโดยอัตโนมัติโดยใช้ Database Browser
ในการเพิ่มตารางข้อมูลลงในฐานข้อมูลภายในเครื่อง:
1. คลิกขวาที่โหนดตารางในเบราว์เซอร์ฐานข้อมูล และเลือกตัวเลือก "เพิ่มตารางใหม่"
2. ป้อนชื่อและประเภทของคอลัมน์ในฐานข้อมูล และเลือกตั้งค่าคุณสมบัติคอลัมน์อื่นๆ ในตารางคุณสมบัติได้ ในการตั้งค่าฐานข้อมูลผู้ติดต่อตัวอย่าง ให้ทำตามขั้นตอนด้านล่าง
3. ตั้งชื่อคอลัมน์แรกเป็น "ContactID" และตั้งชื่อประเภทข้อมูลเป็น "int" ยกเลิกการเลือกช่องทำเครื่องหมาย "อนุญาตให้มีค่าว่าง"
4. คลิกขวาที่สี่เหลี่ยมสีเทาทางด้านซ้ายของคอลัมน์ ContactID และเลือกตัวเลือก "Set as Primary Key"
5. ในตาราง "คุณสมบัติคอลัมน์" ด้านล่าง ให้ขยายโหนด "ข้อกำหนดตัวระบุ" และตั้งค่า "เป็นตัวระบุ" เป็น "ใช่"
6. ตั้งชื่อคอลัมน์ที่สองเป็น "ContactName" และประเภทข้อมูลเป็น "varchar(50)" ทำเครื่องหมายที่ช่อง "Allow Nulls" ทิ้งไว้
7. กด Ctrl-S เพื่อบันทึกตารางและตั้งชื่อตารางเป็น "ผู้ติดต่อ" คลิกตกลงเพื่อบันทึกตาราง
8. ปิดหน้าต่างคำจำกัดความของตาราง
ในการเติมข้อมูลลงในตาราง:
1. คลิกขวาที่โหนดตารางข้อมูล (เช่น "ผู้ติดต่อ") ในเบราว์เซอร์ฐานข้อมูล และเลือกตัวเลือก "แสดงข้อมูลตาราง"
2. ป้อนข้อมูลสำหรับแถวตารางข้อมูลในแบบฟอร์มที่แสดง หากคุณใช้ตัวอย่างผู้ติดต่อด้านบน คุณสามารถป้อนค่าในคอลัมน์ ContactName และฐานข้อมูลจะสร้างค่า ContactID ที่สอดคล้องกันโดยอัตโนมัติ
3. ปิดหน้าต่างตาราง
การผูกเข้ากับฐานข้อมูลภายในเครื่อง
เพื่อผูกกับฐานข้อมูลภายในเครื่อง คุณจำเป็นต้องกำหนดค่าตัวควบคุมแหล่งข้อมูล ASP.NET เพื่อเชื่อมต่อกับไฟล์โดยใช้การเชื่อมต่อเส้นทางสัมพัทธ์ เมื่อต้องการผูกฐานข้อมูล SQL Server Express เข้ากับตัวควบคุม SqlDataSource และ GridView ให้ใช้ขั้นตอนต่อไปนี้:
1. คลิกสองครั้งที่เพจในโซลูชันเบราว์เซอร์ (เช่น "Default.aspx") Visual Studio จะเปิดหน้านี้
2. เลือกแท็บ "มุมมองการออกแบบ" ที่ด้านล่างของหน้าต่างหน้าเพื่อสลับไปยังมุมมองการออกแบบ
3. ดับเบิลคลิกไฟล์ฐานข้อมูล (เช่น "Database.mdf") ใน Solution Browser Visual Studio เปิดเบราว์เซอร์ฐานข้อมูลสำหรับการเชื่อมต่อ
4. ขยายโหนด Tables เพื่อแสดงตารางในฐานข้อมูล
5. ลากและวางตารางในเบราว์เซอร์ฐานข้อมูลไปยังเพจที่เปิดในมุมมองออกแบบ Visual Studio สร้าง GridView ที่เชื่อมโยงกับตัวควบคุม SqlDataSource
6. ขยาย "แผงธุรกรรมอัจฉริยะ" ของตัวควบคุม GridView และเลือกการแบ่งหน้า การเรียงลำดับ และการแก้ไข
7. กด Ctrl-F5 เพื่อเรียกใช้เพจ (โดยไม่ต้องดีบั๊ก)
ตัวอย่างต่อไปนี้แสดงการควบคุม GridView และ SqlDataSource ที่เชื่อมต่อกับฐานข้อมูลท้องถิ่น เพื่อรันตัวอย่างนี้ บัญชีกระบวนการ ASP.NET ต้องมีสิทธิ์ในการอ่าน/เขียนไฟล์ MDF และ LDF ในไดเร็กทอรี ~/App_Data กระบวนการตั้งค่าการอนุญาตมีดังนี้:
1. เลือกไฟล์ ~/App_Data/Database.MDF ในเบราว์เซอร์ Windows และเลือก "Properties"
2. เลือกแท็บ "ความปลอดภัย" และคลิก "เพิ่ม"
3. คลิก "ตำแหน่ง..." เลือกชื่อคอมพิวเตอร์ของคุณ (ที่ด้านบนของรายการ) แล้วคลิก "ตกลง"
4. ในพื้นที่ข้อความ Object Name ให้ป้อนชื่อของบัญชีกระบวนการ ASP.NET ตามค่าเริ่มต้น ชื่อใน IIS 6.0 คือ "Network Service" และใน IIS 5.x คือ "ASPNET"
5. เลือก "อ่าน" และ "เขียน" ในคอลัมน์ "อนุญาต" และคลิก "ตกลง"
6. หากมีไฟล์ LDF ในไดเร็กทอรี App_Data คุณต้องทำซ้ำขั้นตอนข้างต้นเพื่อตั้งค่าคุณสมบัติของไฟล์ LDF
หากคุณใช้ Visual Studio เพื่อสร้างแอปพลิเคชันบนเครื่องคอมพิวเตอร์ของคุณ ตามค่าเริ่มต้น คุณจะมีสิทธิ์ข้างต้นในไดเร็กทอรี App_Data หากไฟล์ฐานข้อมูลจำเป็นต้องเปลี่ยนการอนุญาตหลังจากแนบไฟล์แล้ว คุณต้องปิดโดเมนแอปพลิเคชันก่อนจึงจะสามารถให้สิทธิ์ใหม่มีผลได้
<คอลัมน์>
<asp:BoundField DataField="ContactID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="ContactName" HeaderText="ชื่อ" SortExpression="ชื่อ" />
</คอลัมน์>
</asp:GridView><
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:ContactsDatabase %><" ID="SqlDataSource1" runat="server" SelectCommand="SELECT [ContactID], [ContactName] FROM [Contacts]" OnSelected="SqlDataSource1_Selected"></ asp:SqlDataSource>
การปรับใช้ฐานข้อมูลท้องถิ่น
ข้อดีอย่างหนึ่งของไฟล์ฐานข้อมูลท้องถิ่นคือสามารถติดตามแอปพลิเคชัน ย้ายเป็นส่วนหนึ่งของแอปพลิเคชันไปยังตำแหน่งอื่นหรือไปยังคอมพิวเตอร์เครื่องอื่นได้ (แน่นอนว่าคอมพิวเตอร์จะต้องใช้งาน SQL Server ด้วย ด่วน). เมื่อย้ายฐานข้อมูล ไฟล์จะต้องอยู่ในสถานะปลดล็อค ไฟล์ถูกล็อคในขณะที่ตัวออกแบบหรือแอปพลิเคชันเชื่อมต่อกับฐานข้อมูล เพื่อปลดล็อค การเชื่อมต่อที่ใช้งานอยู่ทั้งหมดไปยังฐานข้อมูลจะต้องถูกปิด คุณสามารถใช้เทคนิคต่อไปนี้เพื่อปิดการเชื่อมต่อฐานข้อมูล:
· หาก ASP.NET ได้เปิดการเชื่อมต่อ คุณสามารถปิดโดเมนแอปพลิเคชันได้โดยการเพิ่มไฟล์ "app_offline.htm" ลงในไดเร็กทอรีรากของแอปพลิเคชันบนเว็บ หน้าที่ของมันคือการปิดโดเมนแอปพลิเคชัน (ไม่ใช่กระบวนการ) และเปลี่ยนเส้นทางคำขอแอปพลิเคชันทั้งหมดไปยังไฟล์นี้ (ส่งคืนรหัสตอบกลับ 404) หากคุณต้องการรีสตาร์ทแอปพลิเคชัน เพียงลบไฟล์นี้ โปรดทราบว่าการปิดการเชื่อมต่อในโค้ดเพจจะไม่ปลดล็อคไฟล์ เนื่องจากตามค่าเริ่มต้น พูลการเชื่อมต่อ ADO.NET จะคงการเชื่อมต่อที่ใช้งานอยู่
Visual Studio มีคุณสมบัติ Copy Web ซึ่งสามารถคัดลอกไฟล์แอปพลิเคชันจากไดเร็กทอรีการทำงานไปยังเซิร์ฟเวอร์เป้าหมายโดยใช้ xcopy, FTP หรือส่วนขยายเซิร์ฟเวอร์ FrontPage คอมพิวเตอร์เป้าหมายสามารถอยู่ในเครื่องหรือระยะไกลได้ คุณสามารถเรียกใช้คุณลักษณะคัดลอกเว็บได้โดยเลือก "เว็บไซต์ > คัดลอกเว็บไซต์..." จากแถบเมนู Visual Studio
แม้ว่าคุณสามารถใช้ Copy Web หรือการดำเนินการ xcopy หรือ FTP แบบธรรมดาเพื่อย้ายฐานข้อมูลได้ เพื่อให้แอปพลิเคชันทำงานต่อไป คอมพิวเตอร์เป้าหมายจะต้องเรียกใช้ SQL Server Express (ภายใต้ชื่ออินสแตนซ์เดียวกัน) เราได้กล่าวไว้ก่อนหน้านี้ว่าเนื่องจากแอปพลิเคชันทั้งหมดที่ใช้ ASP.NET เชื่อมต่อกับอินสแตนซ์ SQL เดียวกัน แอปพลิเคชันทั้งหมดบนคอมพิวเตอร์เป้าหมายจึงต้องเชื่อถือซึ่งกันและกัน หากแอปพลิเคชันหนึ่งไม่เห็นฐานข้อมูลของแอปพลิเคชันอื่น เราขอแนะนำให้ใช้วิธีการแบบเซิร์ฟเวอร์ (โดยใช้การรับรองความถูกต้อง SQL หรือเทคนิคการแยกอื่นๆ) แทนฐานข้อมูลในเครื่อง หากคุณใช้ SQL Server Express เป็นเครื่องมือในการพัฒนา คุณจะต้องคัดลอกเนื้อหาฐานข้อมูล SQL Server Express ไปยังลูกค้าโดยเป็นส่วนหนึ่งของการปรับใช้งานจริง