Upload
vophuc
View
227
Download
4
Embed Size (px)
Citation preview
Microsoft Visual Studio 2010
บทท 1พนฐานของโปรแกรม Visual
Studio 2010Basic of Visual Studio .NET 2010
Microsoft Visual Studio .NET 2010 เปนเครองมอสำ�หรบก�รพฒน�โปรแกรมและเวบไซตทมประสทธภ�พม�ก มเครองมออำ�นวยคว�มสะดวกม�กม�ยรวมทงสถ�ป ตยกรรมท ท�ง Microsoft ได ออกแบบม�นนถอว� เพอคว�มมเสถยรภ�พและคว�มยดหยนสงม�ก
ใน Visual Studio .NET 2010 ประกอบดวยเคร องมอต�งๆ ดงน
- Visual Basic .NET- Visual C++ .NET- Visual VB .NET- Visual J# .NET- ASP .NETทงหมดเปนเคร องมอก�รพฒน�ภ�ยใตสถ�ปตยกรรม .NET
Framework ซ งก ค อกรอบก�รท ำ�ง�นของก�รเขยนโปรแกรมท Microsoft คดขน เพอรองรบก�รตดตอสอส�ร เพอแลกเปลยนขอมลระหว�งกน หรอแลกเปลยนขอมลระหว�ง Platform ใหมคว�มสมบรณยงขนโดยอ�ศยภ�ษ� XML (Extensible Markup Language) ท ทำ�หน�ทเปนตวกล�งในก�รแลกเปลยนขอมลระหว�ง Platform ทต�งกนได
สภาพแวดลอมในการทำางานของ Visual Studio 2010
1
Microsoft Visual Studio 2010
สวนสภ�พแวดลอมจะแบงออกเปนสวนหลกๆ 4 สวนดงน
- สวนท 1 ToolBox สำ�หรบแสดงคอนโทรลต�งๆ ทล�กม�ว�งในต ว Document Window ได และ Server Explorer ส ำ�หรบแสดงบรก�รต�งๆ ทมบนเซรฟเวอร
- สวนท 2 Document Window เป นส วนหล ก ในก�รออกแบบและสวนแสดงโคด
- สวนท 3 Solution Explorer แสดงไฟลและโฟลเดอร ต�งๆ ทมในโปรเจค
- สวนท 4 Properties window เปนหน�ต�งสำ�หรบบรรจคณสมบตของ Control ต�งๆ ทเร�ใชออกแบบโปรแกรม
Getting Start using VB.NET 2010ภ�ษ� VB เปนภ�ษ�ทถกออกแบบม�เพอรองรบก�รทำ�ง�นในยค
.NET โดยมแนวคดของภ�ษ�ทเปนแบบก�รเขยนโปรแกรมเชงวตถสมยใหม ซงทกภ�ษ�ทอยภ�ยใตเทคโนโลย .NET นนจะใชตวแปลภ�ษ�ตวเดยวกนคอ Common Language Runtime ดงภ�พ
VB.NET, VC#.NET, VC++ .NET , J# Compoiler
2
Microsoft Visual Studio 2010
จ�กรป จะเหนไดว� เมอเกดก�รแปลโคดทม�จ�กภ�ษ�ใดๆ กต�มใน .NET จะอ�ศย CLR ทำ�หน�ทแปลออกม�เปนภ�ษ�กล�งทเรยกว� IL (Intermediate Language) กอน เม อได โค ดของ IL ม�แลว ถ �ตองก�รแปลออกม�เปนภ�ษ�เคร อง กจะอ�ศยหลกก�รทำ�ง�นของเครองจกรเสมอน (Virtual Machine) แปลภ�ษ� IL อกครงหนง โดยอ�ศย Compiler JIT (Just-In-Time)
จะเหนว�ดวยหลกก�รทำ�ง�นของตวแปรภ�ษ� CLR ดงกล�ว ส�ม�รถตคว�มไดว� ในยค .NET Microsoft ไดพฒน�ใหทกๆ ภ�ษ�เข�สจดศนยกล�ง กล�วคอ ไมว�จะพฒน� Application ดวยภ�ษ�ใดกต�ม ท�ยทสดแลว กจะไดโคด IL ชดเดยวกนทพรอมจะแปลเปนภ�ษ�เคร องไดทนท ซงขอดกคอ ส�ม�รถจะใชภ�ษ�ใดกไดภ�ยใตเทคโนโลย .NET ในก�รพฒน� ก จะ ได ผลล พธ เหมอนก น หรออ�จจะสร �ง Application เดยวดวยหล�ยๆ ภ�ษ�กได ทำ�ใหยดหยนตอก�รพฒน� Application เปนทม
เรมตนการใช VB .NET 2010
Code ภ�ษ�
ตวแปลภ�ษ�
Binary Code
3
Microsoft Visual Studio 2010 4
Microsoft Visual Studio 2010
ห ล ง จ � ก ไ ด ส ร � ง Application (ใ น Visual Studio เ ร ย ก ว � Project) กจะไดหน�จอดงรป
- Toolbox ใชส ำ�หรบใหผพฒน�นำ� Control ต�งๆ ทอยบน Toolbox ม�ว�ดลงบน Form เพอสร�งหน�ต�โปรแกรม
- Form ใชส ำ�หรบเปนพนทให Control ม�ว�งลง เพอสร�งหน�ต�โปรแกรม
- Solution Explorer window มไวสำ�หรบแสดงว� Project เร�มไฟลอะไรบ�ง ซง VB นนจะมไฟลน�มสกลเปน “vb”
5
Microsoft Visual Studio 2010
- Properties window มไวส ำ�หรบกำ�หนดคณสมบตต�งๆ ของ Control รวมทง Form
Standard ControlStandard Control ค อ Control ม � ต ร ฐ � น ท Visual
Studio จดม�ให ซงเปน Control พนฐ�นทผออกแบบส�ม�รถเลอก Control ตวใด ๆ ว�ดลงฟอรมได ซงจดไวอยใน Tool Box นนเอง
การวาด Control ลงบน Form
การกำาหนดคณสมบตใหกบ Control หรอ Form
6
Microsoft Visual Studio 2010
สวนประกอบของ Properties window
Properties สำาหรบ Standard Controlคว�มเข�ใจกอนก�รกำ�หนด Properties ในคมอเลมน1. Properties บ�งต วของ Control แต ละต ว จะ เหนก�ร
เ ป ล ย น แ ป ล ง ท น ท เ ม อ ผ ใ ช เ ป ล ย น Properties แ ต Properties บ�งตวจะเหนกตอเมอรนโปรแกรมเท�นน เพร�ะฉะนน กใหลองทงสองแบบนะครบ
2. ผแตงไมไดจดห�ม�ใหทก Properties และของทก Control ซงห�กนกศกษ�ทตองก�รศกษ�เพมเตมกส�ม�รถไปลองต�มกระบวนก�รขอ 1 ได ในบ�ง Standard Control ผแตงกไมไดนำ�ม�ยกตวอย�งหรออธบ�ยใหทร�บ ซงห�กตองก�รร�ยละเอยดจรง ๆ กตดตอกบผแตงไดโดยตรงนะครบ
ในหวขอน จะเป นก�รกล�วถ ง Properties ของ Control ท สำ�คญ ๆ แตขอยำ�ว�อธบ�ย Properties ไมครบทกตวนะครบ เอ�แตเพยงสวนทสำ�คญ ๆ เท�นน มดงนครบ
แสดงชอ Control
ชอ Properties
ค�ของ
หมวดก�รแสดง Properties1. Alphabetic คอ
แสดงเรยงต�มตวอกษร ยกเวน Name
2. Categorized คอ
7
Microsoft Visual Studio 2010
FormForm เป น Control ทส ำ�ค ญของ Visual Studio และจะม
ลกษณะพเศษกว� Control ตวอน ๆ เนองจ�กว� Form จะเปนพนทส ำ�หรบรองรบก�รว�ง Control เพ อจะส อใหก บผใชง�นได ใชง�นโปรแกรมไดอย�งง�ยด�ย สำ�หรบ Form ใน Visual Studio นน จะมอย 2 ชนด คอ SDI และ MDI
SDI ฟอรม ค อ ฟอรมท เป นเสมอนโปรแกรมหนง ห�กเร�ออกแบบและรนโปรแกรม เมอฟอรมใด ๆ ถกเปดขนม� จะทำ�ใหใชเนอท Taskbar ของ Windows 1 สวน ถ�ห�กโปรเจค 1 ม หล�ยฟอรม และถ�เปดหล�ย ๆ ฟอรม กจะทำ�ใหเสยพนท Taskbar อย�งม�ก ซงถ�พจ�รณ�แลวจะไมคอยเหม�ะสมซกเท�ใดนก
MDI ฟอรม คอ ฟอรมทมใชบรรจฟอรมลกได โดย MDI ฟอรม นนโดยสวนใหญจะใชเปนก�รเขยนโปรแกรมทเปนม�ตรฐ�น ซงฟอรมแบบนจะใชพนท Taskbar เพยง 1 สวนเท�นน โดยฟอรมยอยทเปดขนนนจะทำ�ง�นอยภ�ยใตฟอรม MDI ตวอย�งของฟอรมประเภทนจะเหนไดอย�งม�กม�ย เชน โปรแกรมตระกล Office ซงถ�ลองเปดใชง�นดแลวจะสงเกตเหนว�จะม ปม 3 ปม ทเป นม�ตรฐ�นของ Windows คอ Minimize, Resize, Close อยจำ�นวน 2 ชดนนเอง
สำ�หรบในหวขอนจะขอยกตวอย�งเฉพ�ะ SDI เท�นนProperties ของ Formช อ Properties
ค�ของ Properties
Name ใชกำ�หนดชอของ Form ซงตองใหเปนไปต�มกฎในก�รตงชอตวแปร มคว�มย�วไดไมเกน 255 ตวอกษร ขอแนะนำ�คอ ควรตงชอใหเหม�ะสมกบลกษณะก�รทำ�ง�นของฟอรม
BorderStyle คอก�รกำ�หนดลกษณะของฟอรม ว �จะใหมปม 3 ปมม � ต ร ฐ � น ข อ ง Windows ห ร อ ไ ม ค อ Minimize,Resize,Close ร ว ม ท ง Icon บ น Title Bar ดยย ซ ง Visual Basic บ�งเวอรชนจะแสดงใหเหนเมอกำ�หนดค� Properties ไดเลย แตบ�งเวอรชนจะ
8
Microsoft Visual Studio 2010
เหนกตอเมอรนโปรแกรมเท�นน Caption เปนก�รกำ�หนดขอคว�มใหแสดงบน Title Bar Icon เปนก�รกำ�หนดรปภ�พใหแสดงบนมมซ�ยของ Title Bar
ซงไฟลร ปภ�พจะตองเปนไฟลทมน�มสกล .ico หรอ .cur เท�นน
KeyPreview เปนก�รกำ�หนดใหมก�รตรวจสอบก�รกดแปนคยบอรด ซงจะกำ�หนดใหเปน True กตอเมอเร�จะทำ�ใหมก�รกดแปน Enter แลว เคอรเซอรจะเลอนไปยง Control อน ๆ ได
StartupPosition
เปนก�รกำ�หนดตำ�แหนงฟอรมเมอรนโปรแกรม หรอเมอเปดฟอรม ซงสวนใหญกกำ�หนดใหเปน Center Screen คอจะอยตรงกล�งหน�จอทกครงเมอเปดฟอรมนขนม�
WindowsState
เปนก�รกำ�หนดขน�ดของฟอรมเมอทำ�ก�รเปดฟอรมขนม�ทำ�ง�น ซงกจะมNormal = จะมขน�ดเท�กบทไดออกแบบไวMinimize = จะมขน�ดเลกหรอจะทำ�ก�รยอไวท Task BarMaximize = จะขย�ยฟอรมใหเตมหน�จอ
LabelLabel เปน Control ทใชสำ�หรบแสดงผลขอคว�มต�ง ๆ เพอสอ
กบผใชง�นโปรแกรมไดง�ยขนจะม Properties ทคล�ย ๆ กนกบ Control ตวอน ๆ ในกลมของก�รแสดงลกษณะของ Control ซงไดแก Appearance , Backcolor ช อ Properties
ค�ของ Properties
Name ใชกำ�หนดชอใหกบ Label Autosize เปนก�รกำ�หนดกรอบของ Label ใหมขน�ดพอดก บ
จำ�นวนตวอกษร โดยจะปรบขน�ดไดเองอตโนมตBackStyle คอก�รกำ�หนดรปแบบของพนหลง มค� 2 ค�คอ
0 - Transparent ทำ�ใหเสมอนขอคว�มลอยอยไมม
9
Microsoft Visual Studio 2010
พนหลง 1 – Opaque ทำ�ใหขอคว�มมพนหลง ซงจะส�ม�รถกำ�หนดสต�ง ๆ ได
Text ใชกำ�หนดขอคว�ม
TextBox เปน Control ทอนญ�ตใหผใชโปรแกรมส�ม�รถระบขอมลต�ง ๆ เพอบนทกค� หรอสงค�ลงไปยงโปรแกรม และกส�ม�รถแสดงขอมลทมอยในโปรแกรมได ซงม Properties ทน�สนใจดงนช อ Properties
ค�ของ Properties
Name ใชกำ�หนดชอของ TextBox ซงตองใหเปนไปต�มกฎในก�รตงชอตวแปร มคว�มย�วไดไมเกน 255 ตวอกษร ขอแนะนำ�คอ ควรตงชอใหเหม�ะสมกบลกษณะก�รทำ�ง�นของ TextBox เอง
Appearance 0-Flat หม�ยถง ก�รแสดงฟอรมแบบปกต โดยไมใช Visual Effect1-3D หม�ยถง ก�รแสดงในรป 3 มต ซงโดยปกจะใชแบบน
Backcolor คอก�รกำ�หนดสพนหลงของฟอรมBorderStyle คอก�รกำ�หนดรปแบบของกรอบ ซงจะม 2 ค�คอ
0 – None คอไมใหมกรอบ1 – Fixe Single คอใหมกรอบ
Locked เปนก�รกำ�หนดให TextBox ไมส�ม�รถระบขอมลใด ๆ ได
MaxLength คอก�รกำ�หนดให TextBox ส�ม�รถรบขอมลไดกตวอกษร โดยผออกแบบส�ม�รถระบตวเลขลงไปไดเลย แตถ�ห�กตองก�รแบบไมจำ�กด กใหระบตวเลข 0
MultiLine ใชกำ�หนดให TextBox ส�ม�รถรบขอมลไดหล�ยบรรทด ซงโดยปกตแลว TextBox จะส�ม�รถรบขอมลไดเพยงบรรทดเดยวเท�นน ซงจะม 2 ค� คอ True คอส�ม�รถรบไดหล�ยบรรทด และ False รบไดบรรทดเดยว
10
Microsoft Visual Studio 2010
PasswordChar
ใ ช ก ำ� ห น ดอ ก ษ ร แ ส ด ง แ ท น ข อ ม ล ท ผ ใ ช ร ะ บ โ ด ย Properties นจะใชในกรณผออกแบบจะใช TextBox ตวนระบ Password
Text เปน Properties ประจำ�ตวของ TextBox ทเกบค�หรอแสดงค�ขอมลต�ง ๆ ทปร�กฏใน TextBox ทงหมด
CommandButtonเปน Control ทกำ�หนดใหผใชคลกเลอกเพอจะใหโปรแกรมทำ�ง�น
ต�มทตองก�ร หรอเพอดำ�เนนก�รอย�งใดอย�งหนง Command Button เปนม�ตรฐ�นของก�รเขยนโปรแกรมบน Windows เปน Control ทจะตองมในทก Form ทไดทำ�ก�รออกแบบไวในสวนของก�รออกแบบโปรแกรม Properties ทน�สนใจมดงนช อ Properties
ค�ของ Properties
Default เปนก�รกำ�หนดใหปมพรอมทจะใหผใชกดแปน Enter หรอคลกได เสมอนกบว� Cursor ไปกระพรบอย ณ ปมนนเลยกว�ได
Caption ใชกำ�หนดขอคว�มใหกบปม เพอใหผใชรว �ปมนใชทำ�อะไร ซงในก�รกำ�หนด Caption น ถ�ตองก�รใหมขดเสนใตทตวอกษรใด กเพยงแตใสสญลกษณ & ไวทหน�ตวอกษรตวนน แตตองไมเปนตวอกษรตวเดยวกนบนฟอรมเดยวกน เนองจ�กว� Windows จะอนญ�ตใหผใชกดแปน Alt+ตวอกษรตวทขดเสนใตเชน OK ถ�ห�กไมต องก�รคลกทปมน ก ส�ม�รถกดแปน Alt+O ได เปนตน
Backcolor,Picture
เป นสวนของก�รแสดงแบบสสน หรอร ปภ�พ แทนขอคว�มหรอรวมกบขอคว�มบนปมกได แตตองใชควบคกบ Properties Style
Style ใชเลอกรปแบบก�รแสดง ซงม 2 แบบคอ0 – Standard เปนลกษณะปมทว ๆ ไป1 – Graphic ส�ม�รถกำ�หนดสพนหลง และ ใสรปภ�พ
11
Microsoft Visual Studio 2010
ไดText ใชกำ�หนดขอคว�มใหกบปม
Option Buttonเปน Control ทใชสำ�หรบใหผใชส�ม�รถเลอกไดเพยงอย�งเดยว
ไมว�จะมกท�งเลอกกต�ม โดยม Properties ทน�สนใจดงนช อ Properties
ค�ของ Properties
Caption ใชกำ�หนดขอคว�ม เพอใหผใชไดทร�บStyle ใชเลอกรปแบบก�รแสดง ซงม 2 แบบคอ
0 – Standard เปนลกษณะปมทว ๆ ไป1 – Graphic ส�ม�รถกำ�หนดสพนหลง และ ใสรปภ�พไดและจะมลกษณะเหมอน CommandButton แตโดยสวนใหญไมแนะนำ�ใหใชนะ มนไมเปนม�ตรฐ�น
Value เปน Properties ทใชทดสอบก�รเลอก ซงมอย 2 ค� คอTrue เมอโดยคลกเลอกFalse เมอไมไดเลอก
Check Box เปน Control ทใชสำ�หรบใหผใชเลอกเหมอนกบ OptionButton แตจะส�ม�รถเลอกไดหล�ยท�งเลอก Properties ทน�สนใจมดงนช อ Properties
ค�ของ Properties
Caption ใชกำ�หนดขอคว�ม เพอใหผใชไดทร�บStyle ใชเลอกรปแบบก�รแสดง ซงม 2 แบบคอ
0 – Standard เปนลกษณะปมทว ๆ ไป1 – Graphic ส�ม�รถกำ�หนดสพนหลง และ ใสรปภ�พไดและจะมลกษณะเหมอน CommandButton แตโดยสวนใหญไมแนะนำ�ใหใชนะ มนไมเปนม�ตรฐ�น
Value เปน Properties ทใชทดสอบว�ผใชเลอกหรอยง ซงมอย 3 ค� คอ
12
Microsoft Visual Studio 2010
0 - UnChecked เมอไมไดเลอก คอ ชองสเหลยมจะไมมเครองหม�ยถก1 - Checked เมอผใชเลอก2 – Gray จะเปนลกษณะ Disable ไมอนญ�ตใหคลกเลอกได
Combo Boxเปน Control ทจะส�ม�รถบรรจร�ยก�รเพอใหผใชเลอกร�ยก�รท
บรรจอยใน Combo Box ได ซงจะส�ม�รถแสดงร�ยก�รไดเพยงหนงบรรท ดเท �น น ซ งจะมล กษณะเหมอน Text Box ในบ�งสวน ในกระบวนก�รออกแบบนน จะส�ม�รถขย�ยไดเพยงด�นกว�งเท�นน ด�นสงจะไมส�ม�รถขย�ยได Properties ทน�สนใจมดงนช อ Properties
ค�ของ Properties
items ใชบรรจร�ยก�รทตองก�รใหผใชเลอก ซ งลกษณะก�รบรรจร�ยก�รนนกส�ม�รถคลกท Properties List จ�กนนกจะมกรอบเลก ๆ เพอทจะใหเร�พมพร�ยก�รทตองก�รบรรจเข�ไป ซงจะมองเปน 1 บรรทด / 1 ร�ยก�ร
Lock ไมอนญ�ตใหผใชคลกเลอกร�ยก�รไดSort อนญ�ตใหมก�รเรยงลำ�ดบร�ยก�รหรอไม ซงจะเรยงจ�ก
นอยไปม�กเสมอText ใชแสดงขอคว�ม เมอทำ�ก�รเปดฟอรมและ Control
พรอมทจะทำ�ง�น
List Boxเปน Control ทมจดประสงคเดยวกนกบ Combo Box เพยง
แตต�งกนแค รปแบบก�รแสดงผลตอผใช ซ ง List Box จะส�ม�รถแสดงไดหล�ยบรรทด แตจะส�ม�รถเลอกไดเพยง 1 ร�ยก�รเชนกน ซงถ�ห�กมร�ยก�รขอคว�มทมคว�มย�วหรอจำ�นวนม�ก List Box นจะสร�ง Scroll Bar ม�ใหโดยอตโนมต Properties ทน�สนใจมดงน
13
Microsoft Visual Studio 2010
ช อ Properties
ค�ของ Properties
Columns ใชกำ�หนดจำ�นวน Column เพอแสดงใน List Box โดยถ�ห�กเปน Column เดยวกจะกำ�หนดตวเลขใหมค� 0 ถ�ตองก�ร 2 Column กกำ�หนดเปนเลข 1 เชนนไปเรอย ๆ
items ใชบรรจร�ยก�รทตองก�รใหผใชเลอก ซ งลกษณะก�รบรรจร�ยก�รนนกส�ม�รถคลกท Properties List จ�กนนกจะมกรอบเลก ๆ เพอทจะใหเร�พมพร�ยก�รทตองก�รบรรจเข�ไป ซงจะมองเปน 1 บรรทด / 1 ร�ยก�ร
Style ใชเลอกรปแบบก�รแสดง ซงม 2 แบบคอ0 – Standard ร�ยก�รทบรรจอยจะแสดงเปนบรรทดธรรมด� ส�ม�รถเลอกร�ยก�รไดเพยง 1 ร�ยก�ร1 – Checkbox จะแสดงแต ละร�ยก�รเหมอนก บ Check Box และส�ม�รถเลอกร�ยก�รไดม�กกว� 1 ร�ยก�ร
Properties รวม สำ�หรบหวขอนไดแยกม� เนองจ�กว�ม Properties บ�งจำ�พวก
ทมในทก ๆ Control ผแตงกเลยเอ�ม�อธบ�ยไวสวนท�ยเลย เพอใหดง�ยม�กขนนนเองนะครบ ดงนครบผมช อ Properties
ค�ของ Properties
Name ใชกำ�หนดชอใหกบ Control ซงเปนสวนสำ�คญและจำ�เปนอย�งยง เหมอนกบก�รประก�ศตวแปรนนแหละ ซ งจะตองเปนไปต�มกฎก�รตงช อ และมคว�มย�วไดไมเกน 255 ตวอกษร หลกสำ�คญ ตองตงชอ Control ใหตรงกบง�น เนองจ�กว� ชอ Control เหล�น เร�จะนำ�ไปสก�รเขยนโปรแกรม
Appearance เปนโหมดของก�รแสดงผลหน�ต�ของ Control ตวนน
14
Microsoft Visual Studio 2010
ซ งแต ละ Control กจะมไม เท �ก น ใหทดสอบดได เนองจ�กว�เร�จะเหนผลก�รเปลยนแปลงในขณะทเร�เปลยนค�ในหน�ต�ง Properties เลย
Backcolor ใชกำ�หนดสพนหลง โดยกขนอยก บชนดของ Control นน ๆ
DataField, DataMember, DataSource,DataFormat
เปนกลมของ Properties ทใชเชอมกบฐ�นขอมล ซงจะม ร � ย ล ะ เ อ ย ด ใ น ห ล ก ส ต ร Visual Basic with Database (มในบ�ง Control เท�นนนะครบ)
Enabled ใชกำ�หนดให Control นนส�ม�รถใชง�นไดหรอไม True - ใชง�นต�มปกตFalse – ใชง�นไมได แตแสดงทฟอรม
Font ใชกำ�หนดชนดและขน�ดของตวอกษรForeColor ใชกำ�หนดสของตวอกษรHeight , Width
กำ�หนดคว�มกว�งและคว�มสงของ Control ตวนน ซงตวเลขจะเปลยนต�มทเร�ว�ด Control ลงบนฟอรม หรอ ส�ม�รถระบตวเลขไดเลย
MouseIcon คอก�รแสดงรปเม�ส เมอเลอนเม�สไปสวนใดสวนหนงข อ ง ฟ อ ร ม โ ด ย จ ะ ใ ช ค ก น ก บ Properties MousePointer
MousePointer
คอก�รแสดงรปเม�ส ท Visual Basic จดม�ให โดยจะมอย 16 ค� (0-15) และ ค� 99 ห�กผใชตองก�รแสดงรปอน ๆ ทนอกเหนอจ�กท Visual Basic กำ�หนดม�ให โดยเมอกำ�หนดค�เปน 99 – Custom แลว กส�ม�รถไปเลอกรปท Properties MouseIcon ได โดยไฟลจะตองเปนน�มสกล .ico หรอ .cur เท�นน
Index ใชสำ�หรบ Control Array (ร�ยละเอยดในหวขอตอไป)TabIndex เปนลำ�ดบของ Control ทว�ดลงบนฟอรม ทงน ห�ก
เขยนโปรแกรมเพอก�รกดแปน Enter ลำ�ดบก�รเลอนของ Cursor จะไปต�ม Properties ตวน แหละครบ
15
Microsoft Visual Studio 2010
เพร�ะฉะนน ห�กตองก�รลำ�ดบทเปนขนตอน กส�ม�รถเปลยนค�ได โดยจะเรมตนทค� 0
ToolTipText เปนก�รแสดงขอคว�ม เมอเอ�เม�สไปชบน Control ตวนน ๆ
Visible กำ�หนดใหซอนหรอแสดง Control
16
Microsoft Visual Studio 2010
บทท 2การเขยนคำาสงภาษา VB.NET
โครงสรางของคำาสงภาษา VB.NET 2010
กฎของการตงชอก�รตงชอในภ�ษ� VB ใชสำ�หรบก�รตงชอใด เชน ชอตวแปร ชอ
คล�ส ชอ Method โดยจะตองมกฎเกณฑดงตอไปน1. ไมขนตนดวยตวเลขหรออกขระพเศษ2. ไมมอกขระพเศษ3. ไมมชองว�ง4. ส�ม�รถใชตวอกษรดงตอไปน (a – z, A – Z , 0-9 _ (ขด
ล�ง) ) เท�นน5. อกษรตวพมพเลก และ ตวพมพใหญ VB ถอว�เปนตวเดยวกน
เชน a, A 6. ไมซำ�กบคำ�สงวน (Reserve word )ของภ�ษ� VB7. ส�ม�รถใชอกขระได 255 ตวอกษรตอก�รตงชอ 1 ชอ
ตวอย�งทถกตองHello, Test, Exam, Total, Net, SPC, V1, V3,
Balance_score, MidtermScoreตวอย�งทไมถกตอง
1Hello, Test%, E*xam, Balance score, MidtermScore”]ตวอย�งคำ�สงวนของ VB
17
Microsoft Visual Studio 2010
คำ�เหล�นจะไมส�ม�รถนำ�ไปตงชอไดตวแปร ( Variable)
ตวแปรคอพนทในหนวยคว�มจำ�หลกทผเขยนโปรแกรมส�ม�รถจองไวส ำ�หรบเก บผลลพธท เก ดจ�กโปรแกรม ทกภ�ษ�ทใชเขยนโปรแกรมจะตองมก�รใชตวแปรนะครบ ซงใน VB มรปแบบก�รประก�ศตวแปรดงนตวแปรตวเดยว
ตวแปรหล�ยตวทเปนชนดเดยวกน
เมอเร�ไดกำ�หนดระบบปฏบตก�รจะทำ�ก�รเกบพนทในหนวยคว�มจำ�หลกไวสำ�หรบตวแปรทเร�กำ�หนดขน ไมมใครทจะส�ม�รถเข�ไปใชง�นพนทหนวยคว�มจำ�ในสวนของเร�ได ซงระบบปฏบตก�รจะจองพนทหนวยคว�มจำ�ไวเท�ใดนนกขนอยกบชนดของตวแปรนน โดยชนดตวแปรและขน�ดของชนดนนมดงน
1. ตวเลขจำ�นวนเตม ไดแก byte, short, int ,long2. เลขจำ�นวนจรง ไดแก float , double3. ตวอกษร ไดแก char, String4. ค�ตรรกะ ไดแก boolean
สำ�หรบชนดต�ง ๆ นนจะมขน�ดของขอมลทต�งกนดงรป
Dim ชอตวแปร As ชนด
Dim ชอตวแปร 1, ชอตวแปร 2, ชอตวแปร 3, ... As ชนดตวแปร
18
7
C
150.25
Pitchaya
numbername
money
s
Microsoft Visual Studio 2010
ก�รกำ�หนดตวแปร ม 2 แบบ1. กำ�หนดตวแปรแบบว�ง
ตวอย�ง Dim number As Integer numberจ�กตวอย�งนกจะไดตวแปรว�ง ๆ 1 ตวชอ number
2. กำ�หนดตวแบบกำ�หนดค�เรมตนดวยตวอย�ง Dim number As integer=7;
Dim name As Char =’C’;Dim money As Float=150.25;String s=”Pitchaya”;
สำ�หรบตำ�แหนงของก�รกำ�หนดตวแปร ในภ�ษ� VB ไมไดกำ�หนดต�ยตวแนนอน แตจะมเรองของขอบเขตของตวแปรม�เกยวของซงจะไดอธบ�ยตอไปเครองหมายดำาเนนการ
หม�ยถงเคร องหม�ยต�ง ๆทตองก�รประมวลผล ไมว �จะเปนตวเลขหรอตวอกษร มดงน
- บวก ( + ) - ลบ ( - )- คณ ( * )- ห�ร ( / )- ห�รเอ�เศษ ( % )
ลำาดบความสำาคญของเครองหมายคอมพวเตอรจะใหลำ�ดบคว�มสำ�คญของเครองหม�ยซงถ�ห�ก พบ
เครองหม�ยทหล�ย ๆ เครองหม�ยในบรรทดเดยวกน กจะเลอกทำ�กบเครองหม�ยทสำ�คญกว� ซงเรยงลำ�ดบดงน
( ) ,* , / , % , + , - เชน
19
Microsoft Visual Studio 2010
การใสหมายเหตบ�งครงก�รเขยนโปรแกรม ผเขยนเองกตองใสหม�ยเหตไปดวย
ซงหม�ยเหตนจะไมใชคำ�สงของภ�ษ� และ ตว Compiler เองกจะไมนำ�ไป Compile มรปแบบดงน
‘ บรรทดหม�ยเหต
การเขยนโปรแกรม
ก�รเขยนโปรแกรมภ�ษ� Visual Basic นบไดว�เปนภ�ษ�ทมคว�มง�ยทสดในบรรด�ทกภ�ษ�ทบรรจอยใน Visual Studio เนองจ�กว�มรปแบบทไมย�ก ไมมขอกำ�หนดหรอกฎเกณฑอะไรม�กม�ยนก และมเสนแบงระหว�ง Event เพอใหเหนง�ยอกดวย
สำ�หรบก�รเขยนโปรแกรม (Code) ใหกบโปรเจกของ Visual Basic ส�ม�รถแบงได 2 ประเภทใหญ ๆ คอ 1. ก�รเขยนโปรแกรมกบ Control และ 2. ก�รเขยนโปรแกรมดวยคำ�สงต�ง ๆ ของ Visual Basic ซงกอนอนกตองม�ทำ�คว�มคนเคยกบหน�ต�ง Code กอนนะครบวธก�รเรยก Code มหล�ยวธดวยกนครบ แตจะขอแนะนำ� 2 วธดงน
1. Double Click ท Control ใด ๆ กไดรวมทงฟอรมดวย
20
Microsoft Visual Studio 2010
2. คลกขว�เลอกชอฟอรมท Project Explorer แลวเลอกเมน View Code
1. ชอ Control หม�ยถง เปน Combo Box ทรวมร�ยชอ Control ทกต วท เร�ว�ดลงบนฟอรม โดยจะเอ� ช อท ม�แสดงจ�ก Properties Name ของทก Control ยกเวน ฟอรม อนเดยวเท�นนทยงคงใชคำ�ว� Form
2. ชอ Event กอนอน ตองม�ทำ�คว�มเข�ใจคำ�ว� “Event” กอนนะครบ Event ถ�แปลเปนภ�ษ�ไทยกแปลว� เหตก�รณ คอเหตก�รณ“ ”หนง ๆ ทเกดขนกบ Control ซงทก Control จะตองมเหตก�รณ เชน เหตก�รณ Click ของ Command Button หม�ยถง เมอผใชคลกทปม หรอ เหตก�รณ Load ของ Form หม�ยถง เมอฟอรมถกโหลดขนม� เปนตน ซงแตละ Control จะมเหตก�รณไมเหมอนกน เพร�ะฉะนน นกศกษ�ตองหมนฝกหดเองนะ โดยวธไมย�กครบ เพยงเขยน Code เข�ไปใน Event นน ๆ แลวลองรนโปรแกรมด กจะพบกบสงทเกดขน
3. สวนแสดง Code เปนสวนทแสดงใหเร�เหนว�เร�เขยน Code อะไรไว ของ Control พดง�ย ๆ ว� Event ใคร Event มน ว�งนเถอะ
4. Tab เปนสวนทแสดงหน� code และสวนทออกแบบ ไวคนละสวนกน ซ งผใชก ส�ม�รถคลกสลบไปม�ได โดยไมตอง double click ท control ทกครงห�กตองก�รไปแสดงหน�ต�ง code
การเขยนโปรแกรมควบคม Control
21
Microsoft Visual Studio 2010
หม�ยถงก�รเขยนโปรแกรมเพอควบคมคว�มคณสมบตของ Control ใหมคณสมบตเปนแบบไมคงทไดในขณะรนโปรแกรม ซงโดยปกต Control หนงๆ จะมคณสมบตเบองตนและในสวนทเร�กำ�หนดในหน�ต�ง Properties windowรปแบบของคำ�สง
หม�ยเหตตองรจกชอ Control ซง VB จะห�ชอ Control ใหกบเร� เมอเร�
พมพคำ�สงลงไป และเมอไดชอ Control แลวเร�กตองพมพต�มดวย จด (.) แลวหน�ต�ง Properties กจะปร�กฏขนม�ใหอตโนมต ดงตวอย�งตอไปนตวอย�ง
จ � ก Form1 ม Control Text Box แ ล ะ Command button อย�งละ 1 อน จ�กนนเร�จะเขยนโปรแกรมเพอกำ�หนดสพนหลงของ Text Box จ�กสข�ว ใหเปนส น ำ�เง น และใหมขอคว�มว � สวสด โดยเหตก�รณทงหมดจะเกดขนเมอเร�คลกทปม ส�ม�รถ“ ”ทำ�ไดดงนครบ
คณสมบตสวนอนกส�ม�รถกำ�หนดไดเชนเดยวกนครบ ซงสดท�ยแลวเร�กจะไดตวอย�งโคดโปรแกรมดงรป
ชอ Control.Property = ค�ทตองก�ร
22
Microsoft Visual Studio 2010
ผลลพธเมอรนโปรแกรม
สวนก�รเขยนโปรแกรมเพอควบคมคณสมบตของ Control ตวอนๆ กส�ม�รถทำ�ไดโดยใชหลกก�รเดยวกนนครบ
การเรยกใช Message Box MessageBox เปนรปแบบทสำ�คญของก�รเขยนโปรแกรมบน
Windows เนองจ�กเปนตวบรรจข�วส�รจ�กโปรแกรมแจงไปยงผใชง�น ไมว�จะเป น ข�วส�รทวไป หรอ ขอคว�มเตอนอนๆ มสวน
ประกอบดงน
รปแบบคำ�สง
ตวอย�งเมอคลกทปม กจะใหแสดง Message Box ขนม�ดงรป
รป
ปม
ขอคว�ม
ขอคว�มบน Title Bar
MessageBox.Show("ขอคว�ม","ขอว�มบน Titlebar",
23
Microsoft Visual Studio 2010
ซงโคดโปรแกรมกแสดงไดดงนMessageBox.Show("Hello","MessageTitlebar”, MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
การเขยนโปรแกรมดวยคำาสงตดสนใจใน VB มหล�ยคำ�สง แตจะยกม�เพยง 2 คำ�สงไดแก- if…else- select…case
คำาสง if…else รปแบบคำ�สง
รปแบบท 1 (เงอนไขเดยว)
รปแบบท 2 (2 เงอนไข)
ตวอย�งเป นโปรแกรมท ใชตรวจสอบค�ต วเลข 2 ค�ท ป อนเข�ไปใน
Textbox โดยใชเงอนไขเพอทดสอบว�ค�ไหนทม�กหรอนอยกว�กน ดงน
if เงอนไขทใชในก�รทดสอบ thenคำ�สง......(ทำ�ง�นเมอเงอนไข
เปนจรง)
if เงอนไขทใชในก�รทดสอบ thenคำ�สง...... (ทำ�ง�นเมอเงอนไขเปนจรง)
elseคำ�สง.....(ทำ�ง�นเมอเงอนไขเปนเทจ)
24
Microsoft Visual Studio 2010
เขยนโคดดงนครบ
จะสงเกตเหนว�ตวอย�งคำ�สง ใชตวแปร var1 และ var2 รบค�ทผใชระบผ�นเข�ม�ท�ง textbox ซงมก�รใช function ในก�รแปลงค�กอนเพอใหค�ทอยใน textbox นนส�ม�รถม�เกบไวในตวแปรได โดยจะขออธบ�ยหลกก�รดงตอไปน
1. โปรแกรมจะมองทกอย�งทอยใน textbox เปนขอมลชนดตวอกษรทงหมด
2. ห�กตองก�รเกบค�ทอยใน textbox ม�เกบไวในตวแปรกตองใช function ในก�รแปลง ทงนจะใช function ไหนกตองดชนดตวแปรทประก�ศเอ�ไวแตเบองตนดวย เชนVar1 และ var2 เปนชนดขอมลแบบ integer ดงนนจงใช function ในก�รแปลงคอ Integer.parse(ชอ textbox) เปนตน และเปนตวอย�ง
3. ห�กตองก�รนำ�ขอมลทเกบอยในตวแปรอนใดทไมใชตวอกษร เ ม อ จ ะ น ำ� ไ ป แ ส ด ง ท textbox ต อ ง ต อ ท � ย ด ว ย function .toString ดวยเสมอ
25
Microsoft Visual Studio 2010
คำาสง swith…case ใชสำ�หรบก�รทำ�ง�นทมหล�ยเงอนไข ซงจรงๆ แลวกใช if…else
กได แตถ�ห�กมหล�ยเงอนไขกใชคำ�สงนจะสะดวกกว�เยอะครบรปแบบคำ�สง
ตวอย�งเปนโปรแกรมทดสอบก�รพมพต วอกษรลงใน TextBox ซ ง
กำ�หนดใหพมพ a,b,c เท�นน ซงเมอพมพเสรจและคลกทปม โปรแกรมกจะแสดง MessageBox ม�ใหทร�บว�เร�พมพตวอะไรลงไป
การเขยนโปรแกรมดวยคำาสงวนรอบ
swith (เงอนไขทใชในก�รทดสอบ){
case (เงอนไขท 1) :// ทำ�ง�นทนbreak;case (เงอนไขท 2) :// ทำ�ง�นทนbreak;.....default ://ถ�ไมตรงกบเงอนไขใด กทำ�ตรงนbreak;
}
หม�ยเหต : ถ�เงอนไขตรงนเปน string ในคำ�สง case ตองมเครองหม�ยคำ�พดตรงค� ดง
26
Microsoft Visual Studio 2010
คำาสง for เปนคำ�สงวนรอบทใชสำ�หรบก�รสงใหโปรแกรมทำ�ง�นเดมๆ เปน
จำ�นวนครงต�มทตองก�ร เชน ตองก�รใหพมพชอตนเองม� 10 คร ง เปนตน ประโยชนของคำ�สงนกคอ ไมตองพมพหล�ยคำ�สงห�กตองก�รใหทำ�ง�นเดมๆ ซำ�ๆรปแบบคำ�สง
อธบ�ยเพมเตมคำ�สง for เปนคำ�สงทสงใหโปรแกรมทำ�ง�นเดมๆ ในจำ�นวนครงท
เร�ส�ม�รถกำ�หนดไดว�จะใหทำ�ง�นกรอบ โดยจะตองกำ�หนดค�เร มตนและค�สดท�ยของรอบทตองก�รทำ�ง�น โดยค�ทจะส�ม�รถกำ�หนดไดนนตองใชตวแปรซงจะตองเปนชนดเลขจำ�นวนเตม ซงจะสงเกตไดจ�กหลงคำ�สง for นนเองตวอย�ง
เปนโปรแกรมทตองก�รใหพมพคำ�ว� ประเทศไทย ออกม� “ ” 10 รอบ ใน List Box เมอผใชคลกทปม
for ตวแปร(integer)=ค�เรมตน to ค�สดท�ย
คำ�สง.....Next ตวแปร
27
Microsoft Visual Studio 2010
อธบ�ยคำ�สงDim i As Integer เปนก�รประก�ศตวแปร i เพอใชเปนตวนบ
รอบFor i=1 to 10 ใชกำ�หนดจำ�รวนรอบ 10 รอบListBox1.Items.Add(“ประเทศไทย”) เปนคำ�สงทใหเพมคำ�ว�
ประเทศไทยเข�ไปใน ListboxNext i ใชคกบ for โดยตองเปนตวแปรตวเดยวกน
เมอเขยนโปรแกรมเสรจกลองรนโปรแกรมดนะครบ ซงกจะไดผลดงน
ตวอยางท 2 ( คำาสง for) คล�ยกบตวอย�งแรกนนแหละครบ แตครงนจะใหแสดงรอบออก
ม�ดวย ซงนนกคอแสดงค�ของตวแปร i นนเอง โดยใหออกแบบหน�จอโปรแกรมเหมอนเดม เพยงแตเปลยนโคดใหเปนดงนครบ
มหนงบรรทดคำ�สงทเปลยนแปลง คอ ListBox1.Items.Add("ประเทศไทย รอบท : " & i)
ซงผลรนโปรแกรมกจะไดดงตวอย�ง
28
Microsoft Visual Studio 2010
คำาสง while เปนคำ�สงวนรอบอกคำ�สงหนง ทไมไดกำ�หนดรอบไวตงแตเร มตน
แตเปนก�รกำ�หนดเงอนไขทใหทำ�คำ�สงเดมซำ�ๆ ตร�บเท�ทเงอนไขเปนจรงๆ ซงโปรแกรมจะทำ�ก�รตรวจสอบเงอนไขกอนทจะเข�ไปทำ�ง�นใน block คำ�สง ห�กโปรแกรมพบว�เงอนไขเปนเทจกจะออกจ�กก�รทำ�ง�นแบบวนรอบนรปแบบคำ�สง
ตวอย�ง เปนลกษณะเหมอนกบคำ�สง for นะครบ โดยจะทำ�ก�รตรวจสอบ
เงอนไขกอนทจะทำ�ง�น ดงนนลองสร�งหน�จอโปรแกรมดงตวอย�งคำ�สง for และเขยนโคดดงตวอย�ง
while เงอนไขคำ�สง.....
ก�รเพมค�...End while
29
Microsoft Visual Studio 2010
อธบ�ยคำ�สงDim i As Integer เปนก�รประก�ศตวแปร i เพอใชเปนตวนบ
รอบWhile i<11 เมอ i มค�นอยกว� 11 กใหทำ�ง�นListBox1.Items.Add(“ประเทศไทย รอบท : ”& i) เปนคำ�สง
ทใหเพมคำ�ว�ประเทศไทยเข�ไปใน Listbox โดยใหแสดงรอบดวยi=i+1 เพมค� i เพอใหจำ�นวนรอบเพมขนทละ 1 End while จบคำ�สง while
สำ�หรบคำ�สง while นอ�จจะประยกตใชกบฐ�นขอมลไดเชนกน โดยอ�จจะใชสำ�หรบก�รแสดงขอมลในฐ�นขอมล เชน ใหอ�นขอมลจนกว�จะหมด เปนตน
คำาสง do…while เปนคำ�สงวนรอบอกคำ�สงหนง ทไมไดกำ�หนดรอบไวตงแตเร มตน
แตเปนก�รกำ�หนดเงอนไขทใหทำ�คำ�สงเดมซำ�ๆ ตร�บเท�ทเงอนไขเปนจรงๆ รปแบบคำ�สง
ลองเขยนคำ�สงดงตวอย�งดงน แลวลองรนโปรแกรมดนะครบ
Do while เงอนไขคำ�สง.....
Loop
30
Microsoft Visual Studio 2010 31
Microsoft Visual Studio 2010
บทท 3การโปรแกรมเชงวตถ
Object Oriented Programming
เปนแนวก�รเขยนโปรแกรมทเปนก�รแกปญห�แบบมองเปนวตถ ซ งวตถเองกจะประกอบดวยสวนหลกๆ 2 สวนไดแก คณสมบตและหน�ท และในโปรแกรมหนงๆ มหล�ยวตถกจะส�ม�รถเรยกใช สบทอด หรอเข�ถงวตถใดๆ ไดต�มตองก�ร (ขนกบขอกำ�หนดและวธก�ร)
Classเปนกลมของ Object ทประกอบดวย 2 สวนคอ- คณสมบต (Attribute)- หน�ท (Method)
ตวอย�ง ClassClass คน Attribute
o สวนสงo นำ�หนกo แขนo ข�o สผวo อ�ย
Methodo กนo เดนo นอนหลบo ฯลฯ
Class คอมพวเตอร Attribute
32
Microsoft Visual Studio 2010
o CPUo RAMo VGAo ฯลฯ
Methodo คำ�นวณเลขไดo เกบขอมลo แสดงผลo ฯลฯ
ในท�งโปรแกรมไมส�ม�รถดำ�เนนก�รกบ Class ตรงๆ ไดตองดำ�เนนก�รผ�น Object
การเขยน Class โดยใช VB
33
Microsoft Visual Studio 2010
ตอไปเร�กตองเขยนโคดเพอสร�ง Class ซงจะขอยกตวอย�งเปน Class รปสเหลยมนะครบ ซ งประกอบดวย Attribute (กว�ง ย�ว พนท) และม Method (รบค�คว�มกว�ง รบค�คว�มย�ว คำ�นวณพนท) ซงจะไดโคดดงน
Objectเปนตวแทนของ Class ซงมรปแบบก�รสร�ง ดงน
การสราง Object และการเรยกใชดวย VB
Dim ชอ Object As New ชอ
34
Microsoft Visual Studio 2010
Visibilityหม�ยถงขอบเขตของก�รเข�ถง ไมว�จะเปนตวแปร หรอ Method
ซง Visibility นจะเปนสงสำ�คญม�กในก�รเขยนโปรแกรมแบบเชงวตถ เพร�ะคณสมบตทเรยกว� Encapsulation นนเอง โดยในเร องของ Visibility ส�ม�รถแบงออกเปน
1. Private หม�ยถง ถ�ประก�ศ Visibility นไวหน�ตวแปรหรอ Method กจะมเพยงใน Class เดยวกนเท�นนทส�ม�รถเข�ถง ตวแปร และ Method นได
2. Protected หม�ยถง ถ�ประก�ศ Visibility นไวหน�ตวแปรหรอ Method กจะมเพยง Class เดยวกนและ Class ทสบทอดตอไป ทจะส�ม�รถเข�ถงได
3. Public หม�ยถง ถ�ประก�ศ Visibility นไวหน�ตวแปรหรอ Method ไมว� Class ใดๆ กส�ม�รถเข�ถงได
ตวอย�ง 1 Private name As String หม�ยถง ตวแปร name เปน
ชนด String ทส�ม�รถใชไดเฉพ�ะใน Class ทมนอยเท�นน
35
Microsoft Visual Studio 2010
หม�ยเหต แตโดยพนฐ�นแลว ใน Visual VB.NET ไมจำ�เปนตองประก�ศ Visibility เปน Private เนองจ�กโปรแกรมจดเปนค�เบองตนใหอตโนมต เชน
Dim name As String คำ�สงนจะมค�เดยวกนกบตวอย�งด�นบนตวอย�ง 2
Private void Add(int x, int y) คำ�สง..... คำ�สงนเปน Function ไมใชตวแปร แตทว�สทธก�รเข�ถงกเชน
เดยวกบตวอย�งด�นบนสำ�หรบ Visibility แบบอนๆ กเขยนคำ�สงคล�ยๆ กน เพยงแตเปลยน Visibility เท�นนเอง
36
Microsoft Visual Studio 2010
บทท 4การเขยนโปรแกรมกบฐานขอมล
Database Programming
ก�รเขยนโปรแกรมก บฐ�นขอม ลใน Visual Studio .NET 2010 จะเรยกว� ADO.NET มโครงสร�งดงรป
สำ�หรบก�รสร�งโปรแกรมเพอจดก�รฐ�นขอมลส�ม�รถทำ�ได 2 แบบใหญๆ ไดแก
1. เขยนคำ�สงควบคม2. ใชเครองมอสำ�หรบก�รควบคมและจดก�รฐ�นขอมล
เขยนคำาสงควบคม
OleDbConnection SqlConnection
OleDbCommand OleDbDataAdapter SqlCommand SqlDataAdapter
OleDbDataReader DataSet SqlDataReader
Window Form
Web Form
XML
37
Microsoft Visual Studio 2010
หลกก�รสร�งโปรแกรม1. สร�งฐ�นขอมล (จ�กโปรแกรม Database อย�งใดอย�ง
หนง)2. สร�ง Interface เพอตดตอกบฐ�นขอมล3. เขยนคำ�สง
การสรางฐานขอมล (MS Access)เร มต นดวยก�รเป ดโปรแกรม Access ข นม�แลวสร�งต�ร�งดงตวอย�ง (ทแสดงเปน Access version 2003)
38
Microsoft Visual Studio 2010
การสราง Interface เพอตดตอกบฐานขอมล
39
Microsoft Visual Studio 2010
สดท�ยแลวกจะไดหน�จอดงนครบ
40
Microsoft Visual Studio 2010
จะพบว�ชอคอลมนของ DataGridView จะเปนชอ Field ทเร�ไดสร�งในฐ�นขอมลซงเร�กส�ม�รถแกไขใหเปนภ�ษ�ไทยไดนะครบ ดงน
Data GridViewการแกไข DataGridView
แลวกจะไดหน�จอดงน
การเขยนคำาสงควบคมเมอไดดงนแลว ตอไปจะเปนก�รเขยนคำ�สงเพอควบคมก�รทำ�ง�นทงหมด โดยจ�กตวอย�งในคมอชดนจะมก�รทำ�ง�นเปนลำ�ดบสำ�คญๆ ดงน
- ปม เพมใหม ทำ�หน�ทล�งขอคว�มทอยใน “ ” textbox ทงหมดใหเปนชองว�งและให cursor ไปกระพรบอยท TextBox ตวแรก (รหสนกศกษ�) เพอรอรบขอมลจ�กผใช
- ปม บนทก ทำ�หน�ทบนทกขอมลใหมลงไปในฐ�นขอมล โดย“ ”เมอบนทกขอมลเสรจแลวกจะเรยกใชค ำ�สงก�รทำ�ง�นของปม
41
Microsoft Visual Studio 2010
เพมใหม เพอทำ�ให “ ” TextBox เปนชองว�ง และจะปรบปรงขอมลใน DataGridView เปนขอมลทเปนปจจบน
- ปม แกไข ทำ�หน�ทบนทกก�รแกไขขอมลเดม โดยก�รแกไข“ ”นนหม�ยถงก�รปรบปรงขอมลทมอยเดมใหมก�รเปลยนแปลงและจะตองทำ�ก�รคนห�ขอมลกอน ซงโดยต�มหลกเกณฑแลวไมควรแก field ทเปน primary key
- ปม ลบ ทำ�หน�ทลบขอมลออกจ�กฐ�นขอมล โดยจะตอง“ ”ทำ�ก�รคนห�ขอมลกอน ซงก�รลบกใหม MessageBox ถ�มเพอยนยนคว�มแนใจในก�รลบ
- ปม คนห� ทำ�หน�ทคนห�ขอมล โดยผใชจะระบชอนกศกษ�“ ”เข�ไปใน TextBox โดยโปรแกรมนนใหระบตวอกษรตวใดตวหนงกได
- ปม เลอก ทำ�หน�ทเอ�ขอมลทอยใน “ “ DataGridView ทผใชเลอกไปแสดงใน TextBox
- ปม ปด ทำ�หน�ทในก�รปดฟอรม“ ”เขยนโคดไดดงตวอย�ง ต�มลำ�ดบดงนนะครบStep 1
เพมคำ�สงทใชสำ�หรบก�รตดตอฐ�นขอมล ดงตวอย�ง
ตองเพมคำ�สงดงกล�วไวด�นบนสดของหน�ต�งโคดเท�นนนะครบ
Step 2 ประก�ศตวแปรทจะใชสำ�หรบก�รตดตอกบฐ�นขอมล
42
Microsoft Visual Studio 2010
Step 3 เขยนคำ�สงเพอตดตอกบฐ�นขอมล โดยกำ�หนดไวท Form_Load
หม�ยถงเมอ Form นนถกเปดขนม�กใหตดตอกบฐ�นขอมล
Step 4 เขยนคำ�สงเพอดำ�เนนก�รกบปมต�งๆ
ปม บนทก
Function clrtxt()
43
Microsoft Visual Studio 2010
Function callGrid()
ปม เพมใหม“ ”
ปม ปด“ ”
ปม แกไข“ ”
ปม ลบ“ ”
ปม คนห�“ ”
44
Microsoft Visual Studio 2010
ปม เลอก“ ”
Event “TextBox1_Change “
*** ก�รเขยนโปรแกรมเพอจดก�รฐ�นขอมลใน Visual Studio 2010 มม�กม�ยหล�ยวธ และในคมอฉบบนกเปนเพยงแควธหนงเท�นน และคงเปนรปแบบทง�ยตอก�รทำ�คว�มเข�ใจ มรปแบบทง�ย ลองศกษ�และลองปฏบตดแลวกนนะครบ*** คำ�สงทเกยวของกบภ�ษ� SQL ใหไปดร�ยละเอยดในหวขอเร อง ภ�ษ� SQL ในสวนท�ยของคมอเลมนนะครบ
45
Microsoft Visual Studio 2010
บทท 5การสราง Report, Menu bar และ
Tool barการทำารายงานดวย Crystal Report ก�รทำ�ร�ยง�นเปนสวนสำ�คญในก�รทำ�โปรแกรม เพร�ะว�ขอมลทงหมดทอยในโปรแกรม ทเกดจ�กก�รประมวลผลต�งๆ ในโปรแกรม จะนำ�ม�ใชไดหรอไมไดกอยทร�ยง�นนแหละครบ สำ�หรบ Visual Studio 2010 จะบรรจ Crystal Report ม�ด วยอย แล ว ด งน น เม อลงโปรแกรม Visual Studio 2010 กจะได Crystal Report ม�ดวย
Crystal Report เ ป น โ ป ร แ ก ร ม ท ใ ช จ ด ท ำ� ร � ย ง � น ท ม ประสทธภ�พม�กและมร�ยละเอยดคอนข�งม�ก สำ�หรบในคมอฉบบนจะแนะนำ�เพยงก�รสร�งร�ยง�นเบองตนเท�นน ลองศกษ�ดนะครบ
Step 1 สร�งไฟลร�ยง�น
46
Microsoft Visual Studio 2010
จ�กนนจะม Crystal Report ปร�กฏขนม�ในโปรแกรมเร�ดงน
สำ�หรบสวนร�ยง�นมสวนประกอบดงนReport Header = ใชกำ�หนดหวร�ยง�น จะแสดงในหน�แรกของร�ยง�นเท�นนPage Header = ใชกำ�หนด หวกระด�ษ ซงจะมในทกหน�Details = ใชกำ�หนดสวนแสดงร�ยละเอยดของร�ยง�น หรอสวนแสดงขอมลนนเองReport Footer = ใชกำ�หนดสวนท�ยกระด�ษ Page Footer = ใชก ำ�หนดสวนท�ยร�ยง�น จะปร�กฏเปนสวนสดท�ยเมอแสดงร�ยง�นเสรจสนแลว
Step 2 ตดตอฐ�นขอมล
47
Microsoft Visual Studio 2010
หลงจ�กนนโปรแกรมจะกลบม�ทหน�จอออกแบบ ซงเร�กจะพบว�ไดตดตอฐ�นขอมลเรยบรอยแลว โดยสงเกตไดดงรป
Step 3 ออกแบบหวร�ยง�น
48
Microsoft Visual Studio 2010
ออกแบบหวคอลมนร�ยง�น ใหทำ�ต�มขนตอนเดม หรอ คดลอก Text Object จ�กตวเดมกได โดยนำ�ม�ว�งไวในสวนของ Page Header สดท�ยกจะไดต�มตวอย�งดงน
Step 4 ใส field ขอมล
เปนสวนทสำ�คญ เพร�ะขอมลจะแสดงหรอไมแสดงกอยทสวนน หลกก�รง�ยๆ กเพยงแคล�ก field ม�ว�งไวในสวน Details ในร�ยง�นแคนนเอง
สดท�ยทผ�นก�รว�ง field และตกแตงเรยบรอยแลว ซงกจะส�ม�รถแสดงตวอย�งขอมลได ดงตวอย�งหน�จอ
Step 5 ก�รนำ�ร�ยง�นเข�ม�ใชบน Form
49
Microsoft Visual Studio 2010
สดท�ยกจะได Form ทจะใชสำ�หรบเปน Report ดงรป
นเปนตวอย�งก�รสร�งร�ยง�นดวย Crystal Report อย�งง�ย ผทสนใจกส�ม�รถศกษ�เพมเตมไดนะครบ โดย Crystal Report มคว�มส�ม�รถม�กม�ยและมร�ยละเอยดเยอะ ลองใชดครบแลวจะชอบ
การทำา Menu bar และ Tool barเปนม�ตรฐ�นของก�รเขยนโปรแกรมแบบ Windows Application ซงจะตองมทงเมนและทลบ�ร ลองศกษ�ดนะครบ Step 1
ก�รทำ�ฟอรมแม (MDI From)
50
Microsoft Visual Studio 2010
Step 2 ก�รทำ�เมน
Step 3 ก�รทำ�ทลบ�ร
51
Microsoft Visual Studio 2010
Step 4 เขยนโคดกบเมนบ�ร ตองก�รเขยนกบเมนใดก double click
ทเมนนน
สำ�หรบเมนอนๆ กทำ�เชนเดยวกน อย�กใหเมนไหนทำ�ง�นอะไร กเขยนโคดทเมนนนครบ
Step 5 เขยนโคดกบทลบ�ร คล�ยกบเมนบ�ร ห�กตองก�รเขยนโคดกบ
ปมไหนก double click ทปมนนไดเลย จ�กนนกเขยนคำ�ส งควบคมไดต�มตองก�ร
52
Microsoft Visual Studio 2010
บทท 6ภาษา SQL
ภาษา SQL ภ�ษ� SQL เปนภ�ษ�ทใชสำ�หรบจดก�รฐ�นขอมล โดยภ�ษ�ทใช
เขยนโปรแกรมทมในปจจบนจะใชภ�ษ� SQL นเพอจดก�รขอมลทงนน โดยส�ม�รถนำ�ภ�ษ� SQL ใชรวมกบ Compiler ไดทกภ�ษ� ดงนนห�กมคว�มรคว�มเข�ใจในภ�ษ� SQL แลวกจะส�ม�รถพฒน�โปรแกรมทเกยวกบฐ�นขอมลไดอย�งมประสทธภ�พ
สำ�หรบเนอห�ในสวนน ไดนำ�เสนอคำ�สงพนฐ�นของภ�ษ� SQL ท จะส�ม�รถนำ�ไปใชไดในก�รเขยนโปรแกรม ไมไดนำ�เสนอทงหมด ลองศกษ�ดกนนะครบ
53
Microsoft Visual Studio 2010
คำาสงสำาหรบเรยกขอมลมรปแบบดงน
รปแบบท 1 Select field1,field2,fieldn.. from Table เปนคำ�สงสำ�หรบเรยกขอมลจ�กฐ�นขอมล โดย Select คอคำ�สง
Field นน เปนชอ Field ทเร�มในฐ�นขอมล โดยส�ม�รถเลอก Field เพอแสดงขอมลไดต�มทฐ�นขอมลม
From เปนคำ�สง ทบงบอกว� เร�เลอก Field จ�กต�ร�งขอมลไหน
Table คอ ชอต�ร�งฐ�นขอมลทเร�ตองก�รตวอย�งสมมตว�ในต�ร�งฐ�นขอมลชอ Employee ทเกบขอมลเกยวกบลกจ�งในบรษท โดยมต�ร�งขอมลดงน
ID NAME ADDRESS TEL SALARY
AC001
น .ส .อ น ง ค ใจด
123 ถ .ท ห � ร อ .เ ม อ ง จ.อดรธ�น
042-254615
7,500
MK001
น � ย ถ � ว ร วรด
145 ถ .อดร -สกล อ .เมอง จ.อดรธ�น
09-7821546
8,200
MK002
น.ส.ลกษณ อ�ทร
321/38 อ.เมอง จ.อดรธ�น 042-236457
8,500
BC001
น � ย ม ง ค ล ไปด
145 ห ม 2 ต .บ � น เ ล อ ม อ.เมอง จ.อดรธ�น
01-7121288
8,600
BC002
น � ย จ ง ร ก รกด
145 ถ.พฒน�ก�ร อ.เมอง จ.หนองค�ย
042-248665
8,900
BC003
น .ส .ศร ศ ร ลกษณ
146 ถ .ท ห � ร อ .เ ม อ ง จ.อดรธ�น
042-246658
11,000
54
Microsoft Visual Studio 2010
Select id,name from employee ซงกจะไดร�ยง�นดงนID NAME
AC001
น.ส.อนงค ใจด
MK001
น�ยถ�วร วรด
MK002
น .ส .ล ก ษ ณ อ�ทร
BC001
น�ยมงคล ไปด
BC002
น�ยจงรก รกด
BC003
น .ส .ศ ร ศ ร ลกษณ
รปแบบท 2 Select * from Table
หม�ยคว�มว� เลอกเอ�ทก Field ในต�ร�งฐ�นขอมลตวอย�งSelect * from employee กจะไดร�ยง�นดงน
ID NAME ADDRESS TEL SALARY
AC001
น .ส .อ น ง ค ใจด
123 ถ .ท ห � ร อ .เ ม อ ง จ.อดรธ�น
042-254615
7,500
MK001
น � ย ถ � ว ร วรด
145 ถ .อดร -สกล อ .เมอง จ.อดรธ�น
09-7821546
8,200
MK002
น.ส.ลกษณ อ�ทร
321/38 อ.เมอง จ.อดรธ�น 042-236457
8,500
BC001
น � ย ม ง ค ล ไปด
145 ห ม 2 ต .บ � น เ ล อ ม อ.เมอง จ.อดรธ�น
01-7121288
8,600
BC002
น � ย จ ง ร ก รกด
145 ถ.พฒน�ก�ร อ.เมอง จ.หนองค�ย
042-24866
8,900
55
Microsoft Visual Studio 2010
5BC003
น .ส .ศร ศ ร ลกษณ
146 ถ .ท ห � ร อ .เ ม อ ง จ.อดรธ�น
042-246658
11,000
Whereเปน Clauses ซงใชกำ�หนดเงอนไขในก�รแสดงขอมล โดยจะ
ตองใชรวมกบคำ�สง Select เท�นน มรปแบบดงนSelect field1,field2,fieldn.. from Table where field ท ตองกำ�หนดเปนเงอนไข เงอนไข เงอนไข หม�ยถง เงอนไขในสงทเร�ตองก�รแสดงผล โดยทงนจะตองคำ�นงถงชนดของขอมลในฐ�นขอมลดวยตวอย�ง
จ�กตวอย�งฐ�นขอมล Employee ห�กตองก�รแสดงขอมลของพนกง�นทมเงนเดอนทม�กกว� 8,500 กจะส�ม�รถเขยนคำ�สงไดดงน Select * from employee where salary > 8,500ซงกจะไดร�ยง�นดงน
ID NAME ADDRESS TEL SALARY
BC001
น � ย ม ง ค ล ไปด
145 ห ม 2 ต .บ � น เ ล อ ม อ.เมอง จ.อดรธ�น
01-7121288
8,600
BC002
น � ย จ ง ร ก รกด
145 ถ.พฒน�ก�ร อ.เมอง จ.หนองค�ย
042-248665
8,900
BC003
น .ส .ศร ศ ร ลกษณ
146 ถ .ท ห � ร อ .เ ม อ ง จ.อดรธ�น
042-246658
11,000
แตถ�ห�กในกรณ Field ทตองก�รกำ�หนดเปนเงอนไข มชนดขอมลเปน Text นนจะตองใสเครองหม�ย ดวย‘ ‘
Operator Boolean- AND ใช Boolean 2 ตว ในแบบฟอรมดงน A And B เปน
Argument และประเมนผลเปนจรง ถ�ทงสองเปนจรง
56
Microsoft Visual Studio 2010
- OR ใช Boolean 2 ตว ในแบบฟอรมดงน A Or B เปน Argument และประเมนผลเปนจรง ถ�ตวใดตวหนงเปนจรง
- NOT ใช Boolean 1 ตว ในแบบฟอรมดงน Not A เปน Argument และเปลยนค�ของ Argument นนจ�กเทจเปนจรงหรอ จ�กจรงเปนเทจ
โดยจะมรปแบบดงนSelect field1,field2,fieldn.. from Table where
field ทตองกำ�หนดเปนเงอนไข 1 เงอนไข 1 Operator Boolean field ทตองกำ�หนดเปนเงอนไข 2 เงอนไข 2
IN IN จะกำ�หนดเซต ซงอ�จจะรวมหรอไมรวมค�ทกำ�หนดใหไดอย�ง
ชดเจน ซงเปนก�รรวมทง�ยกว� AND และ OR เชนSelect * from employee where salary IN (8500,11000)กจะไดขอมลดงน
ID NAME ADDRESS TEL SALARY
MK002
น.ส.ลกษณ อ�ทร
321/38 อ .เ ม อ ง จ.อดรธ�น
042-236457
8,500
BC003
น .ส .ศร ศ ร ลกษณ
146 ถ.ทห�ร อ.เมอง จ.อดรธ�น
042-246658
11,000
BETWEEN คล�ยกบ IN นอกจ�กจะกำ�หนดเซตอย�ง IN แลว BETWEEN
ยงกำ�หนดย�นของค�ทจะทำ�ใหเปนจรง อกนยหนงคอจะเปนคำ�สงทกำ�หนดชวงของก�รแสดงผลได โดยเฉพ�ะขอมลทเปนชวงวนท โดยใชรวมกบ WHERE ตวอย�ง
Select * from employee where salary between 8500 and 10000 ซงกจะไดร�ยง�นดงน
ID NAME ADDRESS TEL SALARY
57
Microsoft Visual Studio 2010
MK002
น.ส.ลกษณ อ�ทร
321/38 อ.เมอง จ.อดรธ�น 042-236457
8,500
BC001
น � ย ม ง ค ล ไปด
145 ห ม 2 ต .บ � น เ ล อ ม อ.เมอง จ.อดรธ�น
01-7121288
8,600
BC002
น � ย จ ง ร ก รกด
145 ถ.พฒน�ก�ร อ.เมอง จ.หนองค�ย
042-248665
8,900
LIKEใชได ก บชนดขอมลท เป น Text เท �น น เม อใชในก�รห�แถว
ขอคว�มยอย หรอกล�วอกนยหนงไดว� ใชคนห�ใน Field ทเปนตวอกษรเพอดว�มสวนใดของ Field นนตรงกบแถวขอคว�มใดบ�ง โดยจะม ตวอกขระพเศษทใชรวมกบ LIKE คอ
- _) หม�ยถ งต วอ กษรใด ๆ เพ ยงต ว เ ด ยว เช น ‘b_t’ จะตรงกบ ‘bat’ หรอ ‘bit’ แตจะไมตรง ‘brat’ เปนตน
- % หม�ยถงลำ�ดบของตวอกษรจำ�นวนเท�ใดกได เชน ‘%p%’ จะตรงกบ ‘put’,’poist’ หรอ ‘opt’ แตจะไมตรงกบ ‘spite’
- * หม�ยถงตวอกษรใด ๆ ทกตวอกษรทอยหลงตวอกษรทเร�กำ�หนด เชน ‘p*’ จะตรงกบ ‘parent’,’present’หรออน ๆ ทขนตนดวย P
ตวอย�งselect * from employee where id like ‘mk*’ ซงจะได
ขอมลดงนID NAME ADDRESS TEL SALA
RYMK001
น � ย ถ � ว ร วรด
145 ถ.อดร-สกล อ.เมอง จ.อดรธ�น
09-7821546
8,200
MK002
น.ส.ลกษณ อ�ทร
321/38 อ .เ ม อ ง จ.อดรธ�น
042-236457
8,500
Select * from employee where name like ‘น�ย*’
58
Microsoft Visual Studio 2010
ID NAME ADDRESS TEL SALARY
MK001
น � ย ถ � ว ร วรด
145 ถ .อดร -สกล อ .เมอง จ.อดรธ�น
09-7821546
8,200
BC001
น � ย ม ง ค ล ไปด
145 ห ม 2 ต .บ � น เ ล อ ม อ.เมอง จ.อดรธ�น
01-7121288
8,600
BC002
น � ย จ ง ร ก รกด
145 ถ.พฒน�ก�ร อ.เมอง จ.หนองค�ย
042-248665
8,900
Function ทใชในการรวมคาก�รสอบถ�มขอมลส�ม�รถทำ�ใหเกดหลกเกณฑในก�รรวมกลมค�
ต�ง ๆ โดยผ�นท�งฟงกชนในก�รรวม ฟงกชนในก�รรวมจะใหค�เพยงค�เดยวสำ�หรบค�ของทงกลมทปอนไวในต�ร�ง ไดแก
- COUNT จะใหจำ�นวนแถวหรอค�ต�ง ๆ ใน Field ทไมมค�ว�ง ทก�รสอบถ�มขอมลนนเลอกไว
- SUM จะใหผลบวกท�งคณตศ�สตรของค�ทเลอกทงหมดของ Field ทกำ�หนด
- AVG จะใหค�เฉลย ของค�ทเลอกทงหมดของ Field ทกำ�หนด- MAX จะใหค �ม�กทสดของค�ท เล อกท งหมดใน Field ท
กำ�หนดให- MIN จะใหค �น อยท สดของค�ท เล อกท งหมดใน Field ท
กำ�หนดใหรปแบบการใชฟงกชน
select FUNCTION(field) from Tableเชน ห�กตองก�รดร�ยง�นของพนกง�นทมเงนเดอนสงทสดในบรษท กส�ม�รถใชคำ�สงไดดงน
select *,max(salary) from employee จะไดร�ยง�นดงน
ID NAME ADDRESS TEL SALARY
59
Microsoft Visual Studio 2010
BC003
น .ส .ศร ศ ร ลกษณ
146 ถ.ทห�ร อ.เมอง จ.อดรธ�น
042-246658
11,000
โดยก�รใชฟงกชนอน ๆ กส�ม�รถทำ�ไดเชนกน
Group Bygroup by จะยอมใหกำ�หนดเซตยอยของค�ต�ง ๆ ใน Field ใด
Field หนง โดยเฉพ�ะในรปของอก Field หนง แลวใชฟงกชนในก�รรวมกบเซตยอยนน ด งนแลวท ำ�ใหส�ม�รถรวม Field ต�ง ๆ ก บ ฟงกชนในก�รรวมเข�ดวยกนในคำ�สง Select คำ�สงเดยวก�รเรยงลำ�ดบ Output ดวย Field
ในต�ร�งฐ�นขอมลทไดสร�งไวนน โดยสวนใหญจะไมมก�รเรยงขอมล หรอก�รปรบปรงขอมลใหอยในรปแบบของก�รเรยงขอมล โดยสวนใหญขอมลกจะมก�รเข�ออกในต�ร�งฐ�นขอมลอยตลอดเวล� เมอห�กตองก�รร�ยง�นและเพอใหร�ยง�นนนมคว�มสวยง�มและดง�ย กจะตองมก�รเรยงขอมล โดยในภ�ษ� SQL นน กจะมก�รเรยงขอมลโดยเลอก Field ทมค�ทตองก�รเรยงไดต�มคว�มตองก�ร ซ งก�รเรยงขอมลนนกจะมอย 2 ประเภท คอ จ�กนอยไปม�ก และจ�กม�กไปนอย ในภ�ษ� SQL มรปแบบดงน
select FIELDS from TABLE < CONDITION > ORDER BY FIELD (DESC,ASC)
เปนคำ�สงทตอท�ยจ�กคำ�สงต�ง ๆ ทไดกล�วม�แลว โดยรปแบบกจะเปนดงขอคว�มทขดเสนใต ซง DESC หม�ยถง เรยงจ�กม�กไปนอย และ ASC คอเรยงขอมลจ�กนอยไปม�ก สวน CONDITION นนจะมหรอไมมกได สำ�หรบ SQL นน ส�ม�รถเรยงขอมลไดกบขอมลทกประเภทไมว�จะเปนขอมลตวอกษร ตวเลข หรอวนทกต�ม ซงกขนอยกบคว�มตองก�รของผใช เชน ห�กตองก�รเรยงขอมลพนกง�นจ�กแฟม employee โดยใหเรยงต�มเงนเดอน จ�กม�กไปนอย กส�ม�รถใชคำ�สงไดดงน
60
Microsoft Visual Studio 2010
select * from employee order by salary asc ซงจะไดร�ยง�นดงน
ID NAME ADDRESS TEL SALARY
BC003
น .ส .ศร ศ ร ลกษณ
146 ถ .ท ห � ร อ .เ ม อ ง จ.อดรธ�น
042-246658
11,000
BC002
น � ย จ ง ร ก รกด
145 ถ.พฒน�ก�ร อ.เมอง จ.หนองค�ย
042-248665
8,900
BC001
น � ย ม ง ค ล ไปด
145 ห ม 2 ต .บ � น เ ล อ ม อ.เมอง จ.อดรธ�น
01-7121288
8,600
MK002
น.ส.ลกษณ อ�ทร
321/38 อ.เมอง จ.อดรธ�น 042-236457
8,500
การประมวลผลขอมลพรอมกนหลายตารางดวยภาษา SQLก�รเชอมโยงของขอมลระหว�ง Table ทสมพนธกนภ�ยในภ�ษ�
SQL ใชคำ�สง INNER JOIN ซงมรปแบบดงนINNER JOIN <TABLE> ON < RELATIONED ATTRIBUTES >โดยท TABLE หม�ยถง Table ทจะนำ�ม� join กบ table ทระบไวในสวน FROM RELATIONED ATTRIBUTES หม�ยถง ร�ยชอ Field ท สมพนธกนระหว�ง 2 Tableเชน มต�ร�งฐ�นขอมลอกต�ร�งหนง ชอ sale โดยมขอมลดงน
ID CODE_PRODUCT
AMOUNT DATE_SALE
MK001 HD-40SG 5 22/7/45MK001 CD-52SN 10 22/7/45MK002 FDD 25 15/6/45MK002 MB-P4ASUS 13 18/7/45
61
Microsoft Visual Studio 2010
ห�กตองก�รดร�ยละเอยดของก�รข�ยสนค�ของพนกง�นโดยมร�ยละเอยดของพนกง�นบ�งสวนดวย กส�ม�รถใชคำ�สงดงน
select id,name from employee inner join sale on sale.id = employee.idซงกจะไดร�ยง�นดงน
ID NAME CODE_PRODUCT
AMOUNT
DATE_SALE
MK001
น � ย ถ � ว ร วรด
HD-40SG 5 22/7/45
MK001
น � ย ถ � ว ร วรด
CD-52SN 10 22/7/45
MK002
น.ส.ลกษณ อ�ทร
FDD 25 15/6/45
MK002
น.ส.ลกษณ อ�ทร
MB-P4ASUS 13 18/7/45
สำ�หรบก�รเขยนโปรแกรมในคมอฉบบน ทมค ำ�สงเกยวของกบภ�ษ� SQL นน สรปใหไดเหนดงตอไปน
ก�รเพมขอมลรปแบบคำ�สง
Insert into ช อ ต � ร � ง (field1,filed2,…)values(ค�ท1,ค�ท2,…)
เชน Insert into student(code,name)values(“001”,”น � ย
ใจด”)ก�รแกไขขอมลรปแบบคำ�สง
Update ช อต�ร�ง set field1=ค�ใหม ,field2=ค� ใหม ,…. Where field (ทเปน key)=ค�ทม
เชน
62
Microsoft Visual Studio 2010
Update student set name=”น�ยดใจ ” where code=”001”ก�รลบขอมลรปแบบคำ�สง
Delete from ชอต�ร�ง Where field (ทเปน key)=ค�ทมเชนDelete from student Where code=”001”
การใชภาษา SQL รวมกบ VB สำ�หรบก�รเขยนคำ�สงทจะใหโปรแกรมทำ�ง�นกบฐ�นขอมลนน
นอกจ�กจะเข�ใจโครงสร�งของภ�ษ� SQL แลวตองเข�ใจโครงสร�งของชนดขอมลและตวแปรทมใน VB ดวย ซงก�รเขยนโปรแกรมจรงๆ จะตองมก�รรบค�พ�ร�มเตอร เพอทำ�ก�รสงค�ทตองก�รผ�นไปม�ในระหว�งโปรแกรม ดงนน พ�ร�มเตอรต�งๆ ทจะสงค�นนจะตองมรปแบบทจะเขยนไดนนตองขนอยกบชนดขอมลดวย ส�ม�รถสรปไดดงน
ชนดขอมลหลกๆ แบงได 3 ประเภทดงน1. ชนดตวอกษร2. ชนดตวเลข (จำ�นวนเตม,จำ�นวนจรง)3. วนท*** ทงนจะเขยนแบบใดตองพจารณาชนดขอมลทกำาหนดในฐานขอมลเสมอ
ก�รเขยนภ�ษ� SQL รวมกบชนดขอมลทเปนตวอกษรผ�น VBพ�ร�มเตอรทจะสงค�นนตองอยในเครองหม�ยขอมลชนดตวอกษร
‘”+ ชอตวแปรหรอ Control +”’ขอมลชนดตวเลข
”+ ชอตวแปรหรอ Control +”’ขอมลชนดวนท
#”+ ชอตวแปรหรอ Control +”#
ตวอย�ง
63
Microsoft Visual Studio 2010 64
Microsoft Visual Studio 2010
บทท 7ASP.NET
ASP.NETสวนประกอบของเวบไซตใน ASP.NET 2.0 มดวยกน 3 สวนใหญๆ ดงน
1. แอพพลเคชนโดเมน ในเวบไซตแตละเวบไซต ไมว�จะเปนเวบไซตทรนบน ASP .NET 1.x หรอ 2.0 จะประกอบดวยไฟลหล�ยๆ ไฟล ททำ�ง�นภ�ยใต หน วยคว�มจ ำ�กล ม เด ยวก น และท ำ�ง�นภ�ยใต ค �คอนฟก (Configuration Setting) เดยวกนทเรยกว� แอพพลเคชนโดเมน
ในแตละเวบไซต จะมแอพพลเคชนโดเมนเปนของตวเอง แตละแอพพลเคชนโดเมนจะไมส�ม�รถมองเหนขอมลของแอพพลเคชนโดเมนอนได เชน ค�ของตวแปรเซสชน หรอตวแปรแอพพลเคชน แมว�จะมหล�ยๆ แอพพลเคชนโดเมนทำ�ง�นอยในเซรฟเวอรตวเดยวกนกต�ม ซ งตรงนท ำ�ให เวบไซตมคว�มปลอดภยในตวเอง แตถ�เกดมเวบไซตบ�งตวเกดต�ยไป กจะไมสงผลกระทบตอเวบไซตอนทอยคนละแอพพลเคชนโดเมน แสดงภ�พแอพพลเคชนโดเมนบนเวบเซรฟเวอร
65
Microsoft Visual Studio 2010
เพมเตม ในเวบไซต 1 เวบไซต เร�ส�ม�รถนำ�ไฟลทสร�งจ�ก คล�สสก ASP (*.asp หรอ global.asa) ม�บรรจไวในเวบไซตของ ASP .NET เพอใชง�นได แตก�รทำ�เชนน จะทำ�ใหเวบไซตเร�ประกอบไปดวยแอพพลเคชนโดเมน 2 ตว คอ แอพพลเคชนโดเมนของ คล�สสก ASP กบ แอพพลเคชนโดเมนของ ASP .NET ซงทงสองโดเมนนน ไมส�ม�รถทจะแลกเปลยนขอมลระหว�งกนได เนองจ�กอยคนละแอพพลเคชนโดเมนนนเอง
2. ไฟลในเวบไซต ASP .NET 2.0 เวบไซตทสร�งบน ASP .NET 2.0 ส�ม�รถรองรบไฟลทมอยใน ASP .NET 1.x ไดทงหมด นอกจ�กนยงไดเพมไฟลชนดใหม ททำ�ใหก�รพฒน�เวบไซตเปนไปไดอย�งสะดวกม�กขนดงน
ไฟลชนดเดมทมในเวบไซต ASP .NET 1.x มดงน
ไอคอน
ชนดไฟล นามสกล
รายละเอยด
เวบฟอรม *.aspx
ใชออกแบบหน�เวบเพจ และตดตอกบ Code Behind ได
เวบยสเซอรคอนโทรล
*.ascx ใชสร�งคอนโทรลทใชสำ�หรบเวบฟอรม
เวบเซอรวส *.asmx ใชสร�งเวบเซอรวส
HTML *.html
หน� HTML ทส�ม�รถบรรจไคเอนสครปตได
สไตล ชต *.css ใชกำ�หนดสไตลของหน� HTMLคล�ส *.cs คล�สเปล�ทใหนำ�ไปเขยนโคดตอไฟล Global Application
*.asax
ไฟลสำ�หรบจดก�รกบเหตก�รณ (Event) ต�งๆ ของเวบไซต ทำ�หน�ท
66
Microsoft Visual Studio 2010
คล�ยกบไฟล global.asa ของคล�สสค ASP
ไฟลคอนฟกกเรชน
*.config
ไฟลสำ�หรบกำ�หนดค�ต�งๆ ในเวบไซต
XML *.xml ไฟล XML เปล�Schema ของ XML
*.xsd ไฟลSchema ทใชสำ�หรบตรวจสอบคว�มถกตองของ XML
เทกซ *.txt ไฟลขอคว�มเปล�รซอรส *.res
xไฟลทใชเกบขอมลของ .NET
Dataset *.xsd ใชสร�ง Schema จ�กคล�ส Dataset
ครสตรล รพอรต
*.rpt ไฟลทใชสร�งร�ยง�นสำ�หรบแอพพลเคชนเวบ และวนโดว
XSLT *.xslt ไฟลทใชแปลงขอมล XML ใหเปนรปแบบต�งๆ
ไฟลชนดใหม ทเพมเตมเข�ม�ในเวบไซต ASP .NET 2.0 มดงน
ไอคอน
ชนดไฟลนามสกล รายละเอยด
ฐ�นขอมล SQL
*.mdf ฐ�นขอมล SQL เปล� ทใชกบ SQL Server
Generic Handler
* .ashx ไฟลทใชจดก�รกบรองขอไฟลต�งๆ ภ�ยในเวบไซต
แผนผงเวบไซต
*.sitemap ใชเกบแผนทเวบไซตซงอยในรปของ XML
ร�ยง�น *.rdlc ใชสร�งร�ยง�น โดยใชเทคโนโลยก�รสร�ง
67
Microsoft Visual Studio 2010
ร�ยง�นของไมโครซอฟตSkin *.skin ใชกำ�หนดสสน (Theme) ภ�ยในเวบไซตBrowser *.brow
ser ไฟลทใชกำ�หนดคว�มม�ยของเบร�เซอรคล�สไดอะแกรม
*.cdคล�สไดอะแกรม
3. โฟลเดอรในเวบไซต ASP .NET 2.0
ภ�ยในเวบไซตทสร�งบน ASP .NET 2.0 เร�ส�ม�รถเพมไฟลต�งๆ เชน Code Behind เวบฟอรม หรอ User Control ไดเหมอนกบเวบไซตทสร�งบน ASP .NET 1.x แตสวนทเพมเข�ม�คอโฟลเดอร 7 โฟลเดอรดงภ�พ
เร�ส�ม�รถเพมโฟลเดอรเหล�น โดยคลกขว�ทโปรเจค แลวเลอก Add ASP .NET Folder จะมโฟลเดอร 7 โฟลเดอรม�ใหเร�เลอก ซงโฟลเดอรเหล�นจะมหน�ทต�งๆ กน ดงต�ร�งด�นล�ง
ไอคอน
ชนดโฟลเดอรรายละเอยด
Bin บรรจแอสเซมบลทไดถกคอมไพลไวแลวเพอใช
68
Microsoft Visual Studio 2010
กบเวบไซตApp_Browsers
เปนไฟล XML ทอนญ�ตใหเร�ส�ม�รถเขยนขนม�ไดเองเพอบอกถงคณสมบตในด�นต�งๆ ท�งฝงไคลเอนตของเบร�เซอรแตละชนด เชน ไคลเอนตสครปต ก�รรองรบเฟรม ก�รรองรบคกก เร�ส�ม�รถเขยนตรวจสอบเบร�เซอรขณะตดตอกบเวบเซรฟเวอรไดว�ตรงกบ เบร�เซอรตวใดทเร�กำ�หนด เพอทจะไดคนผลลพธใหเหม�ะสมใหกบไคลเอนต
App_Code บรรจไฟลคล�สต�งๆ ทอยในรปของ Source Code (*.vb หรอ *.cs) โดยไฟลคล�สทถกเขยนขน แลวนำ�ไปว�งในโฟลเดอรน จะถกคอมไพลโดยอตโนมต ดงนนจงเหม�ะสำ�หรบก�รเกบคอมโพเนนต หรอไลบร�รต�งๆ ทส�ม�รถถกเรยกใชไดจ�กเวบฟอรมทกตวในเวบไซต หลงจ�กทมก�รคอมไพลไฟลคล�สในโฟลเดอรนแบบอตโนมตแลว จะไดแอสเซมบลชดหนง ซงจะถกเกบไวในโฟลเดอรชวคร�ว ทไมไดเกบในโฟลเดอร Bin
App_Data บรรจไฟลขอมลต�ง รวมทงไฟลฐ�นขอมล SQL (*.mdf) หรอไฟลขอมล XML แตเร�กไมจำ�เปนเสมอไปทจะตองเกบไฟลขอมลไวในทน เปนเพยงแคขอแนะนำ�เท�นน
App_GlobalResources
บรรจไฟลรซอรสสำ�หรบ .NET ซงส�ม�รถถกดงขอมลไปใชจ�กทกเวบฟอรมต�งๆ ภ�ยในเวบไซต
App_LocalResources
คล�ยกบโฟลเดอร App_GlobalResources แตจะส�ม�รถถกดงขอมลไปใชกบเฉพ�ะเวบฟอรมเท�นน
69
Microsoft Visual Studio 2010
App_Themes บรรจ Theme ทใชกบเวบไซตTheme บรรจรปภ�พ และสสนทใชกบเวบไซตApp_WebReferences
บรรจก�รอ�งองไปถงเวบเซอรวสอนๆ ทส�ม�รถถกเรยกใชไดภ�ยในเวบไซต ซงภ�ยในจะบรรจขอมล WSDL และ Discovery ของเวบเซอรวส
Tip: ไฟลทเร�นำ�ไปว�งไวใตโฟลเดอร Bin และโฟลเดอรทขนตนดวย App ยกเวน App_Themes น จะไมส�ม�รถถกเรยกไดจ�กไคลเอนต เนองจ�กเปนโฟลเดอรทถกบลอกไวเพอคว�มปลอดภย มเฉพ�ะเวบไซตททำ�ง�นบน ASP .NET 2.0 ดวยเหตน เร�ส�ม�รถใชคว�มส�ม�รถนในก�รปองกนไฟลสำ�คญๆ ได เชน ถ�เร�มไฟลขอมลทเปน XML ทเกบขอมลสำ�คญ แลวไมอย�กใหไคลเอนตส�ม�รถเข�ถงได เร�ส�ม�รถกอปป ไปว�งไวในโฟลเดอร App_Data ได
เมอไคลเอนตมก�รรองขอไฟลแบบไดน�มคไปท IIS ก�รเรยกนจะถกสงตอไปใหก บ aspnet_isapi.dll จ�กนนจะสงผ�นเปนทอดๆ ใหก บ HTTP Module และสดท�ยกจะม�ทำ�ง�นท HTTP Handler ทเปนตวรนเวบฟอรม ดงภ�พ
เมอก�รรองขอไฟลเวบฟอรมม�ถง HTTP Handler ของเวบฟอรม และจะมก�รเรยกเมธอด ProcessRequest และเข�สวงจรชวตของเวบฟอรมดงภ�พ
70
Microsoft Visual Studio 2010
จ�กภ�พ เร�จะแบงขนตอนก�รทำ�ง�นยอยของเมธอด ProcessRequest ออกไดเปน 8 ขนตอนดงน
ขนตอนท 1 Instantiation
ในขนตอนน ASP .NET จะมก�รสร�งออปเจกตของเวบฟอรมขนม�โดยอตโนมต ไมว �เวบฟอรมของเร�จะมโคดแบบ Inline หรอ Code Behind กต�ม โดย ASP.NET จะเข�ไปทำ�ก�รอ�นแทกต�งๆ ทอยในมมมองของ Source ในไฟล .aspx แลวทำ�ก�รสร�งออปเจกตเวบฟอรมขนม�กอน จ�กนน จงทำ�ก�รสร�ง ออปเจกตของคอนโทรลแตละตวทอยในเวบฟอรม
ขนตอนท 2 Initialization
หลงจ�กทมก�รสร�งลำ�ดบชนของคอนโทรลเสรจแลว จะเข�ม�ในสวนของเหตก�รณเร มต น (Initialization) ของท ง เวบฟอรม และของคอนโทรลภ�ยในเวบฟอรม เหตก�รณนตรงกบเมธอด OnInit ของทงเวบ
71
Microsoft Visual Studio 2010
ฟอรม และคอนโทรล โดยเมธอด OnInit ของคอนโทรลจะถกเรยกกอนจนครบทกตว จ�กนนจงทำ�ก�รเรยกเมธอด OnInit ของเวบฟอรม
สำ�หรบเมธอด OnInit ของเวบฟอรม เร�ส�ม�รถเหนเมธอดนได ในตอนทเพมเวบฟอรมเข�ม�ใหมในโปรเจคของ Visual Studio .NET 2003 เร�จะสงเกตเหนสวนของ Web Form Designer generated code ซงถ�คลกเข�ไปดภ�ยในจะพบว�มเมธอด OnInit อยภ�ยใน และเร�ส�ม�รถเข�ไปเขยนโคดเพมเตมในสวนนได แตสำ�หรบ Visual Studio 2010 สวนนจะถกซอนไว ถ�ห�กเร�ตองก�รเขยนโคดเพมในสวนนเร�ตองเพมเมธอด OnInit นเข�ไปเองดงโคดตวอย�ง
protected override void OnInit(EventArgs e){ base.OnInit(e); //Add your custom OnInit here …}
ขนตอนท 3 โหลด View State
ก�รโหลดค�จ�ก View State จะทำ�เฉพ�ะตอนทเวบฟอรมมก�ร Post back เท�นน ในขนตอนน ASP .NET จะทำ�ก�รโหลดค�จ�ก View State แลวนำ�ค�นไปกำ�หนดใหกบคอนโทรลในเวบฟอรมต�มลำ�ดบชนของออปเจกตเวบฟอรม และคอนโทรลในเวบฟอรม ส ำ�หรบค�ใน View State น บ�งครงอ�จถกแกไขโดยแฮกเกอรได เพอมเจตน�ทไมดบ�งอย�ง ในบทถดไปจะไดเรยนรถงวธก�รปองกน ก�รแกไขขอมลใน View State
ขนตอนท 4 โหลด Post Back Data
จะเกดเมอเวบฟอรมมก�ร Post back เท�นน ขนตอนนเวบฟอรม จะทำ�ก�รโหลดค�จ�ก HTTP POST Headers แลวสงตอค�ทเหม�ะสมให
72
Microsoft Visual Studio 2010
ก บเซรฟ เวอรคอนโทรลแต ละต วท ท ำ�ก�รอ มพล เมนต อ นเตอรเฟส IPostBackDataHandler หลงจ�กนนเซรฟเวอรคอนโทรลจะท ำ�ก�รเรยกเมธอด LoadPostData เพอดงค�ทเวบฟอรมสงใหไปกำ�หนดพรอพเพอต Text ใหตวเอง ตวอย�งของก�รโหลดค�ในขนตอนนดงภ�พ
ขนตอนก�รโหลดค�จ�กก�ร Post Back ดงน
1. ไคลเอนตรองขอไฟลเวบฟอรม ซงบรรจคอนโทรล Textbox เพอใหกรอกขอคว�ม และคอนโทรล Button ซงเปนปมททำ�ใหเกดก�ร Post Back ไปท เซ รฟ เวอร โดยไมมส วนของโค ดท แก ไขค � ในคอนโทรล TextBox เลย
2. เมอก�ร Post Back ม�ถงทเวบเซรฟเวอร เวบฟอรมจะถกรนขนม� และเมอถงขนตอนก�รโหลด Post Back Data เวบฟอรมตรวจดว�มค อ น โ ท ร ล ต ว ใ ด ท ท ำ� ก � ร อ ม พ ล เ ม น ต อ น เ ต อ ร เ ฟ ส IPostBackDataHandler บ�ง ซ งในทน มเพยงคอนโทรล TextBox เท�นน จ�กนนเวบฟอรมจะทำ�ก�รอ�นจ�ก HTTP POST Headers เฉพ�ะทเปนของ TextBox แลวนำ�ค�ทไดไปกำ�หนดใหกบพรอบเพอต Text ซงในทนกคอคำ�ว� “Hello World”
3. เมอรนเวบฟอรมครบทกขนตอนแลว กจะสงผลลพธคนกลบไปทไคลเอนต ทไคลเอนตจะเหนว �ค�ใน TextBox น จะพบคำ�ว� “Hello World” เหมอนกบสถ�นะตอนทมก�ร Post Back ไปทเวบเซรฟเวอร
เพมเตม สำ�หรบคอนโทรลทมก�รอมพลเมนตอนเตอรเฟส
73
Microsoft Visual Studio 2010
IPostBackDataHandler มกจะเปนคอนโทรลทเร�ส�ม�รถกรอกค� หรอแกไขค�ไดจ�กฝงไคลเอนต เชน คอนโทรล TextBox คอนโทรล DropDownList สำ�หรบคอนโทรลเหล�น แมว�เร�จะกำ�หนดพรอบเพอต EnableViewState ใหเปนเทจแลวกต�ม คอนโทรลเหล�นกยงส�ม�รถจำ�ค�ทกำ�หนดจ�กท�งฝงไคลเอนตได เพร�ะคอนโทรลเหล�นโหลดค�จ�ก Post Back ม�ใช
ขนตอนท 5 Load
เมธอดนเป นของเวบฟอรม ซ งนกพฒน�เวบจะรจกเป นอย�งด เหตก�รณนตรงกบเหตก�รณในโพรซเยอร Page_Load ขนตอนนจะถกเรยกทงตอนทมก�ร Post Back และไมมก�ร Post Back
ขนตอนท 6 Raise Post Back Event
เปนเหตก�รณทเก ดกบคอนโทรลทมคว�มส�ม�รถในก�ร Post Back ไดเชน เหตก�รณ Click ของ Button เหตก�รณ TextChanged ของคอนโทรล TextBox คอนโทรลทส�ม�รถสร�งก�ร Post Back ไดนนตองมก�รอมพลเมนตอนเตอรเฟส IPostBackDataHandler ทเร�ไดรจกกนไปแลว
ขนตอนท 7 Save View State
ขนตอนนเวบฟอรมจะเรยกเมธอด SaveViewState ของคอนโทรลแตละตวทอยภ�ยใตเวบฟอรมต�มลำ�ดบชน เพอทำ�ก�รบนทกสถ�นะของคอนโทรลล�สดทอ�จมก�รก�รเปลยนแปลงไป เนองจ�กขนตอนกอนหน�น ผลของก�รบนทกนจะถกเกบอยในรปตวหนงสอทเข�รหสแบบ Base-64 แ ล ว เ ก บ ใ น Hidden Field ท จ ะ ถ ก ส ร � ง ใ น ข น ต อ น ถ ด ไ ป
74
Microsoft Visual Studio 2010
ขนตอนท 8 Render
ขนตอนน เวบฟอรมจะทำ�ก�รแปลงขอมลในขนตอนทผ�นม�ออกม�ในรปภ�ษ� HTML เพอสงตอใหกบไคลเอนต ในขนตอนนเวบฟอรมจะเรยกเมธอด RenderControl ของคอนโทรลแตละตวทอยภ�ยใตเวบฟอรมต�มลำ�ดบชนสำ�หรบ ขนตอนทง 8 ทกล�วม�น เปนขนตอนทส ำ�คญทมคว�มเก ยวของก บ View State ซ งได ละข นตอน PreInit ข นตอน PreRender แ ล ะ ข น ต อ น Unload ไ ว อนทจรงแลว เนองจ�กเบองหลงของ ASP.NET นน กคอโปรแกรมททำ�ง�นอยบน .NET Framework คณจงไมไดถกจำ�กดว� จะตองเขยนโคด ASP.NET ดวยภ�ษ�ใด ภ�ษ�หนงเท�นน ซง VB กเปนหนงในภ�ษ�ท .NET นนรองรบ และอ�จะเรยกไดว� เปนภ�ษ�อย�งเปนท�งก�รของแพลตฟอรม .NET แตถ�ห�กว�คณเปนผทเคยพฒน�เวบไซตดวย ASP ม�กอน ภ�ษ�ทมพ นฐ�นม�จ�กภ�ษ� Visual Basic เดม อย�ง Visual Basic.NET กอ�จจะเปนตวเลอกทดคนเคยม�กกว� แตไมว�คณจะพฒน�ดวยภ�ษ�อะไรก ต�ม ในท�งทฤษฎแลว จะไมมผลใด ๆ ก บประสทธภ�พโดยรวมของโปรแกรมแตอย�งใด และทกภ�ษ� ส�ม�รถเข�ถงฟเจอรต�ง ๆ ของ .NET ไดอย�งเท�เทยมกน
อย�งไรกด ถ�ห�กว�คณเคยมพนฐ�นจ�ก Java หรอว� C++ ม�กอน หรอตองก�รจะเรยนร ภ�ษ�ท�งก�ร ของแพลตฟอรม “ ” .NET ภ�ษ� VB กเปนน�จะเหม�ะสมทสดสำ�หรบคณ ซงภ�ยในบทน ผเขยนจะแนะนำ�ถงโครงสร�งพนฐ�นและก�รใชง�นภ�ษ� VB พรอมกบ VB.NET อย�งคร�ว ๆ สำ�หรบผทเคยม
การสรางเวบโปรเจคใน Visual Studio 2010
โปรเจคจะมทงวนโดวส และเวบ โดยโปรเจคเวบจะถกตงชอเปนเวบไซต (Web Site) ทเร�สนใจในทน จะถกแยกออกม�ดงภ�พ
75
Microsoft Visual Studio 2010
ส ำาค ญมาก โปรเจคประเภท Web Application ทเคยมใน Visual Studio .NET 2003 จะห�ยไปใน Visual Studio 2010 แตจะมโปรเจคเวบไซตเข�ม�แทน แตหลงจ�กท Visual Studio 2010 ออกม�ไดไมน � น ไ ม โ ค ร ซ อ ฟ ต ถ ก บ น ม � จ � ก น ก พ ฒ น � ช น ก บ โ ป ร เ จ ค Web Application ดงนนท�งไมโครซอฟตจงไดท ำ�ตวตดตงโปรเจค Web Application เพมเตมใหนกพฒน�ด�วนโหลดเพมฟรในตอนหลง ซงคณส � ม � ร ถ เ ข � ไ ป อ � น ร � ย ล ะ เ อ ย ด ห ร อ โ ป ร เ จ ค น ไ ด ท http://msdn2.microsoft.com/en-us/asp.net/aa336618.aspx แตอย�งไรกต�มโปรเจค Web Application นไดถกรวมอยใน Visual Studio 2010 Service Pack 1 เรยบรอยแลว ดงนนเร�ไมจำ�เปนตองตดตงโปรเจค Web Application ซ ำ�อก หลงจ�กทต ดตง Service Pack 1 ไปแลว
เมอเลอกสร�งเวบไซตใหมแลว จะส�ม�รถเลอกชนดของโปรเจคเวบดงภ�พ
76
Microsoft Visual Studio 2010
สวนประกอบทจำ�เปนตองเลอกในก�รสร�งโปรเจคมอยดวยกน 3 สวนดงน
สวนท 1 เทมเพลต
จะเปนสวนทระบว�รปร�งหน�ต�ของโปรเจคจะประกอบดวยไฟล และมก�รอ�งองกบแอสเซมบลตวใดบ�ง เทมเพลตทม จะคล�ยกบ Visual Studio .NET 2003 คอจะมเทมเพลตทเปนทงเวบไซตปกต (ASP .NET Website) และเทมเพลตทเปนเวบเซอรวส (ASP .NET Web Service)
ทเพมพเศษเข�ม�คอ เทมเพลตเวบเซอรวสทเปน Crystal Report และทห�ยไปคอ เทมเพลตทใชสร�ง Web Server Control ซงตองไปใชวธเพมเข�ม�ในโปรเจคทหลงเอง
เพมเตม เร�ส�ม�รถด�วนโหลดเทมเพลตเพมเตมเข �ม�ในสวน My Template ไ ด โ ด ย ส � ม � ร ถ ด � ว น โ ห ล ด ไ ด ท http://msdn.microsoft.com/asp.net/reference/design/templates/default.aspx ทลงคนจะมเทมเพลตทงของภ�ษ� VB .NET
77
Microsoft Visual Studio 2010
และ VB หล�ยชนดใหเลอกโดยแบงต�มจดประสงคของเวบไซต เชน เวบอคอมเมรส เวบสวนตว หรอเวบบรษท
สวนท 2 Location
จะเปนตวทระบว�เวบไซตของเร�จะถกเกบไวทใด ซงเร�ส�ม�รถระบบไดทงเกบในเครองเร�เอง หรอเกบไวในเครองอนทอยภ�ยในเนตเวรค หรออ�จจะเกบไวใน FTP Server กได ในก�รเกบเวบไซตแตละแบบตองก�รค�พ�ร�มเตอรทต�งกน ขนอยกบ Location ทเร�เลอกดงน
- HTTP เก บเวบไซต ไว ใต Virtual Directory ของ IIS เร�ส�ม�รถใสชอของเวบเซรฟเวอร และชอเวบไซตทตองก�รลงไปได หรออ�จกดปม Browse
- File System เกบเวบไซตไวใตโฟลเดอรของเครองเร�เอง หรอเครองอนในเนตเวรค เร�ส�ม�รถตง Path ทตองก�รเกบใหเปนเครองของ
78
Microsoft Visual Studio 2010
เร�เอง หรอเปน Path ทอยยนเนตเวรคกได หรออ�จกดปม Browse จะปร�กฏไดอะลอกใหเร�เลอกดงภ�พ
- FTP เกบเวบไซตไวใน FTP เซรฟเวอร ซงก�รทจะเข�ถงไดนนเร�ตองใสขอมลชอเซรฟเวอร และไดเรคทอร เปนอย�งนอย สำ�หรบ FTP เซรฟเวอรทตองก�ร Authentication เร�ตองใสขอมลนเพมเข�ไปดวย หรออ�จกดปม Browse จะปร�กฏไดอะลอกใหเร�เลอกดงภ�พ
79
Microsoft Visual Studio 2010
สวนท 3 ภาษาทใช
เร�ส�ม�รถเลอกภ�ษ�ไดต�มคว�มถนด ไมว�จะเปน VB, VB .NET หรอก J# นอกจ�กน ในโปรเจคเดยวกน เร�ส�ม�รถเขยนโคดหล�ยภ�ษ�รวมกนได เชน ในหนงโปรเจค เร�ส�ม�รถสร�งเวบฟอรมทหนงเขยนดวยภ�ษ� VB ในขณะทเวบฟอรมทสองเขยนดวยภ�ษ� VB .NET ได แตภ�ยในเวบฟอรมเดยวกน เร�จะไมส�ม�รถเขยนโคดแบบ Inline (เขยนโคดลงบนไฟล .aspx) เปนคนละภ�ษ�กบโคดทเปนเขยนบน Code Behind (เขยนโคดลงบนไฟล .cs หรอ .vb) ได
Master Pageสำ�หรบเวบไซตทมขน�ดกล�ง ไปถงขน�ดใหญ มกจะมสวนหลกๆ ท
เหมอนกนในแทบทกหน� ปกตแลวสวนทเหมอนกนนจะเปนรปแบบเกอกม� (Horse shoe) ซ ง จ ะ ป ร ะ ก อ บ ด ว ย ส ว น Header ด � น บ น ส ว น Navigation ด�นซ�ย และสวน Footer ทอยด�นล�ง ดงภ�พ
จ�กภ�พ เร�จะเหนว�สวนของ Header สวนของ Navigation และสวนของ Footer ประกอบกนเปนรปตว C หรอมลกษณะคล�ยเกอกม� ในสวนทเปนเกอกม�น จะเปนสวนทเหมอนกนแทบทกหน�ในเวบไซต เร�จงมก
80
Microsoft Visual Studio 2010
สร�งสวนทเหมอนๆ กนนแยกออกจ�กสวนทเปนเนอห� (Content) ในบ�งครงเร�จะเรยกสวนทเหมอนกนในรปเกอกม�นว�เทมเพลต จ�กทเร�รอคอยเทมเพลตของ ASP.NET เปนเวล�น�นตงแตป ค.ศ. 2000 จนในปจจบน ASP.NET 2.0 ไดออกม�พรอมกบเทมเพลตทชอว� Master Page ในป ล � ย ค .ศ . 2010
ความยากลำาบากในการสรางเทมเพลต กอนทจะม Master Page
เทคโนโลยทใชสำ�หรบสร�งเวบไซตของไมโครซอฟท จะเรมตงแตสมยภ�ษ�คล�สสค ASP ในตอนนนเร�มกจะใชก�ร Include file ทเปน สวน Header สวน Navigation และสวน Footer เข�ม�ในไฟล *.asp ดงภ�พ
แตขอเสยของวธนคอ เร�ตองจดก�รกบแทก HTML เองในก�รเปด และปดแทกทรอบตวเนอห� (Content) ใหพอด ซ งมกจะใชต�ร�ง และสร�งเซลลทบรรจเนอห�เอ�ไว นอกจ�กนเร�จะไมส�ม�รถมองเหนมมมอง Design ทสมบรณ หรอไมส�ม�รถเหนทง include file และเนอห�พรอมกนในมมมอง Design ในตอนออกแบบของ Visual InterDev ได จรงๆ แลวในยคของ ASP บ�งท�นไดใชเฟรม (HTML frame) แทนก�รใช include file แตกจะเจอปญห�ของ Scroll bar แตแยกกนของแตละ
81
Microsoft Visual Studio 2010
เฟรม และเฟรมยงมปญห�กบ Search engine หล�ยๆ ตวทไมรจกแทกเฟรม
ถดจ�กยคของ ASP จะเปนยคของ ASP.NET 1.0 เร�ส�ม�รถสร�งยสเซอรคอนโทรลทบรรจแทก HTML ต�งๆ ไวได และส�ม�รถนำ�ม�ใชกบเวบฟอรมไดอย�งง�ยๆ ดวยก�ร Drag and Drop แตตวของยสเซอร คอนโทรลนจะมไมส�ม�รถแสดงในมมมอง Design ของ Visual Studio รน 2000 2002 หรอ 2003 ได เร�จะเหนเพยงแคกลองสเท� ทแสดงถงตวยสเซอรคอนโทรลทเร�ล�กม�ว�งในเวบฟอรมนเท�นน และเร�ยงตองจดก�รกบแทกปด และเปด ทลอมรอบตวเนอห�อยเหมอนเดม
สำ�หรบปจจบน Master Page ไดแกปญห�ทกล�วม� โดยก�รแยก Master Page ออกม�ต�งห�กจ�กสวนเนอห� เร�ส�ม�รถออกแบบ Master Page ไดจ�กมมมอง Design และส�ม�รถกำ�หนดตำ�แหนงของเนอห�ทเร�ตองก�รว�งไดอย�งอสระ และสำ�หรบสวนไฟลเนอห� ซงในทนคอไฟลเวบฟอรม เร�จะเรยกว�ไฟล Content Page ซงเร�ส�ม�รถมองเหนหน�ต�ของทงไฟล Master Page และสวนเนอห�ทอยในไฟล Content Page พรอมกนไดในมมมอง Design นอกจ�กนเร�ส�ม�รถเขยนโปรแกรมเพอกำ�หนด Master Page แบบไดน�มค และนำ� Master Page หล�ยๆ ตวม�ซอนกนเพอสร�ง Master Page ตวใหมทมคว�มยดหยนได
การทำางานรวมกนระหวางไฟล Master Page กบไฟล Content Page
ก�รทำ�ง�นของไฟล Master Page กบไฟล Content Page แสดงดงภ�พ
82
Microsoft Visual Studio 2010
จ�กภ�พ เร�มไฟลสองไฟล ไฟลแรกคอ Master Page ทบรรจเทมเพลตของ Header เทมเพตล Navigation และเทมเพลต Footer และไดเวนว�งในสวนของเนอห� (Content PlaceHolder) เอ�ไว สวนไฟลทสองคอ Content Page ทบรรจเฉพ�ะเนอห�ของเวบฟอรมเท�นน
ในก�รทำ�ง�นจรง จะตองสร�งไฟล Master Page ขนม�กอน จ�กนนจงสร�งไฟล Content Page ททำ�ก�รสบทอดรปร�งหน�ต� (Visual Inheritance) ซ ง ก ค อ ส ว น Header ส วน Navigation แ ล ะ ส ว น Footer จ�กไฟล Master Page ทสร�งไวกอนหน�นผ�นแอตทรบวต MasterPageFile ทอยในไดเรคทฟ Page
หลงจ�กทไฟล Content Page ทำ�ก�รสบทอดหน�ต�จ�กไฟล Master Page เรยบรอยแลว ไฟล Content Page จะทำ�ก�รเตมเตมเนอห�ของมนเองลงไปใน Content PlaceHolder ของไฟล Master Page เมอเร�ทำ�ก�รรนไฟล Content Page ในเบร�เซอร เร�จะพบว�เนอห�ทไดจะเปนผลรวมกนของสวน Header สวน Navigation และสวน Footer จ�กไฟล Master Page และเนอห�จ�กไฟล Content Page
ก�รสร�งไฟล Master Page ทำ�ไดคล�ยกบก�รเพมเวบฟอรม โดยก�รคลกขว�ทโปรเจค --> Add New Item… --> เลอกทไฟลประเภท Master Page ดงภ�พ
83
Microsoft Visual Studio 2010
จ�กภ�พ จะพบว�ไฟล Master Page น จะมน�มสกลเปน master และมคณสมบตคล�ยกบเวบฟอรม คอเร�ส�ม�รถเลอกภ�ษ�ทจะเขยนได (VB หรอ VB) และเลอกทจะว�งโคดไวในไฟล Code Behind หรอไมกได
เมอเร�เปดไฟล Master Page ทสร�งในมมมอง Design เร�จะพบว� เร�ส�ม�รถมองเหนคอนโทรลตวใหมทชอว� ContentPlaceHolder เพมเข�ม�ในทลบอกซ ซงเร�ส�ม�รถล�กม�ว�งในหน� Design เพอใชง�นได คอนโทรล ContentPlaceHolder จะมเฉพ�ะกบไฟล Master Page เท�นน จะไมส�ม�รถมองเหนไดในไฟลเวบฟอรม ดงภ�พ
84
Microsoft Visual Studio 2010
คอนโทรล ContentPlaceHolder ถ�มองในมมมอง Source จะเหนเปนแทก asp:contentplaceholder ซงเร�ส�ม�รถกำ�หนด id ใหกบมนได ดงโคดตวอย�ง
<form id="form1" runat="server"> <div> <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder> </div> </form>
ในก�รทำ�ง�นจรง ContentPlaceHolder จะถกลอมดวยสวน Header สวน Navigation และสวน Footer ดงภ�พ
ในท�งปฏบต เร�มกไมใชแทก div ของภ�ษ� HTML เพอทำ�ก�รแบง Master Page ออกเปนสวนๆ แตเร�มกใชแทก table ของภ�ษ� HTML แทน ดงโคดตวอย�งท 9-32 ทแสดงมมมอง Source ของภ�พ
<form id="form1" runat="server"> <table border=0 width="500"> <tr><td colspan="3" bgcolor="#CCCCCC">Header</td></tr> <tr>
85
Microsoft Visual Studio 2010
<td bgcolor="#CCCCCC">Navigator</td> <td><asp:contentplaceholder id="Calendar" runat="server"></asp:contentplaceholder></td> <td><asp:contentplaceholder id="News" runat="server"></asp:contentplaceholder></td> </tr> <tr><td colspan="3" bgcolor="#CCCCCC">Footer</td></tr> </table> </form>
จ�กโคดตวอย�งจะเปนว�ในไฟล Master Page น มคอนโทรล ContentPlaceHolder อ ย ส อ ง ต ว โ ด ย ต ว แ ร ก จ ะ แ ส ด ง ป ฎ ท น (id=”Calendar”) และตวทสองแสดงข�ว (id=”News”) ซงคอนโทรลทงสองจะไมมร�ยละเอยดของทงปฎทน และข�วอยเลย เพร�ะตองรอใหไฟล Content Page ม�เตมร�ยละเอยดในสวนน ซงจะกล�วถงในหวขอถดไป
ไฟล Content Page จะเปนไฟลเวบฟอรมต�มปกต แตในตอนทเร�สร�งมนขนม� เร�ตองเลอกว�เวบฟอรมนตองก�รใช Master Page ดงภ�พ
86
Microsoft Visual Studio 2010
จ�กภ�พ หลงจ�กเลอกตวเลอก Select master page แลว กดปม Add ทด�นล�งขว� จะพบหน�ใหเลอกไฟล Master Page ดงภ�พ
จ�กภ�พ จะเปนหน�จอทใหเร�เลอก Master Page เร�ส�ม�รถเบร�ซไปยงไฟล Master Page ไฟลต�งๆ ทอยในเวบไซตของเร� หลงจ�กน นกดป ม OK เพ อจบก�รสร �ง Content Page เม อ เร � เป ด ไฟล Content Page ทเพงสร�งเสรจในมมมอง Design จะพบหน�จอดงภ�พ
87
Microsoft Visual Studio 2010
จ�กภ�พ จะพบว�ในสวนทสบทอดรปร�งหน�ต�ม�จ�กไฟล Master Page นน ซงกคอสวน Header สวน Navigation และสวน Footer ท เร�ส�ม�รถมองเหนได แตจะไมส�ม�รถแกไขได เพร�ะมนจะถกลอคเอ�ไว ห�กตองก�รแกไข เร�จะตองไปแกไขทไฟล Master Page โดยตรง สำ�หรบสวนทแกไขได จะอยในคอนโทรล Content เท�นน เมอเร�เปดไฟล Content Page ในมมมอง Source จะพบดงโคดตวอย�ง
<%@ Page Language=... %>
<asp:Content ID="Content1" ContentPlaceHolderID="Calendar" Runat="Server"></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="News" Runat="Server"></asp:Content>
จ�กโคดตวอย�ง เร�จะพบแอตทรบวต MasterPageFile อยในไดเรคทฟ Page ด�นบนสด และจะมคอนโทรล Content อยสองตวท สอดคล องก บคอนโทรล ContentPlaceHolder ของไฟล Master Page โดยคอนโทรลตวแรกจะแสดงเนอห�เกยวกบปฎทน สวนตวทสอง
88
Microsoft Visual Studio 2010
แสดงเนอห�ข�ว เปนทน�สงเกตว�ภ�ยในไฟล Content Page จะไมมแทก HTML แทก Body แทก Head หรอแทก Form เหมอนกบเวบฟอรมปกต เพร�ะแทกเหล�นจะถกเขยนไวภ�ยในไฟล Master Page เรยบรอยแลว หน�ทไฟล Content Page จงเหลอเพยงเตมเนอห�ทข�ดไปใหกบไฟล Master Page เท�นน ในก�รเพมเตมเนอห�ทงสองสวน เร�ส�ม�รถใชมมมอง Design หรอ Source ในก�รเพมเตมเนอห�ไดต�มสะดวก ตวอย�งหลงจ�กเพมเตมเนอห�ในไฟล Content Page แสดงดงภ�พ
เมอทำ�ก�รเปดไฟล Content Page ในเบร�เซอร จะไดหน�จอดงภ�พ
การสรางสไตลใหกบเวบฟอรม
89
Microsoft Visual Studio 2010
ก�รสร�งสไตลใหกบเวบฟอรม หรอเอกส�ร HTML จะทำ�ไดโดยก�รกำ�หนดสไตลชต โดยทวไปสไตลชตม 3 แบบดงภ�พ
จ�กภ�พ จะเหนว�มก�รกำ�หนดสไตลชต 3 แบบดงน
1. สไตลชตแบบไฟล เปนก�รอ�งองถงไฟลสไตลชตผ�น URL โดยใชแทก link วธน เบร�เซอรตองทำ�ก�รด�วนโหลดไฟลนเพมเตมจ�กเวบฟอรม เพอนำ�สไตลทอยในไฟลสไตลชตม�กำ�หนดใหกบเวบฟอรมอกท
2. สไตลชตแบบบลอค (Block) เปนก�รกำ�หนดสไตลชตลงบนเวบฟอรมโดยตรง โดยค�ของสไตลจะอยระหว �งแทก <style> และ </style> ค�ของสไตลทอยในสไตลชตแบบบลอคน จะถกนำ�ไปกำ�หนดใหกบแทกทกตวทตรงกบสไตลทกำ�หนด เชน จ�กภ�พท 9-1 จะทำ�ใหแทกทขนตนดวย INPUT ทกตวมสของพนหลงเปนสแดง เพร�ะมก�รกำ�หนด background-color: red ใหเปนสแดง
ในบ�งครงเร�อ�จสร�งสไตลแบบคล�สดวยก�รเพมสญลกษณ “.” ทด�นหน�ของชอคล�ส เชน .MyClass {text-decoration: underline} เปนก�รกำ�หนดว�สไตลทชอว� MyClass จะมก�รขดเสนใต
3. สไตลชตแบบอนไลน (In-line) เปนก�รกำ�หนดสไตลลงบนเวบฟอรมโดยตรงเหมอนกบแบบบลอค แตแบบอนไลนจะกำ�หนดสไตลลงบนแทกโดยตรงผ�นแอตทรบวต style ซงผลของสไตลแบบนจะมผลกบแทกทเร�กำ�หนดเท�นน จะไมมผลกบแทกตวอนๆ นอกจ�กน เร�ส�ม�รถกำ�หนด
90
Microsoft Visual Studio 2010
สไตลแบบคล�สใหก บแท กได โดยก�รเพ มแอตทรบวต class เชน <INPUT type=”text” ถ�มก�รกำ�หนดสไตลชตแบบอนไลน โดยผ�นทงแอตทรบวต style และ class ทงคแลว ค�ทอยในแอตทรบวต style จะเขยนทบแอตทรบวต class เสมอ
สำาคญมาก ในกรณท มก�รกำ�หนดสไตลชตทง 3 แบบใหกบแทกใดแทกหนง เชน สไตลชตแบบไฟล กำ�หนดใหแทก INPUT มสแดง แตสไตลชตแบบอนไลนกำ�หนดใหแทก INPUT มสนำ�เงน ผลลพธทไดคอ แทก INPUT จะมสนำ�เงนต�มสไตลชตแบบอนไลน หรอกล�วไดว�สไตลชตแบบอนไลนจะเขยนทบสไตลแบบไฟล หรอแบบบลอคเสมอนนเอง ดงภ�พ
ในกรณทมก�รเขยนทบกนเองของสไตลชตแบบไฟล และแบบบลอคนน ไมไดมก�รกำ�หนดต�ยตวว�สไตลชตแบบใดจะมก�รเขยนทบตวใด เพร�ะทงสองแบบมคว�มสำ�คญเท�กน แตมหลกอยว� สไตลชตทว�งไวหลงสด (เรยงจ�กบนลงล�งของเวบฟอรม) จะมก�รเขยนทบสไตลชตทอยด�นบนเสมอ ทเปนเชนนเพร�ะในตอนทเบร�เซอรทำ�ก�รสร�งสไตล เบร�เซอรจะทำ�ก�รอ�นสไตลชตทพบในเวบฟอรมทงหมดเข�ไปไวในหนวยคว�มจำ�ของเครอง โดยเรมอ�นจ�กบนลงล�ง และสไตลชตทอ�นเข�ไปตอนหลง จะเขยนทบสไตลทมอยเดมเสมอนนเอง สำ�หรบคว�มรเร องสไตลชตน จะเปนจดเรมตนทดในก�รเรยนรเร อง Theme ทเปนของใหมใน ASP.NET 2.0 เพร�ะสดท�ยแลวผลลพธจ�กก�รทำ�ง�นของ Theme กจะสร�งเปนสไตลชตออกม� เพอกำ�หนดหน�ต� และสสนต�งๆ ใหกบเวบฟอรม
91
Microsoft Visual Studio 2010
โครงสรางของ Theme
ไฟลท จะท ำ�ง�นกบ Theme ได จะเป นเวบฟอรม ทมก�รทำ�ง�นทฝ งเซรฟเวอรเท �น น จะไมส�ม�รถใชก บไฟลย สเซอรคอนโทรล (User Control) ได เพอคว�มรวดเรวในก�รสร�ง Theme ขอแนะนำ�ใหเข�ไปเ ล อ ก ด � ว น โ ห ล ด ต ว อ ย � ง เ ท ม เ พ ล ต ข อ ง ไ ม โ ค ร ซ อ ฟ ท ท http://msdn2.microsoft.com/en-us/asp.net/aa336613.aspx ดงภ�พ
หลงจ�กทด�วนโหลดตวอย�งเทมเพลตม�แลว เร�จะไดไฟลตดตงทมน�มสกล vsi ใหเร�ทำ�ก�รตดตงลงบนเครอง เมอตดตงเสรจแลวใหเปด Visual Studio 2010 ขนม�จะพบเทมเพลตดงภ�พ
92
Microsoft Visual Studio 2010
เมอสร�งเวบไซตจ�กเทมเพลตแลว ใหเร�สำ�รวจโฟลเดอร App_Themes ซงเปนโฟลเดอรทใชเกบ Theme หล�ยๆ แบบ ใน ASP.NET 2.0 โครงสร�งของโฟลเดอร App_Themes แสดงดงภ�พท 9-5
จ�กภ�พ ภ�ยในโฟลเดอร App_Themes จะประกอบไปด วย Theme ไดหล�ยๆ แบบ จ�กภ�พเร�จะเหนว�ม Theme1 และ Theme2 อยภ�ยใน และในโฟลเดอร Theme กมไฟลสไตลชต โฟลเดอรทเกบรปภ�พ และไฟล Skin ซงเปนไฟลหลกทใชในก�รกำ�หนดสไตลของเวบฟอรม
การกำาหนด Theme ใหกบเวบฟอรม
เร�ส�ม�รถกำ�หนด Theme ใหกบเวบฟอรมไดง�ยๆ โดยเข�ไปกำ�หนดท Page Directive ในมมมอง Source ของเวบฟอรม ดงภ�พ
จ�กภ�พ จะเหนว�เร�ส�ม�รถเพมแอตทรบวต Theme ใหกบไดเรคทฟ Page ซงจะระบชนดของ Theme ทเร�ตองก�รกำ�หนดใหกบเวบ
93
Microsoft Visual Studio 2010
ฟอรม ในกรณทม Theme อยในเวบไซต ตว Intelligence ของ Visual Studio 2010 จะตรวจพบโดยอตโนมต พรอมแสดงร�ยก�ร Theme ทงหมดทเร�ส�ม�รถกำ�หนดไดขนม� จะแสดงผลก�รรนเวบฟอรมเดยวกน แตต�ง Theme กน
จ�กภ�พตวอย�งของ Theme ทงสองแบบ จะเหนว �ผลของ Theme จะทำ�ใหสสน และหน�ต�ของตวอกษรมรปแบบต�งกน ทน�สนใจม�กกว�นน คอรปภ�พทแสดงในแตละ Theme จะแตกต�งกนดวย ซงตรงน เ ท ค โ ล โ ล ย ข อ ง ส ไ ต ล ช ต เ ด ม ท ำ� ไ ด เ ห ม อ น ก น ผ � น ส ไ ต ล ท ช อ background-image แตจะไมยดหยนเท� Theme ซงส�ม�รถกำ�หนดรปภ�พใหกบคอนโทรลทตองก�รโดยตรง ในก�รสร�งเวบไซตขนม� เร�ส�ม�รถใชคอนโทรลพนฐ�นทมม�ใหแลวในทลบอกสได แตในบ�งครงเร�อ�จไมพอเพยงสำ�หรบง�นทซบซอน เร�ส�ม�รถสร�งคอนโทรลของเร�ขนม�เองได หรอในบ�งครง เพอใหไดต�มคว�มตองก�ร กตองเขยนโปรแกรม
94
Microsoft Visual Studio 2010
ใ น เ ว บ ฟ อ ร ม ท ซ บ ซ อ น ม � ก เ พ อ ต อ บ ส น อ ง ค ว � ม ต อ ง ก � ร น ห�กเร�มองเหนว�หล�ยๆ เวบฟอรม มก�รใชกลมคอนโทรลในลกษณะทเหมอนๆ กน เร�ส�ม�รถนำ�กลมคอนโทรลทเหมอนๆ กนน ไปสร�งเปนคอนโทรลตวใหมขนม� 1 ตว แลวทำ�ก�รแชรใหกบเวบฟอรมทตองก�รแทน วธก�รนทำ�ใหเร�เขยนโคดในเวบฟอรมสนลงไดม�ก และเมอมก�รสร�งเวบฟอรมใหมทตองก�รคอนโทรลนอก เร�กส�ม�รถนำ�คอนโทรลตวใหมนม�ใช ได หรอเป นก�รเพ ม Reusability อกแบบหน ง ในบรษ ทซอรฟแวรขน�ดกล�ง ไปถงขน�ดใหญ นยมสร�งคอนโทรลเฉพ�ะของตวเองขนม� เพร�ะประหยดเวล�ในก�รเขยนโปรแกรมไดม�ก ลดจำ�นวนโคดทเขยน ลดโอก�สผดพล�ดทจะเกดกบเวบฟอรมทซบซอน และ ปญห�ในก�รควบคมม�ตรฐ�นของก�รเขยนโปรแกรมเมอรลดลง บอยคร งทเร�เหนบรษทซอรฟแวรซอคอนโทรลจ�กบรษท Third Party เชน Infragistic Dundas ChartFX ComponentOne หรอ Exceed ม�ใชง�น
Control User Control
เปนคอนโทรลทเกดจ�ก คอนโทรลพนฐ�นไดหล�ยๆ ตว ในตอนสร�ง เร�ส�ม�รถล�กคอนโทรลจ�ก ทลบอกสม�ว�งไดเหมอนกบเวบฟอรม เร�ส�ม�รถจดตำ�แหนง และคณสมบตไดจ�กหน�จอออกแบบของ Visual Studio เลย นอกจ�กนเร�ส�ม�รถเขยนโปรแกรมใน Code Behind ไดเหมอนกบเวบฟอรม และเป นก�รเขยนโปรแกรมในลกษณะ Event Procedure กเชนเดยวกน
Custom Server Control
เปนคอนโทรลทไมมหน�ออกแบบให ทำ�ใหเร�ตองเขยนโปรแกรมเพอจดว�ง และกำ�หนดคณสมบตต�งๆ เอง ขอดของคอนโทรลประเภทนคอส � ม � ร ถ ค อ ม ไ พ ล ก บ ค ย ไ ฟล แ ล ว ล ง ทะ เ บ ย น ก บ GAC (Global Assembly Cache) เพอท ำ�ใหคอนโทรลของเร�ใชง�นไดก บหล�ยๆ
95
Microsoft Visual Studio 2010
.NET แอพพลเคชน ในก�รสร�งคอนโทรล Third Party เพอข�ย กจะสร�งคอนโทรลประเภทน
รจกกบ User Control
User Control เปนคอนโทรลทประกอบดวยคอนโทรลพนฐ�นทมในทลบอกซหล�ยๆ ตวได นอกจ�กนพฤตกรรมของมนยงเหมอนกบเวบฟอรมม�ก คอมหน�จอในก�รออกแบบทงมมมอง Design และมมมอง Source เหมอนกน เร�ส�ม�รถล�กคอนโทรลหล�ยๆ ตวจ�กทลบอกซม�ว�งทมมม อ ง Design ไ ด น อ ก จ � ก น ม น ม Event ใ น ต ว ม น เ อ ง ไ ด เ ช น Page_Load และ Page_Init และส�ม�รถเรยกใชออปเจกตของเวบไซตไดเชน Session และ Application อ�จจะบอกไดว�เวบฟอรทำ�อะไรได User Control นกทำ�ไดแทบไมต�งกน แตเร�มกใช User Control เพอจดประสงคในก�รเพม Reusability ใหกบเวบไซตของเร�ดงภ�พ
จ�กภ�พ จะเหนว� User Control หนงตวส�ม�รถนำ�ไปใชกบเวบฟอรมหล�ยๆ ตวได ถ�ห�กเร�ในตอนทเร�ออกแบบเวบฟอรม แลวเร�มองเหนว�หล�ยๆ เวบฟอรมสวนของหน�จอทเหมอนกน เร�ส�ม�รถสวนทเหมอนกนนม�สร�งเปน User Control ได User Control ส�ม�รถม Event หล�ยๆ อย�งเก ดในตวมนเองได ซ งปกตแลว เหตก�รณในคอนโทรลจะไมส�ม�รถสงผ�นไปยงเวบฟอรม หรอคอนโทรลตวอนได ยกเวนว�เร�จะตงใจสงเหตก�รณออกไปใหเวบฟอรมรบร ซงจะไดพดถงในสวนถดไป นอกจ�กนมนยงส�ม�รถมอนเตอรเฟส เชน พรอพเพอต และ
96
Microsoft Visual Studio 2010
เมธอดในตวมนเองเพอใหส�ม�รถตดตอกบเวบฟอรม หรอคอนโทรลตวอนไดดงภ�พ
การสราง User Control
ใ น ก � ร ส ร � ง User Control จ ะ ข อ ย ก ต ว อ ย � ง ก � ร ส ร � ง TimeControl ซงเปนคอนโทรลทใชสำ�หรบบนทก เวล�ของก�รนดหม�ย หรอก�รประชมต�งๆ เหมอนใน Outlook เรมตนหลงจ�กทเร�เปดโปรเจคเวบไซตขนม�แลว ใหคลกขว�ทโปรเจค แลวเลอก Add New Item ? เลอก Web User Control จ�กนนตงชอคอนโทรลว� TimeControl จะได ห น � Design ข อ ง User Control เ ร � ส � ม � ร ถล � ก ค อ น โ ท ร ล DropdownList และเพมเตมคำ�พดจนมหน�ต�ภ�พ
ค�ทอยใน DropdownList ตวแรกชอ ddlHour ทำ�ก�รเกบค�ชวโมง และตวทสองชอ ddlMinute ทำ�ก�รเกบค�น�ท เร�ส�ม�รถกำ�หนดค � ใ น DropDownList ท ง ส อ ง ต ว ไ ด ใ น Code Behind (TimeControl.ascx.cs) สำ�หรบชวโมงควรกำ�หนดใหมค�ตงแต 0 ถง
97
Microsoft Visual Studio 2010
23 และน�ทควรกำ�หนดใหมค�ตงแต 0 ถง 59 ก�รกำ�หนดค�นเปนค�เร มตนของคอนโทรล ดงนนเร�ตองกำ�หนดในสวนของโพรซเดอร OnInit ซงจะเกดกอนเหตก�ณ Page_Load
ADO.NET
ADO.NET น น ก ค อ ก ล ม ข อ ง อ อ ป เ จ ก ต ภ � ย ใ ต เ น ม เ ส ป ซ System.Data ซงจะทำ�หน�ทเปนสอกล�งระหว�ง โปรแกรมทพฒน�ดวยสถ�ปตยกรรม .NET Framework กบ แหลงขอมล ซงในทน อ�จจะ“ ”หม�ยถง ไฟลฐ�นขอมลของ Access ไฟล Excel ก และยงหม�ยรวมไปถง ระบบจดก�รฐ�นขอมลโดยเฉพ�ะอย�งเชน Microsoft SQL Server หรอว� Oracle ไดอกดว
ADO.NET นน ได รบก�รปร บปร งจ�ก ADO เวอรช นก อน ให สนบสนนก�รทำ�ง�นทงแบบ Connected และ Disconnected ซงแตเดมนน จะสนบสนนเพยงก�รทำ�ง�นแบบ Connected หรอ แบบเชอตอกบแหลงขอมลตลอดเวล�เท�นน ดวยก�รทำ�ง�นแบบ Disconnected คณจงส�ม�รถทจะปดก�รตดตอกบแหลงขอมล ในขณะททำ�ก�รเรยกด หรอทำ�ก�รแกไขขอมล และยงส�ม�รถทำ�ก�รจดเรยง (Sort) ขอมล หรอแมกระทง Filter ขอมลเพอก�รแสดงผลได เปนก�รชวยประหยดทรพย�กรระบบ โดยเฉพ�ะอย�งยง เมอเปนก�รทำ�ง�นรวมกบระบบจดก�รฐ�นขอมลอย�ง Microsoft SQL Server หรอ Oracle ทเปนก�รตดตอกนระหว�งโปรเซสของ ASP และโปรเซสของตวระบบจดก�รฐ�นขอมล หรอก�รตดตอกนระหว�งเครองเซรฟเวอร 2 เครอง
โครงสรางหลกของ ADO.NET
หลงจ�กเร�ไดทำ�คว�มรจกกบ ADO.NET อย�งคร�วๆ แลว เพอคว�มเข�ใจในโครงสร�งและก�รทำ�ง�นของ ADO.NET ใหชดเจนขน เร�จะม�ด
98
Microsoft Visual Studio 2010
โครงสร�งหลกๆ ของ ADO.NET กน ซงใน ADO.NET นนจะประกอบไปดวยคล�สจำ�นวนม�ก แตจะส�ม�รถแบงออกไดเปน 2 กลม คอ
· กลมททำางานกบขอมลบนหนวยความจำา หรอทำางานแบบ Disconnected
คล�สในกลมนอ�จะเรยกไดว� เปนตล�สในกลมทไดรบก�รพฒน�ขนม�ใหม และเปนเอกลกษณของ ADO.NET เลยกว�ได ซงคล�สกลมน จะเปนกลมทใชในก�รจำ�ลองโครงสร�งของขอมล ใหมลกษณะคล�ยคลงกบขอมลจรงทถกเกบอยในฐ�นขอมลใหม�กทสด โดยก�รจำ�ลอง ต�ร�ง (Table) ฟลด (Field) และเรคคอรด (Record) หรอแมกระท งคว�มสมพนธ ระหว�งต�ร�ง (Data Relation) จ�กแหลงขอมล ม�ไวในหนวยคว�มจำ�หลก ซงผพฒน�จะส�ม�รถเรยกใช และแกไขขอมลทอยในคล�สกลมนได เสมอนว�กำ�ลงทำ�ง�นกบฐ�นขอมลจรง กอนทจะทำ�ก�ร Update ขอมลจ�กคล�สเหล�น กลบไปยงแหลงขอมล
· กลมททำางานกบแหลงขอมลโดยตรง หรอทำางานแบบ Connected
คล�สในกลมนจะเปนคล�สททำ�ก�รสร�ง Connection กบแหลงขอมลโดยตรง ไมว�จะเปนไฟล หรอ ระบบจดก�รฐ�นขอมลกต�ม และทำ�ก�รอ�น หรอแกไขขอมลไปยงแหลงขอมลนน ซงในคล�สกลมนจะเกยวของกบก�รเปด Connection ไปยงระบบจดก�รฐ�นขอมล และก�รใชคำ�สง SQL เพอทำ�ก�รเรยกด หรอว�แกไขขอมล โดยคล�สกลมน จะมชอเรยกเปนท�งก�รว� .NET Data Provider
99
Microsoft Visual Studio 2010
ทำาความรจกกบ .NET Data Provider
อย�งทเร�ทร�บกนดแลวว� แหลงขอมล ในปจจบนนมอยเปน“ ”จำ�นวนม�ก แมว�ผทพฒน�ดวยสถ�ปตยกรรม .NET Framework มกจะน ยมใชง�น Microsoft SQL Server ก ต�ม แต ก อ�จมกรณ ท คณตองก�รสร�งโปรแกรมเพอตดตอกบฐ�นขอมลอน ๆ เชนกน แตไมว �
แหลงขอมล เบองหลงนนจะเปนระบบใด ผพฒน�กยงส�ม�รถทำ�ง�นกบ“ ”แหล งขอม ลเหล �น น ผ �น ADO.NET ได เหมอนเด ม น นก เพร�ะว� ADO.NET ไดมก�รกำ�หนดโครงสร�งทเรยกว� .NET Data Provider เอ�ไวนนเอง ก�รท ADO.NET นน เลอกใชก�รกำ�หนดโครงสร�งโพรไวเดอรขนม� แทนทจะเปนก�รสร�ง API ท ส�ม�รถทำ�ง�นไดกบฐ�นขอมลทกประเภทอย�งทเร�เคยพบใน OleDB หรอ ODBC นนกเปนเพร�ะเหตผลท�งด�นประสทธภ�พในก�รทำ�ง�น ถงแมว�ระบบจดก�รฐ�นขอมล แมจะส�ม�รถตดตอกบโปรแกรมผ�นท�งอนเตอรเฟสกล�งอย�ง OleDB หรอ ODBC ได แตเบองหลงแลว ก�รทำ�ง�น หรอแมกระทงวธทระบบจดก�รฐ�นขอมลนนใชในก�รเกบขอมลยอมแตกต�งกนโดยสนเชง ซงแมแตวธท ODBC นนใชในก�รเกบขอมล กอ�จจะแตกต�งกบตวภ�ษ�ทนำ� ODBC ไปใชง�นอกดวย ทำ�ใหเกดก�รแปลงขอมลไป-ม� ระหว�งตวปรแกรมทเรยกใช กบตว ODBC เอง และยงอ�จมก�รแปลงขอมลระหว�งตว ODBC กบระบบจดก�รฐ�นขอมลอกชนหนง และก�รทมอนเทอรเฟสกล�งนน กจะเปนก�รจำ�กดใหผพฒน� ไมส�ม�รถใช คว�มส�ม�รถพเศษ หรอแมแตรป
100
Microsoft Visual Studio 2010
แบบขอมล ทมเฉพ�ะในระบบจดก�รฐ�นขอมลนนๆ ได Provider จงเปนท�งออกในก�รแกปญห�คว�มไมลงรอยกนระหว�งตวภ�ษ� ตว API (เชน ODBC) และระบบจดก�รฐ�นขอมลไดเปนอย�งด เนองจ�ก .NET Data Provider นน เปนทแนนอนว�ยอมตองไดรบก�รพฒน�ดวยภ�ษ� และ Data Type ท CLR (Common Language Runtime) รองรบ จงตดปญห�คว�มไมเข�กนของขอมลระหว�งตว API และภ�ษ�ทเรยกใชได และเจ�ของโพรไวเดอรเอง กส�ม�รถพฒน�อนเตอรเฟสก�รตดตอของตนไดอย�งเตมท เพอใหผพฒน�ส�ม�รถใชง�นฟเจอรพเศษของระบบจดก�รฐ�นขอมลได (อย�งเชน Fetch Size ใน Oracle Data Provider) รวมไปถงก�รสร�ง Data Type ใหมขนม�เพอรองรบรปแบบของขอมลเฉพ�ะ ในระบบจดก�รฐ�นขอมลของตนไดอกดวย
Provider มาตรฐานใน ADO.NET สำาหรบ .NET Framework 2.0
ใน .NET Framework 2.0 นน ท�งทมพฒน� ไดมก�รสร�งโพรไวเดอรม�ตรฐ�นไวดงน
แหลงขอมล เนมเสปซของ ProviderMicrosoft SQL Server 7.0 ขนไป
System.Data.SqlClient
Oracle 8.1.6 ขนไป System.Data.OracleClientSqlXml ใน SQL Server System.Data.SqlXmlODBC DataSource System.Data.ODBCOleDb System.Data.OleDb
จะเหนไดว� ODBC และ OleDb นน กยงคงไดรบก�รพฒน�ใหเปน Data Provider ใ น .NET Framework อ ย น น ก เ พ อ ท ว � สถ�ปตยกรรม .NET จะไดส�ม�รถทำ�ง�นไดกบระบบจดก�รฐ�นขอมลทรองรบ ODBC และไฟลฐ�นขอมลของ Access และ Excel ผ�นท�ง
101
Microsoft Visual Studio 2010
OleDb ได เชนเดยวกบ ADO Classic แนนอนว� คณส�ม�รถเลอกทจะตดตอกบ SQL Server หรอ Oracle ผ�นท�ง ODBC ไดเหมอนเคย แตอย�ลมว� คณจะตองประสบกบขอจำ�กดของ API ทส�ม�รถทำ�ง�นไดกบฐ�นขอมลทกรปแบบ อย�งทผเขยนไดกล�วถงไปแลว โดยสรปอกครงหนงนนกคอ
· ประสทธภ�พในก�รทำ�ง�นทลดลง จ�ก Overhead ในก�รแปลงขอมล ไป-ม�
· คว�มไมเข�กนระหว�งรปแบบก�รจดเกบขอมล ซงใน .NET จะทำ�ใหเกดก�ร Boxing-Unboxing รวมไปถงคว�มส�ม�รถในก�รใชง�น Type เฉพ�ะสำ�หรบระบบก�รจดก�รฐ�นขอมลนนๆ
· และ ท�ยทสดคอ ก�รสญเสยคว�มส�ม�รถในก�รเรยกใชฟเจอร เฉพ�ะบ�งอย�ง ทคณอ�จจะไมส�ม�รถเรยกใชไดผ�นท�ง ODBC ภ�ยใน Visual Studio 2010 โ ด ย เ ฉ พ � ะ อ ย � ง ย ง ใ น ส ว น ข อ ง Web Development นน ไดรบก�รพฒน�ในด�นก�รเชอมตอ และทำ�ง�นกบฐ�นขอมลไปม�ก จนคณส�ม�รถสร�ง Website ดวย ASP.NET ทมก�รแสดงผล แกไข หรอคนห�ขอมลได โดยแทบจะไมจำ�เปนจะตองเขยนโคดเลยแมแตบรรทดเดยว ซงในคว�มเหนของผเขยนแลว นบว�เปนสงทอนตร�ยม�ก สำ�หรบผทไมไดผ�นก�รใชง�น ASP.NET ในเวอรชนเก� หรอก�รเขยนโปรแกรมดวย .NET ในโปรเจคชนดอนม�กอน เพร�ะคว�มสะดวก และง�ยของ Wizard และ Tool น จะเปนก�รซอนขนตอนพนฐ�นในก�รใชง�น ADO.NET จรงๆ ไวทงหมด นนกหม�ยคว�มว� คณจะไมส�ม�รถใชคว�มร คว�มชำ�น�ญจ�กของก�รพฒน� Web Application ดวย ASP.NET ท ตดตอกบฐ�นขอมลไปใชกบโปรเจคชนดอนๆ ไดเลย พนฐ�นก�รตดตอกบฐ�นขอมลนน อ�จจะฟงดเปนเรองทย�กและไกลตว แตอนทจรงแลว มออปเจกตทเกยวของเพยงแค 4 ชนดเท�นน และมขนตอนก�รทำ�ง�นทต�ยตว
102
Microsoft Visual Studio 2010
ไมว�คณจะใชโพรไวเดอรตวใดกต�ม ซงออปเจกตทง 4 ชนดนน ประกอบไปดวย
· Data Connection เปนออปเจกตททำ�หน�ทสร�งก�รเชอมตอกบระบบจดก�รฐ�นขอมล โดยคณส�ม�รถระบพ�ร�มเตอรในก�รใชง�นระบบจดก�รฐ�นขอมลได ผ�นท�ง Connection String ทภ�ยในจะประกอบไปดวย ชอของเครองทเปนเซรฟเวอรฐ�นขอมล ชอฐ�นขอมล ชอผใช และพ�สเวรด แตทงน สงทคณจะส�ม�รถกำ�หนดไดใน Connection String กจะแตกต�งกนไปในแตละโพรไวเดอร
· Command เมอคณส�ม�รถสร�งก�รเชอตอกบระบบจดก�รฐ�นขอมลไดเรยบรอยแลว ในขนตอนตอไป คณกจะเร มสงง�นใหระบบจดก�รฐ�นขอมลทำ�ง�นดวยคำ�สงในภ�ษ� SQL โดยก�รใชออปเจกตประเภท Command ถ�ห�กว�คำ�สง เปนประเภท INSERT UPDATE DELETE ก�รทำ�ง�นกบระบบฐ�นขอมลกจะสนสดทก�รเรยกให Command สงง�นไปยงฐ�นขอมล และปดก�รเชอมตอ แตถ�ห�กว�เปนก�รเรยกดขอมลจ�กฐ�นขอมล ดวยคำ�สง SELECT หรอก�รใช Stored Procedure กจะตองมขนตอนในก�รอ�นขอมลทเปนผลลพธเพมขนอก
· DataReader จะเปนออบเจกทใชในก�รอ�นขอมลทเปนผลลพธจ �กค ำ� ส ง SELECT หร อ Stored Procedure ในล กษ ณะคร ง ล ะเรคคอรด จนหมด และไมส�ม�รถยอนกลบไปอ�นเรคคอรดทผ�นม�ได (Forward-Only) จงเหม�ะกบก�รใชง�นกบผลลพทธทจะไมมก�ร Sort หรอ Filter ขอมลท�งฝ ง ASP ภ�ยหลง DataReader จงมจดเดนในเร องประสทธภ�พ และก�รใชง�นหนวยคว�มจำ�ทนอยกว�ก�รนำ�ขอมลทงหมดขนม�ในคร�วเดยว ก�รทำ�ง�นของ DataReader นน จำ�เปนจะตองมก�รเชอมตอกบแหลงขอมลตลอดเวล� จนกว�ขอมลทงหมดจะถกอ�นขนม�ได นบเปนก�รทำ�ง�นกบขอมลในแบบ Connected
103
Microsoft Visual Studio 2010
· Data Adapter นน จะเปนออปเจกตทำ�ก�รอ�นขอมลทงหมดทเปนผลลพทธของคำ�สง SELECT หรอ Stored Procedure ขนม�เกบไวในออกเจกต DataSet แลวจงตดก�รเชอมตอกบระบบจดก�รฐ�นขอมล จงเหมอนเปนก�รจำ�ลองโครงสร�งของต�ร�งทเปนผลลพธไวภ�ยในหนวยคว�มจำ� (ลกษณะคล�ยก�ร Cache) คณจงส�ม�รถเรยกดขอมลเรคคอรดใด ๆ กไดแมว�ก�รตดตอกบระบบจดก�รฐ�นขอมลจะถกปดไปแลวกต�ม หรอเปนก�รทำ�ง�นกบขอมลแบบ Disconnected นนเอง และ นอกจ�กน คณยงส�ม�รถใชฟเจอรของ ADO.NET ในก�ร Sort หรอ Filter ขอมลจ�ก DataSet ไดอกดวย ก�รใช DataAdapter และ DataSet นน จงจะเหม�ะสมกว�กบก�รใชง�นทวไปใน ASP.NET แตขอเสยของก�รใช Data Adapter และ DataSet นนกคอ ปรม�ณหนวยคว�มจำ�ทใช เนองจ�กขอมลทงหมดจะตองถกนำ�ขนม�เกบไวในหนวยคว�มจำ�หลก และยงม Overhead จ�กก�รท ำ� Boxing-Unboxing เม อมก�รเรยกด ขอมลอกดวย เนองจ�ก DataSet นนจะเกบขอมลโดยใชตวแปรประเภท Object
การแสดงขอมลแบบ Connected
หลงจ�กทเร�ไดทร�บถงออปเจกตทเกยวของกบก�รตดตอฐ�นขอมลกนแลว เร�จะทดลองนำ�ออปเจกตเหล�นน ม�ใชในก�รเรยกดขอมลจ�กฐ�นขอมล pubs ทเร�ไดทำ�ก�รตดตงไว เพอม�แสดงผลใน GridView สงแรกทคณจะตองทำ�กคอ สร�งเวบไซตใหมใน Visual Studio 2010 หรอ Visual Web Developer Express จ�กนน ล�ก GridView จ�กทลบอกซน ำ�ออกม�ว�งไว ในเวบฟอรม Default.aspx และต งช อว � Author สำ�หรบ GridView นน เร�จะม�พดถงร�ยละเอยดก�รใชง�นอย�งละเอยดในบทถดไป
104
Microsoft Visual Studio 2010
จ�กนน เร�จะเขยนโคดในเหตก�รณ Page_Load เพอเปดก�รตดตอกบฐ�นขอมล ดวยโคดด�นล�งน
using ( SqlConnection connection = new SqlConnection()) connection.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=pubs;Integrated Security=True"; connection.Open();
เ น อ ง จ � ก ก � ร เ ป ด Connection ไ ป ย ง Microsoft SQL Server Express นน มก�รเรยกใชง�น Resource ภ�ยนอก (สงเกตไดจ�กก�รทออปเจกตนนมคำ�สง Dispose) ซง Garbage Collector ของ CLR ไมส�ม�รถชวยเร�จดก�รหนวยคว�มจำ�ได จงควรจะตองใช using block เพอเปนก�รกำ�หนดให CLR นน เรยกคำ�สง Dispose ของออปเจกต และจดก�รล�งหนวยคว�มจำ�ใหเมอก�รทำ�ง�นของโคดนน ออกจ�ก block ของ using ไป ซ งอนทจรงแลว จะมผลเหมอนกบก�รเรยกคำ�สง Dispose ดวยตวเอง แตก�รใช using block นนจะทำ�ให Code ดง�ยขน ส�ม�รถมองเหนไดชดเจนว�ออปเจกตมก�รใชง�นตงแตสวนไหน จนถงสวนไหน
105
Microsoft Visual Studio 2010
และส�ม�รถมนใจไดว� ออปเจกตนนจะถก Dispose อย�งแนนอน แมว�จะม Exception หรอว�ก�รเปลยน Scope อย�งไมตงใจกต�ม หลงจ�กเปด Connection แลว ขนตอนตอไปคอก�รสร�ง Command ขนม� เพอสงให Microsoft SQL Server นนดงขอมลออกม�จ�กฐ�นขอมล ออปเจกต Command นนก มก�รเรยกใชง�น Resource ภ�ยนอกเชนเดยวกน ดงนน จงควรใชง�นออปเจกต Command นใน using block เชนเดยวกบก�รใชออปเจกต Connection
using ( SqlConnection connection = new SqlConnection()) connection.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=pubs; " + "Integrated Security=True"; connection.Open(); using (SqlCommand command = new SqlCommand())
command.CommandText = "SELECT * FROM authors";
command.Connection = connection;
command.ExecuteReader();
จ�กนน เมอเร�ทำ�ก�รเรยกใชง�นคำ�สง ExecuteReader กจะเปนก�รสงง�นให Microsoft SQL Server นน Execute คำ�สง SQL ทกำ�หนดไว และคนค�ออกม�เปน SqlDataReader เพอใชสำ�หรบก�รอ�นขอมล
106
Microsoft Visual Studio 2010
การใชงาน Data Reader เพออานขอมลจากแหลงขอมล
ก�รอ�นขอมลของ Data Reader นนจะเปนก�รอ�นคร งละฟลด ภ�ยใน 1 เรคคอรด คล�ยกบออปเจกต Record Set ของคล�สสค ADO โดยในครงแรกนน ตว DataReader จะอยทตำ�แหนงเรคคอรดท -1 หรออ�จเรยกว�เรคคอรด กอน เรคคอรดแรก ซงถอเปนเรคคอรดทใชส ำ�หรบระบว� DataReader นน ยงไมไดทำ�ก�รอ�นเรคคอรดใดๆ ขนม� คณส�ม�รถเลอนตำ�แหนงก�รอ�นของ DataReader ไปข�งหน� คร งละ 1 เรคคอรดไดเร อยๆ โดยก�รเรยกใชฟงกชน Read ของ Data Reader ซ ง เมธอด Read จะค นค � เป น True ถ �ห�กว� DataReader น น ส�ม�รถอ�นขอมลจ�กเรคคอรดตวถดไปขนม�ได หลงจ�กนนคณส�ม�รถใชคำ�สง GetInt หรอ GetString เพออ�นขอมลจ�กฟลดทตองก�รจ�กเรคคอรดนนได
สำ�หรบโคดตวอย�ง น จะทำ�ก�รอ�นขอมลจ�กต�ร�ง authors ขนม�แสดงผลภ�ยในคอนโทรล Literal ซงผลลพธทได กจะเปนขอคว�มแสดงชอ และน�มสกลของนกเขยน จ�กต�ร�ง authors นนเอง
using ( SqlConnection connection = new SqlConnection()
107
Microsoft Visual Studio 2010
) connection.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=pubs;" + "Integrated Security=True"; connection.Open(); using ( SqlCommand command = new SqlCommand() ) command.CommandText = "SELECT * FROM authors"; command.Connection = connection; using ( SqlDataReader reader = command.ExecuteReader() ) StringBuilder sb = new StringBuilder(); int record = 0; while ( reader.Read() ) sb.AppendFormat( "Record #{0}:<BR />", record ); sb.AppendFormat( "au_lname: {0}<BR/>", reader.GetString( 2 ) ); sb.AppendFormat( "au_fname: {0}<BR/>", reader.GetString( 1 ) ); record += 1; litOutput.Text = sb.ToString();
108
Microsoft Visual Studio 2010
นอกจ�กนแลว คณยงส�ม�รถนำ� DataReader นไปเปน DataSource ใหกบคอนโทรล GridView ไดทนท โดยก�รกำ�หนด DataReader ใหกบพรอพเพอต DataSource ของคอนโทรล GridView และเรยกเมธอด DataBind เพอให GridView เรมอ�นขอมลจ�ก DataSource ซง DataReader นนกควรจะอยใน using block เชนเคย
using ( SqlConnection connection = new SqlConnection()) connection.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=pubs;Integrated Security=True"; connection.Open(); using (SqlCommand command = new SqlCommand()) command.CommandText = "SELECT * FROM authors"; command.Connection = connection; using (SqlDataReader reader = command.ExecuteReader())
this.Author.DataSource = reader;
this.Author.DataBind();
ก�รทำ�ง�นของโคดข�งตน จะใหผลลพธต�มรป
109
Microsoft Visual Studio 2010
อย�ลมว�ถ�ห�กว�คณไมไดใชง�น using block คณจะตองทำ�ก�รปด DataReader และ Connection เองทกคร ง หลงจ�กใชง�นเสรจ ดวยเมธอด Close หรอ Dispose เสมอ เพอคนหนวคว�มจำ�ท ออปเจกตนนเรยกใชง�นกลบสระบบ
สวนประกอบทสำ�คญ และจำ�เปนตองมในเวบไซตสมยใหมคอ คว�มเปนสม�ชก ห�กเร�มคว�มเปนสม�ชกกบเวบไซตแหงหนงแลว เร�จะไดรบสงทตดตวเร�คอ สงทแสดงตวตนของเร� หรอแอคเค�ต (Account) และสทธท เร�จะไดรบจ�กก�รเปนสม�ชก (Authorization) ใน ASP.NET 1.x เร�ส�ม�รถกำ�หนดแอคเค�ต และสทธของสม�ชกแบบง�ยๆ ไดในไฟลคอนฟกกเรชน web.config แตวธนจะใชกบเวบไซตทมขน�ดเลก คอจะมสม�ชกในเวบไซตไมม�กนก เชน 10-20 คน เพร�ะไมมเครองมอตวใดพเศษทชวยจดก�ร แตถ�ห�กมสม�ชกม�กว�นน และตองก�รจดก�รกบแอคเค�ต และสทธของสม�ชกแบบทซบซอน เร�ตองเขยนโคดทตดตอกบฐ�นขอมลเอง ซงจะตองเสยเวล�ม�กพอสมควร เพอจดก�รกบคว�มเปนสม�ชกทเปนสงจำ�เปนน ASP.NET 2.0 ไดสร�งคอนโทรล API และโพรไวเดอรทใช ตดตอกบฐ�นขอมลสำ�หรบคว�มเปนสม�ชกโดยเฉพ�ะ ซงทำ�ใหเร�ประหยดเวล�ม�ก บ�งทเร�แทบจะไมตองเขยนโคดเลยห�กใชฐ�นขอมล SQL Server แตถ�ใชก บฐ�นขอมลอนเร�ตองสร�งโพรไวเดอรข นม�เองทส�ม�รถตดตอกบฐ�นขอมลเอง แตก�รเขยนโคดทอยเหนอระดบของโพรไวเดอรนนไมตองมเปลยนแปลงใดๆ
110
Microsoft Visual Studio 2010
การสราง Member ใน ASP.NET 2.0
โครงสร�งของคว�มเปนสม�ชกไดถกแบงออกเปนสวนๆ เพอง�ยในก�ร
จดก�ร ดงภ�พ
ร�ยละเอยดของสวนยอยแตละสวนของคว�มเปนสม�ชกมดงน
- คอนโทรลความเปนสมาชก (Membership Controls) เปนคอนโทรลกลม Login ของทลบอกซใน Visual Studio 20005 ซงจะเปนกลมคอนโทรลทจดก�รเกยวกบคว�มเปนสม�ชกทงหมดตงแต ก�รสร�งสม�ชก ก�รลอกอน ก�รเปลยนรหสผ�น และแจงรหสผ�นในกรณทลม เร�ส�ม�รถล�กไปใชง�นบนเวบฟอรมไดทนท ทำ�ใหเร�ประหยดเวล�ในก�รเขยนโปรแกรมม�ก นอกจ�กนคอนโทรลเหล�นทำ�ง�นสมพนธกบคล�ส Membership API เพอรบ และสงขอมลคว�มสมพนธอยแลว จงทำ�ใหเร�ไมตองเสยเวล�เขยนโปรแกรมเพอจดก�รกบคอนโทรลในกลมนม�กนก
- API ความเปนสมาชก (Membership API) เปนกลมของคล�สททำ�ง�นรวมกนเพอรบ และสงขอมลระหว�งคอนโทรลคว�มเปนสม�ชก และโพรไวเดอรของฐ�นขอมลแตละชนด
- โ พ ร ไ ว เ ด อ ร ค ว า ม เ ป น ส ม า ช ก (Membership Providers) เปนกลมของคล�สททำ�หน�ทตดตอกบฐ�นขอมลแตละประเภท ใน ASP.NET 2.0 จะมโพรไวเดอรของฐ�นขอมล SQL Server
111
Microsoft Visual Studio 2010
และ Active Directory ตดม�ดวย และส�ม�รถเรยกใชง�นไดเลย ห�กตองก�รใชฐ�นขอมลอนจะตองเขยนโพรไวเดอรเฉพ�ะขนม�เอง (Custom Providers)
- ฐานขอมลความเปนสมาชก (Membership Stores) เปนฐ�นขอมลทเกบคว�มเปนสม�ชก ซงปกตภ�ยในฐ�นขอมลน จะประกอบไปดวยต�ร�งทเกบขอมลสม�ชก และบทบ�ทของสม�ชก
การเตรยมใชงานความเปนสมาชก
จ�กโครงสร�งของคว�มเปนสม�ชกในหวขอทผ �นม� สวนของคอนโทรล และ API คว�มเปนสม�ชกนนถกสร�งม�เรยบรอยแลว และพรอมใชง�นไดทนท แตในสวนของโพรไวเดอรทตดตอกบฐ�นขอมล และตวฐ�นขอมลนน เร�ตองทำ�ก�รสร�งขนม�เอง ดงนนก�รเตรยมก�รใชง�นคว�มเปนสม�ชกจงมง�นหลกๆ คอก�รสร�งโพรไวเดอร และเตรยมพรอมฐ�นขอมลเปนสวนใหญ ใน Visual Studio 2010 ไดสร�งโพรไวเดอร สำ�หรบฐ�นขอมล SQL Server และ Active Directory ไวใหแลว ซงในทนจะขอแสดงก�รใชง�นโพรไวเดอร และฐ�นขอมล SQL Server กอน เพร�ะมก�รใชง�นไมซบซอนนก และใชง�นไดง�ย เมอเร�เลอกใชโพรไวเดอรทใชกบฐ�นขอมล SQL Server แลว ง�นหลกทเหลอจะเปนก�รเตรยมฐ�นขอมล SQL Server และก�รกำ�หนดค�ต�งๆ เกยวกบคว�มเปนสม�ชกในไฟลคอนฟกกเรช น web.config เท�นน ก�รเตรยมฐ�นขอมล SQL Server เพอใชเกบขอมลคว�มเปนสม�ชก เร�ส�ม�รถเลอกฐ�นขอมลได 2 แบบคอ
1. ฐานขอมล SQL Server ดฟอลต เปนฐ�นขอมลทจะถกสร�งขนม�โดยอตโนมต เมอคลกทแทบคว�มปลอดภย (Security) ของเครองมอ Website Administration Tool (WAT)
112
Microsoft Visual Studio 2010
2. ฐานขอมล SQL Server ทสรางขนมาเองโดยเฉพาะ เปนฐ�นขอมลทเร�ตองสร�งขนม�เองใน SQL Server จ�กนนจงรนสครปตทตดม�กบ Visual Studio 2010 เพอสร�งต�ร�งคว�มเปนสม�ชกเอง
ก�รใชง�นฐ�นขอมลทงสองแบบ จะกล�วถงร�ยละเอยดในหวขอถดไป
การใชงานฐานขอมล SQL Server ดฟอลต
ฐ�นขอมลแบบน ส�ม�รถสร�งไดง�ย เพร�ะจะถกสร�งขนม�โดยอตโนมตผ�นเคร องมอ WAT เหม�ะกบก�รสร�งฐ�นขอมลคว�มเปนสม�ชกสำ�หรบเวบไซตขน�ดเลกถงขน�ดกล�ง แตกมขอเสยคอฐ�นขอมลชนดนจะถกเกบเอ�ไวในเวบไซตเอง ซงจะเปนไฟลทชอ ASPNETDB.MDF ทเกบอยในโฟลเดอร App_Data บ�งครงไฟลนมชอเรยกว�เปน ฐ�นขอมลแบบไฟล (File Database) เมอมนทำ�ง�น ไฟลนจะถกนำ�ไปผกกบฐ�นขอมล (Attach Database) SQL Server Express โดยอตโนมตเมอถกเรยกโดยเวบฟอรม และทำ�ง�นอยในหนวยคว�มจำ�เท�นน ดงนนเร�จงไมส�ม�รถเข�ไปจดก�รฐ�นขอม ลชน ดน ผ �นเคร องมอ SQL Server Management Studio ได แตจะส�ม�รถเข�ไปจดก�รผ�น Server Explorer ไดเท�นน นอกจ�กนยงไมเหม�ะกบเวบไซตท รนอยบนเวบเซรฟเวอรหล�ยๆ ตว (Web Farm)
วธก�รสร�งฐ�นขอมลน ใหเร�ทำ�ก�รเปดเคร องมอ WAT โดยคลกทไ อ ค อ น ASP.NET Configuration ใ น Solution Explorer ข อ ง Visual Studio 2010 ดงภ�พ
113
Microsoft Visual Studio 2010
หลงจ�กทคลกทไอคอน ASP.NET Configuration แลว เครองมอ WAT จะถกเปดใน Internet Explorer ดงภ�พ
เครองมอ WAT ส�ม�รถจดก�รค�เกยวกบคว�มปลอดภย กำ�หนดค�เรมตน และกำ�หนดค�โพรไวเดอรใหกบเวบไซต ในทนจะขอเร มตนจ�กแทบแรกคอ Security เมอเร�เข�คลกเข�ม�ทแทบน Visual Studio 2010 จะทำ�ก�รสร�งฐ�นขอมล ASPNETDB.MDF ทใชสำ�หรบเกบขอมลคว�มเปนสม�ชกในโฟลเดอร App_Data ของเวบไซตโดยอตโนมต ดงภ�พ
เพอใหเร�ส�ม�รถใชง�นคว�มเปนเปนสม�ชก ขนตอนแรกเร�ตองท ำ� ก � ร ก ำ� ห น ด ว ธ ก � ร เ ข � ส ร ะ บ บ ใ ห เ ป น แ บ บ ฟ อ ร ม (Form
114
Microsoft Visual Studio 2010
Authentication) กอน เพร�ะคว�มเปนสม�ชกใน ASP.NET 2.0 นไดสร�งตอยอดจ�กก�รเข�สระบบแบบฟอรมของ ASP.NET 1.x ซงห�กก�รเข�สระบบดวยก�รลอกอนสำ�เรจ เวบไซตจะทำ�ก�รสงคกกทแสดงตวตนของสม�ชกกลบไปเกบไวทไคลเอนต และถ�ห�กคกกทเกบไวทไคลเอนตหมดอ�ย ผใชระบบจะตองเข�ไปลอกอนใหมอกท เพอทจะใหมก�รเข�สระบบแบบฟอรม ใหคลกทลงค Select authentication type หลงจ�กคลกแลว จะพบหน�จอใหเลอกวธทผใชระบบจะส�ม�รถเข�ถงเวบไซตดงภ�พ
จ�กภ�พ ใหเร�เลอกตวเลอกทบอกว�ผใชระบบจะเข�ม�จ�กอนเตอรเนต (From the internet) แลวกดปม Done ทด �นล�งขว� ผลจ�กก�รกำ�หนดค�ในเคร องมอ WAT น จรงๆ แลวมนจะไปท ำ�ก�รกำ�หนดค�แอตทรบวตโหมดของอเลเมนต authentication ในไฟลคอนฟกกเรชน web.config ตออกท ถงตอนนเร�ไดเปดใชฐ�นขอมล SQL Server แบบดฟอลตเรยบรอย แลว เร�ส�ม�รถตรวจสอบไดโดยคลกทแทบโพรไวเดอร จะเหนหน�จอทบอกว�ตอนนไพรไวเดอร AspNetSqlProvider ถกใชง�นอยดงภ�พ
115
Microsoft Visual Studio 2010
ในตอนน เร�พรอมใชง�นคว�มเปนสม�ชกของเวบไซตแลว เร�ส�ม�รถทดสอบไดโดยก�รเพมสม�ชกในระบบผ�นเครองมอ WAT จ�กแทบคว�มปลอดภย ดงภ�พ
เมอเร�คลกทลงค Create user จะพบหน�จอสร�งสม�ชกระบบ ใหทดลองกรอกขอมลต�งๆ แลวกดปมสร�งสม�ชกระบบ (Create User)
116
Microsoft Visual Studio 2010
ห�กเร�เข�ไปดในฐ�นขอมล จะพบขอมลของสม�ชกทเร�สร�งขนในต�ร�ง aspnet_Membership และ aspnet_Users แยกต�มแอพพลเคชนแตละชนด (โปรดสงเกตคอลมน ApplicationId) ดงภ�พ
ห�กกล�วถงเร องคว�มเปนสม�ชกแลว จะพบว�เกอบทกเวบไซตมสวนประกอบทจำ�เปนนอย แลวกมคว�มคล�ยคลงกนม�ก เชน ก�รลอกอนดวยชอ และรหสผ�น ก�รแจงเตอนรหสผ�นในกรณทลม ก�รสร�งแอคเค�ตใหสม�ชกใหม เพอใหเร�จดก�รกบสงทจ ำ�เปนนไดง�ย ASP.NET 2.0 ไดสร�งคอนโทรลขนม�ใหมสำ�หรบคว�มเปนสม�ชกโดยเฉพ�ะซงอยถกว�งอยในกล ม Login ของทลบ อก ซ ขอ ง Visual Studio 2010 ซ งจ ะม คอนโทรลอยทงหมด 7 ตวดงต�ร�ง
117
Microsoft Visual Studio 2010
คอนโทรล รายละเอยด
Login ใชสำ�หรบก�รลอกอน เปนคอนโทรลทประกอบไปดวยคอนโทรลยอยหล�ยตว คอ คอนโทรล TextBox สำ�หรบกรอกชอ และรหสผ�น และคอนโทรล Button สำ�หรบ Submit และ Reset
LoginName ใชแสดงชอของผใชระบบทไดผ�นก�รลอกอนม�แลว
LoginStatus
ใชแสดงลงค หรอปมออกจ�กระบบ (Sign Out) ในกรณทผใชระบบไดลอกอนแลว หรอห�กผใชระบบยงไมลอกอน จะแสดงลงค หรอปมทลงคไปหน�ลอกอน (Sign In)
LoginView ใชแสดงกลมของคอนโทรลใน 2 มมมอง คอ มมมองผใชระบบทยงไมไดลอกอน (Anonymous) และมมมองผใชระบบทลอกอนแลว (Logged In)
ChangePassword
ใชสำ�หรบเปลยนรหสผ�น ผใชระบบตองกรอกรหสผ�นเก� รหสผ�นใหม และยนยนรหสผ�นใหม
PasswordRecovery
ใชสำ�หรบแจงเตอนรหสผ�นดวยอเมลในกรณทลม ดวยค�ดฟอลต ระบบจะทำ�ก�รถ�มคำ�ถ�ม และคำ�ตอบกอนทจะสงรหสผ�นไปให แตถ�กำ�หนดค�แอตทรบวต requiresQuestionAndAnswer ใหมค�เปน false ระบบจะถ�มเพยงชออย�งเดยว โดยไมมก�รถ�มคำ�ถ�ม และคำ�ตอบ กจะสงอเมลไปใหทนท
CreateUserWizard
วซ�รดทใชสร�งสม�ชกใหม หรอผดแลระบบใหมใหเวบไซต ดวยค�ดฟอลต ระบบจะบงคบใหกรอกคำ�ถ�ม และคำ�ตอบเพอใชสร�งสม�ชกใหม แตถ�กำ�หนดค�แอตทรบวต requiresQuestionAndAnswer ใหมค�เปน false ระบบจะไมมสวนคำ�ถ�ม และคำ�ตอบม�ใหกรอกเพอใชสร�งสม�ชกใหม
118
Microsoft Visual Studio 2010
ค อ น โ ท ร ล ใ น ก ล ม น ส ว น ใ ห ญ ซ ง ไ ด แ ก ค อ น โ ท ร ล ChangePassword ค อ น โ ท ร ล CreateUserWizard ค อ น โ ท ร ล Login และคอนโทรล PasswordRecovery จะทำ�ง�นรวมกบ API และโพรไวเดอรคว�มเปนสม�ชกเพอตดตอกบฐ�นขอมล ดงนนคอนโทรลเหล�นจงมพรอพเพอต MembershipProvider ม�ใหเร�กำ�หนดค�ได ซ งเร�ส�ม�รถกำ�หนดค�นไดในวนโดวพรอพเพอต หรอในไฟล Code Behind ของเวบฟอรม แตถ�ห�กเร�ละค�นไว หรอไมมก�รกำ�หนดค� คอนโทรลเหล�น จ ะ ใ ช ค � โ พ ร ไ ว เ ด อ ร ด ฟ อ ล ต ท ไ ด ก ำ� ห น ด ไ ว ใ น แ อ ต ท ร บ ว ต defaultProvider ของเซคชน membership ของไฟลคอนฟกกเรชน web.config แทน นอกจ�กนคอนโทรลเหล�นยงอนญ�ตใหเร�กำ�หนดเทมเพลตของเร�เองได เพอคว�มยดหยนในก�รใชง�น
สำ�หรบคอนโทรลอกกลมทไมไดทำ�ง�นรวมกบ API และโพรไวเดอรคว�มเปนสม�ชกคอ คอนโทรล LoginName คอนโทรล LoginStatus และคอนโทรล LoginView คอนโทรลเหล�นจะดงชอผใชระบบ สถ�นะก�รลอกอนปจจบนม�ใชง�น สำ�หรบร�ยละเอยดของคอนโทรลแตละตวจะกล�วในหวขอถดไป
การใชงานคอนโทรล Login
คอนโทรล Login เปนคอนโทรลตวแรกสำ�หรบก�รเข�สระบบ เมอเร�ล�กจ�กทลบอกซม�ว�งในมมมอง Design แลวเร�ส�ม�รถเปลยนสไตลแบบง�ยๆ ดวยก�รกำ�หนด Auto Format ห�กตองก�รปรบขอคว�มต�งๆ ในคอนโทรล เร�ส�ม�รถปรบค�ทกค�ไดในวนโดวพรอพเพอต หรอห�กตองก�รปรบเปลยนแกไขหน�ต�ใหต�มคว�มตองก�ร เร�ส�ม�รถแปลงคอนโทรล Login ใหเปนเทมเพลตไดโดยเลอก Convert to Template ใน Login Tasks ไดดงภ�พ
119
Microsoft Visual Studio 2010
ห�กเร�เลอก Convert to Template จะไดหน�ต�ของคอนโทรล Login ดงภ�พ จ�กภ�พจะเหนว�คอนโทรลถกแปลงใหเปนต�ร�งทบรรคอนโทรลชนดต�งๆ ในตอนนเร�ส�ม�รถล�กคอนโทรลตวอนจ�ก ทลบอกซม�ว�งในคอนโทรล Login เพมเตมได แตเร�ไมส�ม�รถทจะลบคอนโทรล TextBox ทชอ UserName และ Password ออกได เพร�ะคอนโทรลทงสองจำ�เปนตองถกใชง�นในคอนโทรล Login ในกรณทคอนโทรล Login ไดถกแปลงใหเปนเทมเพลตแลว ห�กตองก�รกลบม�ยงค�เรมตนใหมกอนถกแปลงเปนเทมเพลตใหเลอก Reset ท Login Tasks
สำ�หรบก�รเข�สระบบแบบฟอรมน เวบไซตจะตองมหน�ลอกอนอยอย�งนอย 1 หน� เพอทำ�ก�รตรวจสอบผใชระบบว�เปนสม�ชกของระบบหรอไม ห�กผใชระบบส�ม�รถกรอกชอ และรหสผ�นไดถกตอง เวบไซตจะทำ�ก�รเขยนคกกทชอ .ASPXAUTH ไปใหกบไคลเอนต เพอใหส�ม�รถถกอ�งองไดจ�กทกๆ เวบฟอรมในเวบไซต คกกทเขยนไปใหกบไคลเอนตนม 2 ชนด ชนดแรกเปนคกกแบบชวคร�ว (Temporary Authentication Cookie) จะถกลบไปเม อป ดเบร�เซอร ชน ดท สองจะเป นแบบถ�วร
120
Microsoft Visual Studio 2010
(Permanent Authentication Cookie) จะไมถกลบเมอมก�รปดเบร�เซอร แตจะหมดอ�ยไปเองเมอครบเวล�ต�มทกำ�หนดไวในไฟลคอนฟกกเรชน web.config คกกแบบถ�วรนส�ม�รถกำ�หนดไดในคอนโทรล Login โดยก�รคลกเลอกทคอนโทรล CheckBox ทมขอคว�มว� Remember me next time
เพอทจะทำ�ก�รทดสอบคอนโทรล Login เร�จะสร�งเวบไซตทอนญ�ตเฉพ�ะผทไดผ�นก�รลอกอนแลวเท�นน ห�กผใชระบบทไมไดลอกอนพย�ย�มทจะเข�ไปเปดเวบฟอรมใดเวบฟอรมหนงในเวบไซต ผใชระบบคนนนจะถกบงคบใหไปหน�ลอกอนเพอใหทำ�ก�รลอกอนกอน ก�รกำ�หนดใหเวบไซตอนญ�ตใหผใชระบบทไดลอกอนแลวเท�นนเข�ม�ใชง�นไดดงโคดตวอย�ง
<?xml version="1.0" encoding="utf-8"?><configuration> <system.web> <authorization> <deny users="?"/> </authorization> … </system.web></configuration>
จ�กโคดตวอย�ง เร�ส�ม�รถเพมอเลเมนต authorization ใตเซคชน system.web เพอกำ�หนดใหปฏเสธผใชระบบทไมไดลอกอนเข�ม�ใชเวบไซต อเลเมนต deny จะบอกว�ใหทำ�ก�รปฏเสธผใชระบบทไมรจก (?) หรอ Anonymous แตถ�ผใชไดผ�นก�รลอกอนแลว ผใชคนนนจะเปนผใชระบบทรจกแลว หรอเปนสม�ชกของเวบไซตจรงกจะเข�ม�เรยกใชเวบฟอรมต�งๆ ในเวบไซตได ถ�ผใชระบบไมไดลอกอน แตพย�ย�มจะเรยกใชเวบฟอรม ก�รเรยกนนจะถกปฏเสธ และจะถกบงคบใหไปหน�ลอกอนทเร�ส�ม�รถกำ�หนดไดในไฟลคอนฟกกเรชน web.config ดงโคดตวอย�ง
121
Microsoft Visual Studio 2010
<?xml version="1.0" encoding="utf-8"?><configuration> <system.web> <authentication mode="Forms"> <forms loginUrl="~\LogIn.aspx" timeout="30" /> </authentication> … </system.web></configuration>
จ�กโคดตวอย�ง ผใชระบบทไมไดลอกอนจะถกบงคบใหไปหน�ลอกอน LogIn.aspx ซงปกตแลวแอตทรบวต loginUrl นส�ม�รถถกละไดห�กเวบฟอรมลอกอนมชอว� LogIn.aspx เพร�ะเปนค�ดฟอลต แตถ�ห�กเปนชออนใหเร�กำ�หนดค�ใหกบแอตทรบวตน สำ�หรบก�รกำ�หนดเวล�หมดอ�ยของคกกแบบถ�วร ส�ม�รถกำ�หนดในแอตทรบวต timeout ซงมค�เปนชวงเวล�ในหนวยน�ท
หลงจ�กสร�งหน�เวบฟอรมทมคอนโทรลลอกอน และกำ�หนดค�ในไฟลคอนฟกกเรชน web.config แลว ตอไปเร�จะสร�งหน� Default.aspx ขน เพอเปนหน�แรกห�กผใชระบบทำ�ก�รลอกอนสำ�เรจ เพอใหง�ยหน�นอ�จจะเขยนเพยงขอคว�ม Welcome เท�นน ใหลองทดสอบเปดไฟล Default.aspx นในเบร�เซอร จะพบว�เร�จะถกบงคบใหไปหน�ลอกอนกอนโดยม Query String ทชอ ReturnUrl ทบอกว�ห�กลอกอนสำ�เรจแลว ใหไปทหน� Default.aspx ดงภ�พ
122
Microsoft Visual Studio 2010
ปกตแลวคอนโทรล Login จะทำ�ก�รกบโพรไวเดอรคว�มเปนสม�ชกดฟอลตทเร�ไดกำ�หนดไวในไฟลคอนฟกกเรชน web.config (กำ�หนดผ�นแอตทรบวต defaultProvider) แตถ�เร�ตองก�รใชโพรไวเดอรตวอน เร�ส�ม�รถกำ�หนดค�ของพรอพเพอต MembershipProvider ไดในวนโดวพรอพเพอตของคอนโทรล Login ห�กเร�ตองก�รทดสอบคอนโทรล Login เร�อ�จจะใชแอคเค�ตทสร�งจ�กเคร องเมอ WAT หรออ�จจะใชคอนโทรล CreateUserWizard ทจะกล�วถงในหวขอถดไป
การ Setup Project
ก�รตดตงเวบไซตทเวบเซรฟเวอรในบ�งครง เร�อ�จจะไมส�ม�รถเข�ถงเวบเซรฟเวอรไดโดยตรง อ�จจะเนองจ�กเร องคว�มปลอดภยในบรษทใหญ หรอหนวยง�นขน�ดใหญของร�ชก�ร กรณนเร�ส�ม�รถสร�งแพคเกจเพอสงใหกบผดแลระบบทำ�ก�รตดตงใหได วธก�รสร�งแพจเกจนใหเร�สร�งโปรเจค Web Setup โดยคลกขว�ทโซลชน แลวเลอก Add --> New Project… จะปร�กฏไดอะลอก Add New Project ใหเร�เลอกชนดของโปรเจคแบบ Other Project Types --> Setup and Deployment จ�กนนคลกเลอกท Web Setup Project ดงภ�พ
123
Microsoft Visual Studio 2010
จ�กภ�พ ใหเร�ตงชอโปรเจค Web Setup พรอมระบตำ�แหนงทตองก�รว�งโปรเจคน แลวกดปม OK จะไดดงภ�พ
เมอเร�คลกเลอกทโปรเจค Web Setup จะปร�กฏอดเตอร ทด�นบนดงภ�พ ซงจะมอดเตอร 6 ชนด ซงจะไดกล�วในหวขอถดไป ก�รเร�คลกทไอคอน Properties จะปร�กฏไดอะลอก Property Page ดงภ�พ
124
Microsoft Visual Studio 2010
สำ�หรบก�รกำ�หนดค�ต�งๆ ในไดอะลอก Property Pages ของโปรเจค Web Setup มดงน
- Output file name อนญ�ตใหเร�กำ�หนดชอ และโฟลเดอรของไฟลตดตงซงจะมน�มสกลเปน msi
- Package files จะม 3 ตวเลอกดงน
o As loose, uncompressed files จะเปนก�รกำ�หนดใหม ก�รแยกไฟลต�งๆ ทอยในเวบไซตไวต�งห�กจ�กไฟลไฟลตดตง (ไฟลน�มสกล msi) และในเวล�ตดตง เร�ตองทำ�ก�รสงทงตดตง และไฟลทอยในเวบไซตทงหมดไปดวยกน ตวเลอกนจงคอนข�งยงย�กในก�รจดก�ร
o In Setup File ตวเลอกนจะรวมไฟลต�งๆ ไวในไฟลต�งๆ ในเวบไซตไวในไฟลตดตงเรยบรอยแลว ตวเลอกนจงง�ยในก�รจดก�รม�ก เร�ส�ม�รถนำ�ไฟลนไปตดตงไดทนท
o In Cabinet File(s) ตวเลอกนอนญ�ตใหเร�แบงไฟลทจะตดตงออกเปนหล�ยๆ ไฟลได ซงจะประกอบดวยไฟลตดตง และไฟลน�มสกล CAB ทบรรจไฟลต�งๆ ในเวบไซต
125
Microsoft Visual Studio 2010
- Compression เร�ส�ม�รถกำ�หนดใหมก�รบบอด CAB ไฟลเพอคว�มรวดเรวในก�รตดตง (Optimized for speed) หรอเพอใหมขน�ดเลกทสด (Optimized for size) หรอไมอนญ�ตใหมก�รบบอด (None) ได
- CAB size เร�ส�ม�ถกำ�หนดขน�ดของ CAB ไฟลได เพอให เหม�ะกบขน�ดของแผน Floppy Disk แผนซด หรอแผนดวด ห�กขน�ดของไฟลต�งๆ ในเวบไซตม�กกว�ขน�ดของ CAB ทกำ�หนด คอมไพเลอรจะสร�งไฟล CAB ตวใหมขนม�เพอบนทกขอมลของเวบไซตโดยอตโนมต
- Prerequisites จะเปนโปรแกรมทจำ�เปนตองลงกอนทจะตดตงเวบไซต ซ งเร�ส�ม�ถกำ�หนดโปรแกรมทจ ำ�เปนนได จ�กไดอะลอก Prerequisites โดยก�รคลกทปม Prerequisites… ทด�นล�งขว�จะปร�กฏไดอะลอกดงภ�พ
จ�กภ�พ เร�ส�ม�รถเลอกโปรแกรมทจ ำ�เปน และเลอกว �จะตดตงโปรแกรมนจ�กทไหน โดยตวเลอกแรกจะด�วนโหลดจ�กเวบไซตของไมโครซอรฟ ตวเลอกทสองจะโหลดจ�กโฟลเดอรของโปรแกรมตดตง และตวเลอกทส�มจะด�วนโหลดจ�กเวบไซต หรอไฟลเซรฟเวอรทเร�กำ�หนดเอง นอกจ�ก
126
Microsoft Visual Studio 2010
ก�รกำ�หนดค�ในก�รตดตงจ�กไดอะลอก Property Pages แลว เร�ส�ม�รถกำ�หนดค�เพมเตมไดจ�กพรอพเพอตวนโดวส
สำ�หรบพรอพเพอตทน�สนใจของโปรเจค Web Setup มดงน
- DetectNewerInstalledVersion เ ป น ต ว บ อ ก ใ ห แพคเกจตรวจสอบเวบไซตทไดตดตงไวกอนหน� ห�กเวบไซตทตดตงไวกอนมเวอรชนใหมกว� ตวแพคเกจจะหยดทำ�ก�รตดตงทนท
- PreBuildEvent บอกใหแพคเกจทำ�ก�รรนคอมม�นไลนทกำ�หนดไวกอนก�รตดตง
- PostBuildEvent บอกใหแพคเกจทำ�ก�รรนคอมม�นไลนทกำ�หนดหลงก�รตดตง
- RemovePreviousVersions บอกใหแพคเกจทำ�ก�รลบเวอรชนเก�ทมอยกอนก�รตดตง
- RestartWWWService บอกใหแพคเกจทำ�ก�รรสต�รท IIS หลงก�รตดตงสำ�เรจ
127
Microsoft Visual Studio 2010
- RunPostBuildEvent บอกเหตก�รณทจะรนคอมม�นไลนหล งก�รต ดต ง ซ งปกต จะรน ในเม อม เหตก�รณ ต ดต งส ำ� เรจ (On successful build) เท�นน หรออกเหตก�รณคอรนทกครงไมว�ก�รตดตงจะสำ�เรจหรอไม (Always)
- SearchPath บอกใหแพคเกจทร�บพ�รธทส�ม�รถใชคนห�ไฟล แอสเซมบล หรอ Merge Module
การทดสอบการตดตง และยกเลกการตดตงทเครองนกพฒนา
ก�รทดสอบก�รตดตง หรอก�รยกเลกก�รตดตงทเครองนกพฒน�ส�ม�รถทำ�ไดง�ยโดยก�รคลกขว�ทโปรเจค Web Setup แลวเลอก ตดตง (Install) หรอยกเลกก�รตดตง (Uninstall) ดงภ�พ
IIS 6.0 ทำ�หน�ทใหบรก�รต�งๆ ท�งด�นอนเตอรเนต โดยบรก�รทมจะประกอบดวย บรก�รเวบ (www) บรก�รรบสงอเมล (SMTP) บรก�รข�ว (NNTP) และบรก�รรบสงไฟล (FTP) ห�กเร�ตองก�รเปดใชบรก�รต�งๆ
128
Microsoft Visual Studio 2010
เหล�น บนอนเตอรเน ต เร�ตองน ำ�เซรฟเวอรของเร�ไปเช อมตอก บอนเตอรเนต โดยปกตเพอใหไดรบคว�มเรวอนเตอรเนตทสงๆ เร�ตองตงเซรฟเวอรของเร�ไวกบ Inter Service Provider หรอ ISP ต�มภ�พ
ในแตละ ISP จะมบรษทต�งๆ เข�ม�ตงเซรฟเวอรอยม�กม�ยอยรวมกน เร�ส�ม�รเช�เปนหองรวม หรอหองสวนตวใหกบเซรฟเวอรได (ยงกะบ�นคนเลย ตองเอ�ใจหนอย) ในบ�งครงเร�อ�จจะตงเปนเนตเวรคยอยๆ ทมทง DNS, เวบเซรฟเวอร และฐ�นขอมลดวยกได
การตดตง IIS บน Windows Server
เพอทจะตดตงเร�ตองเข�ไปท Add/Remove Program แลวคลกท Add/Remove Windows Components ดงภ�พ
129
Microsoft Visual Studio 2010
จะพบไดอะลอกซ Windows Component Wizard แลวคลกเลอกท Application Server แลวคลกปม Detail… ทด�นล�งขว�จ�กพบไดอะลอกซ Application Server ด�นล�ง
จ�กนนคลกเลอกท Internet Information Server (IIS) แลวคลกทปม Detail… ทด�นล�งขว�อกครง จะพบไดอะลอกซด�นล�ง
ใหคลกเลอกทบรก�รทตองก�ร ซงอ�จจะเปน FTP, NNTP, SMTP หร อ World Wide Web Service ในหน �จอน ใ ห เล อก Internet Information Services Manager เอ� ไวด วย เพ อ ใช เป นหน �จอ Admin สำ�หรบท World Wide Web Serive ยงส�ม�รถเข�ไปเลอก
130
Microsoft Visual Studio 2010
option ตออกดวยก�รคลกทปม Detail... ด�นล�งขว�จะพบไดอะลอกซด�นล�ง
ห�กตองก�รใหรน ASP ไดใหคลกเลอกท Active Server Pages ดวย
การสรางเวบไซต และการสราง Virtual Directory ใตเวบไซต
เพอใหเวบแอพพลเคช น (หรอเวบไซตใน Visual Studio 2010) ส�ม�รถท ำ�ง�นในโพรเซสของต วมน เอง มค �ของต วแปร Application ตวแปร Session และมค�คอนฟกจ�กไฟล web.config ของมนเอง เร�มวธก�รสร�งอย 2 แบบ คอ
1. สร�ง Web Site ใตโฟลเดอร IIS WebSite ดงภ�พ
131
Microsoft Visual Studio 2010
2. สร�ง Virtual Directory ทอยใต Web Site ตออกท
สำ�หรบก�รสร�งเวบไซต จะมร�ยละเอยดทตองระบอย 3 สวนทตองระบเพอประกอบขนม�เปน Web Site คอ IP, Port และ Host Header ดงภ�พ
แตละ Web Site ทอยในเวบเซรฟเวอรตวหนงจะตองมค� 3 ค�นไมซำ�กน ไมเชนนนตวทซำ�จะ Start ไมขน โดยปกตแลว Web Site ทไมซบซอนม�ก เร�กำ�หนดเพยง IP และ Port (IP Port = Socket) กเพยงพอ โดยปกตแลวสำ�หรบบรก�รทเปดใชบนอนเตอรเนตจะใช Port 80 แตถ�ห�กเปน SSL จะใชพอรต 443 แตในบ�งครงมปญห�ว�มไอพไมพอกบแตละเวบไซต เร�จงแกป ญห�ดวยก�รเพ ม Host Header เข�ไปเพอให 1 IP และส�ม�รถรองรบไดหล�ยเวบไซต ซงค�ทจะกรอกลงในชอง Host Header
132
Microsoft Visual Studio 2010
น จ ะ เ ป น Domain Name เ ช น ASPNETTHAI.COM แ ล ะ WWW.ASPNETTHAI.COM เบองหลงของก�รรนเวบไซต
133