วันเสาร์ที่ 13 ตุลาคม พ.ศ. 2561

การสร้า้ง ASP.NET WEB API #5 เรื่อง ExceptionFilter

สวัสดีครับหลังจากที่ได้แชร์
- Flow การทำงานของ ASP .NET WEB API
(http://cakeknowledgeblogs.blogspot.com/2018/07/aspnet-web-api-2-pipeline.html)

- การสร้าง ASP .NET WEB API
(http://cakeknowledgeblogs.blogspot.com/2018/07/aspnet-web-api.html)

- การสร้าง ASP .NET WEB API #2
(http://cakeknowledgeblogs.blogspot.com/2018/08/aspnet-web-api-2.html)



- การสร้าง ASP .NET WEB API #3 เรื่อง Model Binding

(http://cakeknowledgeblogs.blogspot.com/2018/08/aspnet-web-api-3-model-binding.html)

- การสร้าง ASP .NET WEB API#4 เรืือง Action Filter
(http://cakeknowledgeblogs.blogspot.com/2018/09/aspnet-web-api-4-action-filter.html)





วันนี้เลยจะมาแชร์เรื่องสุดท้ายของการทำ WebAPI นั้นก็คือการทำ Exception Filter


"แล้ว Exception Filter คืออะไร"

Exception Filter คือตัวคอยจัดการ Error ต่างๆ เมื่อมีการ เกิด Error ภายใน Code ขึ้น โดยทุกๆ Error ที่เกิดขึ้นจะเข้ามาใน Exception Filter

ยกตัวอย่างเช่น
เราได้สร้าง WebAPI เรียบร้อยแล้วพร้อมให้ใช้บริการซึ่งเป็น WebAPI สำหรับดึงข้อมูลหนังสือที่เก็บใน Database ให้กับ Client ซึ่งตอนที่คนใช้งาน WebAPI ในช่วงที่คนใช้งานน้อยก็ยังทำงานได้ปกติ แต่หลังจากมีคนเข้าใช้จำนวนมากทำให้บาง Client ไม่สามารถดึงข้อมูลหนังสือได้เนื่องจากมีการเข้าถึง WebAPI และ Database ในปริมาณที่มากจึงทำให้เกิด TimeOut ของ Database เกิดขึ้นและส่งผลให้บาง Client ไม่สามารถได้ข้อมูลหนังสือไปบางช่วงเวลา

ดังนั้นเราจึงต้องมีตัวจัดการ Error ว่า Error อะไรและส่ง Error แจ้งให้ Client ทราบเพื่อให้ Client ไปเรียกใช้ WebAPI ครั้งถัดไปครับ


"แล้วเขียนอย่างไร"
เพื่อให้ผู้อ่านสามารถเข้าใจได้ง่ายขึ้นผมจึงแชร์เป็น วีดีโอดังนี้ครับ


วันเสาร์ที่ 22 กันยายน พ.ศ. 2561

การสร้า้ง ASP.NET WEB API #4 เรื่อง Action Filter

สวัสดีครับหลังจากที่ได้แชร์
- Flow การทำงานของ ASP .NET WEB API
(http://cakeknowledgeblogs.blogspot.com/2018/07/aspnet-web-api-2-pipeline.html)

- การสร้าง ASP .NET WEB API
(http://cakeknowledgeblogs.blogspot.com/2018/07/aspnet-web-api.html)

- การสร้าง ASP .NET WEB API #2
(http://cakeknowledgeblogs.blogspot.com/2018/08/aspnet-web-api-2.html)



- การสร้าง ASP .NET WEB API #3 เรื่อง Model Binding

(http://cakeknowledgeblogs.blogspot.com/2018/08/aspnet-web-api-3-model-binding.html)


วันนี้เลยมาสร้าง ASP.NET WEB API#4 ในหัวข้อเรื่อง Action Filter กันครับ


"แล้ว Action Filter คืออะไร"

Action Filter จะเป็นส่วนทำการตรวจสอบข้อมูลที่รับเข้ามาว่าถูกหรือไม่ เช่น ข้อมูลต้องเป็นตัวเลข, ต้องมีค่าไม่เกิน 10 เป็นต้น ก่อนที่จะส่งข้อมูลให้ Action Method ครับ(สามารถดูรายละเอียดเพิ่มเติมได้จาก หัวข้อของ Flow การทำงานของ ASP .NET WEB API http://cakeknowledgeblogs.blogspot.com/2018/07/aspnet-web-api-2-pipeline.html)


เพื่อให้เข้าใจง่ายผมขอแชร์เป็นวีดีโอ โดย Code ส่วนของการ ActionFilter จะมีดังนี้ครับ

public class ValidateFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
        {

            if (!actionContext.ModelState.IsValid)
            {
                var errors = (from s in actionContext.ModelState
                              where s.Value.Errors.Count > 0
                              select new KeyValuePair<string, string>(s.Key, s.Value.Errors.First().ErrorMessage)).ToArray();

                actionContext.Response = actionContext.Request.CreateResponse(System.Net.HttpStatusCode.BadRequest, errors);
            }
         
        }
}


โดยจะเป็นการตรวจสอบว่าข้อมูลที่รับเข้ามาค่าที่ได้ถูกต้องหรือไม่ โดยสามารถเขียนได้ดังวีดีโอด้านล่างครับ













เอกสารอ้างอิง

https://blog.duc.as/2012/02/27/validating-your-model-with-web-api/

วันเสาร์ที่ 25 สิงหาคม พ.ศ. 2561

การสร้า้ง ASP.NET WEB API #3 เรื่อง Model Binding

สวัสดีครับหลังจากที่ได้แชร์
- Flow การทำงานของ ASP .NET WEB API
(http://cakeknowledgeblogs.blogspot.com/2018/07/aspnet-web-api-2-pipeline.html)

- การสร้าง ASP .NET WEB API
(http://cakeknowledgeblogs.blogspot.com/2018/07/aspnet-web-api.html)

- การสร้าง ASP .NET WEB API #2
(http://cakeknowledgeblogs.blogspot.com/2018/08/aspnet-web-api-2.html)

วันเลยมาต่อการสร้าง ASP .NET WEB API#3 กันครับซึ่งวันนี้ที่ผมอยากแชร์คือเรื่องเกี่ยวกับ Model Binding

"แล้ว Model Binding คืออะไร"
Model Binding คือ การแปลงค่าข้อมูลที่เป็น String ที่รับมาให้อยู่ในตัวแปลที่อยู่ใน Parameter Method ตาม Type ต่างๆที่เรากำหนด ซึ่งใน ASP.NET WEB API ได้มีเครื่องมือจัดการแปลงข้อมูลให้เรียบร้อยแล้ว


รูปภาพ Model Binding
จากรูปจะเห็นว่าถ้าเราส่งมาข้อมูลผ่านทาง HTTPGET จะเป็นข้อมูลที่อยู่ใน Query String แล้วตัว ASP.NET WEB API จะทำการแปลงประเภทข้อมูลเป็น string เก็บใส่ตัวแปลที่ชื่อว่า nameและ แปลงประเภทข้อมูลเป็น int เก็บใส่ตัวแปรที่ชื่อว่า page ให้เอง ซึ่งการแปลงข้อมูลจากการเรียกไปอยู่ Paramter ใน Method ที่เรากำหนดเราเรียกว่า Model Binding ครับ

เพื่อให้เข้าใจได้ง่ายจึงได้ทำ Video วิธีการเขียน Code ในส่วนของ Model Binding ดังนี้ครับ



วันศุกร์ที่ 17 สิงหาคม พ.ศ. 2561

การสร้าง ASP.NET WEB API #2

    สวัสดีครับหลังจากที่ได้แชร์เกี่ยวกับ Flow การทำงาน (http://cakeknowledgeblogs.blogspot.com/2018/07/aspnet-web-api-2-pipeline.html) และ การสร้าง ASP.NET WEB API (http://cakeknowledgeblogs.blogspot.com/2018/07/aspnet-web-api.html) แต่ยังไม่ทราบถึงวิธีการเขียนไปใชจริง วันนี้เลยมาแชร์การเขียนไปใช้จริงเบื้องต้นครับ ซึ่งวันนี้ผมจะแบ่งวีดีโอ 3 ส่วนดังนี้ครับ

   1.    การสร้าง Web API และการ Config เบื้องต้น


   2.    การเขียน Code ส่วน Message Handler



   3.    การเขียนส่วน Attribute Routing สำหรับการเปลี่ยนชื่อ URI Service


วันเสาร์ที่ 4 สิงหาคม พ.ศ. 2561

RestAPI

          สิ่งท่ี่ควรมีความรู้ก่อนอ่านบืความนี้คือ

  1.      ความหมายของ Web API 
  2.      ความหมายของ Web Service
  3.      การเรียก Web Service ผ่าน HTTP

Rest API คืออะไร
บางคนอาจยังไม่เคยได้ยินหรือบางคนเคยได้ยินหรือไม่เคยรู้จริงๆว่า Rest API เนี่ยคืออะไรกันแน่ ซึ่งถ้าเป็นความหมายแบบกระชับนี่ก็คือ เป็น API ที่จัดรูปแบบการเรียกแบบ HTTP (GET,POST,PUT,DELETE) ให้เข้าเป็นมาตรฐานมากขึ้น
 จากเมื่อก่อนในการเขียน Web API แต่ละครั้งผ่าน HTTP จะไม่มีการกำหนดรูปแบบการเรียกที่ตายตัวจึงทำให้เราไม่สามารถดู แค่ชื่อ Web Service แล้วสามารถเดาได้เลยว่าคือเว็บ Service สำหรับทำอะไรกันแน่ Rest API จึงได้ตั้งข้อกำหนดพื้นฐานดังนี้
          HTTP
          ถ้าเป็น แบบ GET คือ การขอข้อมูลทั้งหมด
          ถ้าเป็น แบบ POST คือ การ สร้างข้อมูลขึ้นมาใหม่
          ถ้าเป็น แบบ PUT คือ การแก้ไขข้อมูล
          ถ้าเป็นแบบ DELETE คือ การลบข้อมูล

รูปแบบของ URL
  •  URL จะเป็น Noun ไม่ควรเป็น Verb และควรเป็น Noun แบบพหูพจน์ถ้าเป็นไปได้ ตัวอย่างเช่น
                /books     ให้หมายถึง ดึงข้อมูลหนังสือทั้งหมดถ้าเป็นแบบ GET
                /books     ให้หมายถึง สร้างหนังสือใหม่ทั้งหมดถ้าเป็นแบบ POST
                /books     ให้หมายถึง แก้ไขข้อมูลหนังสือทั้งหมดถ้าเป็นแบบ PUT
                /books     ให้หมายถึง ลบข้อมูลหนังสือทั้งหมดถ้าเป็นแบบ DELETE   
  •  ใช้ Sub name ในการเชิ่อมความสัมพันธืของข้อมูล ตัวอย่างเช่น
                /books/2   ให้หมายถึง ดึงข้อมูลหนังสือที่เป็น ID = 2 ถ้าเป็น แบบ GET
                /books/2   ให้หมายถึง สร้างหนังสือใหม่ที่เป็น ID = 2 ถ้าเป็น แบบ POST
                /books/2   ให้หมายถึง แก้ไขข้อมูลหนังสือที่เป็น ID = 2 ถ้าเป็น แบบ PUT
                /books/2   ให้หมายถึง ลบข้อมูลหนังสือที่เป็น ID = 2 ถ้าเป็น แบบ DELETE

  •  URL ควรมีระบุ version api เพื่อรองรับการเปลี่ยนแปลง version api ตัวอย่างเช่น
               /api/v1/books หมายถึง เราใช้ API version1 ในการดึงข้อมูลหนังสือทั้งหมดถ้าเป็นแบบ GET
               /api/v1/books หมายถึง เราใช้ API version1 ในการสร้างหนังสือใหม่ที่เป็น ID = 2 ถ้าเป็นแบบ  POST 
               /api/v1/books หมายถึง เราใช้ API version1 ในการแก้ไขข้อมูลหนังสือทั้งหมดถ้าเป็นแบบ PUT
               /api/v1/books หมายถึง เราใช้ API version1 ในการลบข้อมูลหนังสือทั้งหมดถ้าเป็นแบบ DELETE  
  •   หากการดึงข้อมูลที่ซับซ้อนให้ทำการ Query String ด้วย GET เช่น

              /api/v1/books?field=name,price,author,categoies&sort=asc ให้หมายถึง ใช้ API version ที่ 1 มาดึงข้อมูลหนังสือทั้งหมดโดยต้องการเฉพาะ Field name,price,author, categories มาแสดงพร้อมทั้งให้เรียงตามชื่อหนังสือจากน้อยไปมาก

HTTP Response Code
  • ควรมีการ Return HTTP Status Code กลับทุกครั้ง 
  • หากมี ERROR ควร Return Status Code ให้ถูกต้องตามสถานะ

แนะนำควรใช้ Status Code 10 อันดับแรกดังนี้

  •  200 OK
  •  201 CREATED  -  [POST,PUT]
  •  204 NO CONTENT  -  [DELETE,PUT]
  •  400 BAD REQUEST
  •  401 UNAUTHORIZED
  •  403 FORBIDDEN
  •  404 NO FOUND
  •  405 METHOD NOT ALLOWED
  •  409 CONFLICT
  •  500 INTERNAL SERVER ERROR

หวังว่าโพสน์นี้จะช่วยเพิ่มความเข้าใจและมีประโยชน์ครับ ขอบคุณครับ
Refference
https://www.restapitutorial.com/lessons/restquicktips.html
https://www.algorithmtut.com/เลิกเขียน-restful-api-แบบแย่ๆ/


วันเสาร์ที่ 14 กรกฎาคม พ.ศ. 2561

ASP.NET WEB API 2 Pipeline

      สวัสดีครับวันจะมะแชร์ ทฤษฎีหลักการทำงานของ ASP.NET Web API กันครับ ซึ่งในโพสน์นี้จะไม่มีการเขียน Code แต่จะเน้นทฤษฎีเพื่อให้เข้าใจหลักการคร่าวๆ ก่อนไปเขียน Code ASP.NET Web API ได้อย่างถูกต้องครับ งั้นมาเริ่มกันเลยครับ

      แล้ว ASP.NET Web API คืออะไร?
      ASP.NET Web API คือ Framework ที่ช่วยให้เราสร้าง HTTP Service ง่ายขึ้น จนสามารถเข้าถึงผู้ใช้งานได้มากขึ้นโดยรองรับหลากหลาย Browser และ หลากหลาย Mobile ได้มากขึ้น เนื่องจากรองรับแบบ RESTful (RESTful คือ รูปแบบการเรียก HTTP Service อย่างหนึ่งที่สามารถใช้ได้กับหลากหลาย Platform) บน .NET Framework

      หลักการทำงานของ ASP.NET Web API
      ในการทำงาน ของ Web API 2 นั้นจะมีการทำงานตามหัวข้อใหญ่ๆดังนี้
      - Host                           คือ สถานที่เว็บ Service ของเราได้ทำการไว้เช่น IIS                           
      - Message Handlers     คือ เป็นตัวตรวจสอบข้อมูลชั้นแรกก่อนเข้าไปที่ Controller
      - Controller                  คือ ตัว Controller ที่สามารถตรวจสอบข้อมูลที่รับมาว่าถูก Format หรือไม่เช่น ค่า API Key ถูกต้องและเป็นตัวเก็บ Action Method
      - Model Biding            คือ การแปลงข้อมูลที่รับมาจากผู้ใช้ให้เป็นตัวแปร Object แล้วส่งให้ Action Filers
      - Action Filter             คือ  ส่วนทำการตรวจสอบข้อมูลที่รับเข้ามาอีกรอบหนึ่งว่าถูกหรือไม่ เช่น ข้อมูลต้องเป็นตัวเลข, ต้องมีค่าไม่เกิน 10 เป็นต้น ก่อนที่จะส่งข้อมูลให้ Action Method
      - Action Method          คือ ส่วนประมวลผลข้อมูล
      - Result Conversion     คือ การแปลงข้อมูลให้อยู่ในรูปแบบที่ตกลงกันไว้เช่น JSON, XML, BSON


รูปภาพแสดงหลักการทำงานของ ASP.NET Web API คร่าวๆ


      จากรูปจะเห็นการทำงานเป็นลำดับคือ 
- เมื่อ Host มีการ Request เข้ามา Message Handler จะทำการตรวจสอบเป็นครั้งแรกก่อนว่าข้อมูลที่เข้ามานั้นตรงตาม Format ที่กำหนดหรือไม่ เช่น Header มี Authentication หรือไม่, รูปแบบการ Authentication ถูกต้องหรือเปล่า เป็นต้น 
- ถ้าตรวจสอบถูกต้องจึงจะเข้าไปที่ Controller (ถ้าไม่ถูกให้ response Status Code Error กลับไปให้ผู้ใช้งาน) หลังจากนั้น Controller ก็จะส่งข้อมูลที่ได้ให้ Modelฺ Binding เพื่อทำการแปลงข้อมูลที่รับจากผู้ใช้งานให้เป็นตัวแปรที่สามารถใช้งานได้
-แล้วทำการให้ Action Filter เพื่อทำการตรวจสอบค่าของข้อมูลว่าเป็นไปตามที่กำหนดหรือไม่
-เมื่อตรวจสอบผ่านจึงส่งไปให้ Action Method ทำการประมวล
-แล้วส่งข้อมูลที่ประมวลผลเสร็จแล้วไปให้ Action Filter อีกที 
-แล้วค่อย Result Conversion เพื่อทำการแปลงข้อมูลที่คำนวณได้เป็นรูปแบบที่ผู้ใช้ต้องการเช่น JSON, XML, BSON 


จากหลักการทำงานตามลำดับดังกล่าวมา แต่ละส่วนก็จะมีการทำงานย่อยลงไปซึ่งผมจะแตกการทำงานย่อยแบ่งเป็น 2 ส่วนใหญ่คือ
1. ส่วน Message Handler (บางที่อาจจะเรียกว่า Delegating Handler)
2. ส่วน Controller ไปถึง Method Action

1. ส่วน Message Handler (บางที่อาจจะเรียกว่า Delegating Handler)
   เป็นส่วนของการตรวจสอบข้อมูลชั้นแรกก่อนส่งไปยัง Controller ซึ่งมีการทำงานย่อยลงไปดังรูป
ด้านล่าง
- HTTP Request Message คือ ข้อมูลรับจาก Host
- Message Handler คือ ตัวตรวจสอบข้อมูลที่ใช้ในการขอว่า รูปแบบข้อมูลถูกต้องหรือไม่
- Routing Dispatcher คือ ตัวจัดการรูปแบบของเส้นทางที่จะไปเรียก Web Service
- Controller Dispatcher คือ ตัวจัดการเส้นทางว่าควรใช้ Controller ตัวใหน
- HTTP Response Message คือ ข้อมูลที่จะส่งผ่าน HTTP ให้ Host



รูปภาพการทำงานภายในของ Message Handler


2. ส่วน Controller ไปถึง Method Action
    เป็นส่วนของการแปลงและตรวจสอบข้อมูลภายในเพื่อนำเอาข้อมูลที่ได้ไปประมวลผลดังรูปด้านล่าง
    - Controller คือ ตัวเก็บ Action Method
    - Authentication Filter คือ การตรวจสอบว่าใครเป็นคนขอข้อมูล
    - Authorization  Filter คือ การตรวจสอบสิทธิ์การการเรียกใช้งาน
    - Model Binding คือ การแปลงข้อมูลที่รับมาจากผู้ใช้ให้เป็นตัวแปร Object แล้วส่งให้ Action Filers
    - Action Filter และ Action Invoke คือ ส่วนทำการตรวจสอบข้อมูลที่รับเข้ามาอีกรอบหนึ่งว่าถูกหรือไม่ เช่น ข้อมูลต้องเป็นตัวเลข, ต้องมีค่าไม่เกิน 10 เป็นต้น 
    - Action Method คือ ส่วนประมวลผลข้อมูล
    - Exception Filter คือ ตัวตรวจสอบ Error ว่าถ้าเกิด Error ขึ้นเแล้วเป็น Error ประเภทใหน


รูปภาบการทำงานภายในส่วนช่วง Controller ถึง Action Method


 

ถ้าต้องการทราบการทำงานอย่างละเอียดสามารถเข้าไปดูได้ที่รูปด้านล่างหรือลิงค์ดังนี้ครับ https://channel9.msdn.com/Events/TechEd/Europe/2014/DEV-B410





Referrence
- https://www.slideshare.net/rjovic/aspnet-webapi-going-deep-into-the-pipeline
https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf
https://channel9.msdn.com/Events/TechEd/Europe/2014/DEV-B410

วันศุกร์ที่ 13 กรกฎาคม พ.ศ. 2561

การสร้าง ASP.NET WEB API

     สวัสดีครับวันนี้จะมาแชร์เรื่องการสร้าง WEB API ผ่านทาง Visual Studio 2017 กันครับ ซึ่งจะเป็นการสร้าง WEB API แบบ MVC ซึ่งมีวิธีการสร้าง Project มีดังนี้ครับ

1.เปิดโปรแกรม Visual Studio 2017


2. คลิก File Menu -> New -> Project



3. Panel ด้านซ้ายให้กดเป็น Web -> Panel ด้านขวากด ASP .NET WEB APPLICATION แล้วตั้งชื่อ Project , Path ที่จะเก็บ, ชื่อ Solution ที่จะเก็บ แล้วกด OK
        a = เลือกว่าต้องการสร้างเป็น Web
        b = เลือก ASP .NET WEB APPLICATION
        c = ตั้งชื่อ Project Name
        d = ตั้ง Path ที่ต้องการเก็บโปรแกรม
        e = ตังชื่อ Solution ของ Project
        f = กำหนด Version ของ .NetFramWork



4. เลือก Web API , เลือก UnitTest (สำหรับการสร้าง Unitest ในการ test โปรแกรม) แล้วกดปุ่ม OK
                a. เลือกเป็นประเภท Web API
                b. เลือกเพื่อให้ทำการสร้างรูปแบบ MVC
                c. เลือกเพื่อให้รองรับการสร้าง Web API
                d. เลือกเพื่อให้สร้าง Unit Test สำหรับการสร้าง Project ไว้ Test โปรแกรม
                e. ตั้งชื่อโปรเจ็คสำหรับ Unit Test




5. เมื่อทำการสร้างเสร็จจะได้ Project ดังรูป



ทดสอบรัน โดยไปที่ Menu ชื่อว่า Debug -> Start Debugging หรือกดปุ่มตรงคีร์บอร์ด F5 จะได้ผลดังรูปครับ


วันอังคารที่ 10 กรกฎาคม พ.ศ. 2561

SQL Server Agent


      สวัสดีครับทุกท่าน
      เนื่องจากที่ผ่านมาผมได้ใช้ SQL Server Agent และเห็นว่ามีประโยชน์ วันนี้ผมเลยจะมาแชร์เรื่องการใช้ งาน SQL Server Agent ใน โปรแกรม SQL Server กันครับ

SQL Server Agent คืออะไร?

      SQL Server Agent เป็นการกำหนดงานอัตโนมัติให้กับ SQL Server เพื่อทำงานของระบบที่ทำงานเป็นประจำหรือตั้งไว้ล่วงหน้าครับ
      ผมขอยกตัวอย่างเพื่อให้เข้าใจยิ่งขึ้นเช่น
      ผมมี Database เยอะมากๆๆ และผมจำเป็นที่จะต้อง Back up Database ทุกเดือนซึ่งเมื่อก่อนเนี่ยเมื่อถึงต้นเดือนผมก็จะเข้าไป SQL Server เพื่อ Back Up Database หลายๆ Database จึงทำให้เสียเวลาครับ
     จะดีกว่าใหมที่มีเครื่องมือที่่สามารถ Back up Database แทนเราอัตโนมัติทุกเดือน ซึ่ง SQL Server Agent สามารถช่วยได้ครับ      

รูปภาพแสดง SQL Server Agent

การเปิดใช้งาน

    โดย Default SQL Server Agent จะ Stop การทำงานของ SQL Server Agent เราจำเป็นที่จะต้อง Start ตัว SQL Server Agent ก่อนจะใช้งาน โดยคลิกขวาไปที่ SQL Server Agent -> Start ดังรูปครับ

รูปภาพแสดงวิธีการ Start SQL Server Agent

การใช้งาน SQL Server Agent

     ใน SQL Server Agent จะแบ่งหัวข้อออกออกเป็นดังนี้
  • Jobs                  คือ เป็นตัวกำหนดช่วงเวลาที่ต้องการให้ทำงาน
  • Alerts               คือ จะแจ้งเหตุการณ์เมื่อมี เหตุการณ์ หรือ Error ตรงตามที่กำหนดไว้
  • Proxies             คือ การสั่งงานผ่าน Proxy
  • Error  Logs       คือ ประวัติการทำงานของ Jobs ว่าทำงานได้ปกติหรือไม่

รูปภาพแสดง SQL Server Agent เมื่อทำการ Start เรียบร้อยแล้ว




สมมุติตัวอย่างผมต้องการให้ SQL Server Agent ทำการ BackUp ข้อมูลทุกวันที่ 1 เวลาเที่ยงคืนของทุกเดือน (ที่ผมเลือกเที่ยงคืนเพราะว่าเที่ยงคืนไม่ค่อยมีคนใช้งานจึงไม่ส่งกระทบกับระบบมากนัก) ผมก็จำเป็นที่จะต้องตั้งค่า SQL Server Agent ดังนั้ครับ


      1.คลิกขวาที่ Jobs->New Jobs ดังรูปด้านล่าง

รูปภาพแสดงการ New Job
      
      2. ทำการตั้งชื่ออะไรก็ได้ของงาน และ ใส่คำอธิบายลงไป ตามรูปด้านล่าง
                  a. คือ ให้ใส่ชื่อของงาน
                  b. คือ ให้ใส่คำอธิบายของงาน
รูปภาพแสดงการตั้งชื่อและคำอธิบายของ Job



      3. กด Step ตรง Panel Select a page และ ทำการกดปุ่ม New เพื่อสร้าง Step ขึ้นมา (Step คือคำสั่งที่ต้องการกระทำเมื่องานถึงเวลาที่กำหนด) ตามรูปด้านล่าง
            a. คือ การคลิกปุ่ม Step
            b. คือ การคลิกปุ่ม New
รูปภาพเข้าหน้า Step

      4. หน้าต่าง New Job Step จะแสดงขึ้นมา หลังจากนั้น ให้ใส่ชื่อ Step -> เลือก Type เป็น T-SQL -> เลือก Database ที่จะรันร่วมกับ T-SQL -> ใส่คำส่อง T-SQL -> กดปุ่ม OK
            a. คือ สำหรับใส่ชื่อ Step ซึ่งเป็นชื่ออะไรก็ได้ (ในตัวอย่างนี้ผมใส่ว่า "BackUp Database Test")
            b. คือ เลือกว่าเราต้องการใช้คำสั้งแบบใหนในการสั่งงาน (ในตัวอย่างนี้ผมเลือกเป็น "Transact-SQL script (T-SQL)")
            c. คือการเลือกว่าจะให้ คำสั่ง T-SQL มีผลต่อถังDatabase ถังใหน (ในตัวอย่างผมเลือกถังชื่อว่า "Test" เพราะผมต้องการ Back Up Database ถังที่ชื่อว่า "Test" ครับ)
            d. คือช่องใส่คำสั่ง T-SQL (ในตัวอย่างนี้ผมใส่คำสั่ง Back Up Database ถังที่ชื่อว่า Test ไปไว้ที่ Drive: C:\TEST\SQL\ แล้วตั้งชื่อไฟล์ที่ Back Up ว่า test2_backup_[year]-[Month]-[day].bak ดังนี้ครับ

Declare @DatabaseName varchar(50)
Declare @PathTo varchar(300)
Declare @Fullpath varchar(300)
set @DatabaseName = 'Test'
set @PathTo = 'C:\Test\SQL\'
set @Fullpath = @PathTo + @DatabaseName + '_backup_'
+ convert(varchar,year(getDate())) + '-'
+ convert(varchar,month(getDate())) + '-'
+ convert(varchar,day(getDate())) + '.bak'

BACKUP DATABASE @DatabaseName TO
DISK=@Fullpath with NOFORMAT, INIT

)

รูปภาพแสดงการตั้งค่า Step




      5. กด Schedules ตรง Panel Select a page และ ทำการกดปุ่ม New เพื่อสร้าง Schedules ขึ้นมา (Schedules คือหน้าไว้กำหนดช่วงเวลาที่ต้องทำงาน) ตามรูปด้านล่าง
            a. คือ การคลิกปุ่ม Schedules
            b. คือ การคลิกปุ่ม New

รูปภาพเข้าหน้า Schedule

      6. หน้าต่าง New Job Schedule จะแสดงขึ้นมา หลังจากนั้น ให้ตั้งชื่อ Schedule ตั้งเวลาที่ต้องการทำงาน เสร็จแล้วกด ปุ่ม OK ดังรูปด้านล่าง
             a. คือการตั้งชื่อ Schedule เป็นอะไรก็ได้ (ในตัวอย่างนี้ผมตั้งชื่อว่า NightTime)
             b. คือตั้งช่วงเวลาที่ต้องให้ทำงาน (ในตัวอย่างนี้ผมตั้งเป็น Month)
             c. คือการตั้งเวลาว่าให้ทำงานเวลากี่โมง (ในตัวอย่างนี้ผมตั้งเป็นเที่ยงคืนคือ 00:00:00)
             d. คือการตั้งให้ทำงานตลอดไปโดยไม่มีที่สิ่นสุด

รูปภาพการตั้งค่า Schedule


      7. ให้กดปุ่ม OK อีกครั้ง เป็นการเสร็จสิ้นการตั้งค่า่ครับตามรูปด้านล่างครับ



8. ทดสอบการทำงานโดยการ คลิกขวาที่ตามชื่อ JOB ที่เราสร้าง -> Start Job As Step...

รูปภาพแสดงการทดสอบรัน Job ที่เราสร้าง



จะขึ้นหน้าต่างแสดงสถานะการทำงานครับ หากไม่มี ERROR แสดงว่า Job ที่เราสร้างสามารถทำงานได้สมบูรณ์

รูปภาพแสดงผลของการทดสอบรัน Job



หลังจากนี้ SQL Server Agent ก็จะทำงาน Back Up Database ของเรา Auto แล้วครับโดยที่เราไม่ต้องเข้าไป Back Up เองอีกแล้วครับ 



ผมหวังว่าโพสน์นี้จะมีประโยชน์กับผู้อ่านครับขอบคุณครับ



วันเสาร์ที่ 7 กรกฎาคม พ.ศ. 2561

Task Scheduler on Windows


สวัสดีครับ วันจะมาแขร์เรื่อง Task Scheduler บน Windows กันครับ

แล้ว Task Scheduler คืออะไร

Task Scheduler คือ Tool ที่อยู่บน OS Windows ที่จะคอยเป็นตัวกระทำต่างๆ เมื่อถึงช่วงเวลาที่กำหนด เช่น ส่งเมล์ เปิดโปรแกรม หรือให้แจ้งเตือนบางอย่าง

ยกตัวอย่างการนำไปใช้เช่น


          สมมุติเรามีโปรแกรมในการตรวจสอบ OS Window ทุกเช้าเวลา 8:00 AM ว่าระบบทำงานปกติหรือไม่ แต่โปรแกรมที่เรามีเนี่ยเวลาโปรแกรมทำงานมันจะทำงานครั้งเดียวแล้วปิดตัวเองอัตโนมัติ ดังนั้นเราจำเป็นที่จะต้องกดเปิดตัวโปรแกรมนี้ทุกเช้าเวลา 8:00 AM ตลอดเวลา

รูปภาพตัวอย่าง โปรแกรมที่ต้องการให้ Task Scheduler เปิดใช้งาน

       แต่จะดีกว่าใหมที่เราไม่ต้องเปิดโปรแกรมนี้เอง เราเลยใช้ Tool ที่ชื่อว่า Task Scheduler มาช่วยในการ Auto เปิดโปรแกรมทุกเช้าแทน

แล้วเราสามารเข้าไปเปิดได้ที่ใหน

        วิธีการเข้าไปใช้งาน Task Scheduler สามารถเข้าไปได้ที่ Control Panel ->Administrative Tools -> Task Scheduler
รูปภาพ แสดงวิธีการเปิด Task Scheduler

วิธีการใช้งาน Task Scheduler

ตัวอย่างการใช้ Task Scheduler ผมจะอธิบายไว้ใน Video ครับเพื่อให้เห็นภาพและเข้าใจได้ง่ายครับ โดยตัวอย่างนี้จะเป็นการตั้งค่า Task Scheduler ให้เปิดโปรแกรมที่ชื่อว่า Check Windows ทุก 8:00 AM ครับ


วันเสาร์ที่ 30 มิถุนายน พ.ศ. 2561

Unit Test


สวัสดีครับวันนี้เนื่องจากได้ทดลองใช้ Unit Test ของ .Net มาจึงอยากมาแชร์วิธีการใช้งาน แต่ก่อนจะแชร์ ผมขออธิบายก่อนว่า Unit Test คืออะไร

Unit Test คืออะไร?
Unit Test คือ การ test ส่วนของ Code เพื่อทดสอบว่าฟังค์ชัน หรือ Method ที่เราเขียนทำงานถูกต้องตามที่เราต้องการเพื่อช่วยให้สามารถลดบัคสำคัญๆ และลดเวลาในการ Manual test นั่นเอง ยกตัวอย่างเช่น

ถ้าเราเขียนโปรแกรมคำรวณเกรดโดยต้องการส่งคะแนนเป็นตัวเลขแล้วต้องการรู้ว่าเราได้เกรดอะไรเช่นเกรด A, เกรดฺB, เกรดC, เกรดD, เกรดF ดังนี้ครับ


static public string cal(double score)
        {
              if(score > 80){
                    return "A";
                }
                else if(score > 70){
                    return "B";
                }
                else if(score > 60){
                    return "C";
                }
                else if(score > 40){
                    return "D";
                }
                return "F";
        }

ซึ่่งผมหวังถ้าใส่ค่าคะแนน 10 ตัว method ที่ชื่อว่า Cal จะต้อง return เป็นเกรด "F"

 งั้นมาลองเขียน Code เลยดีกว่าครับ เพื่อความเข้าใจผมจะลงเป็น วีดีโอเลยละกันครับ เพื่อบอกการใช้งานไปด้วยเลย








วันอาทิตย์ที่ 17 มิถุนายน พ.ศ. 2561

SQL BULKCOPY


สวัสดีครับวันนี้จะมาแชร์เรื่อง SQL BULKCOPY
แล้ว SQL BULKCOPY คืออะไร?
SQL BULKCOPY คือเป็นส่วนของ SQL Server ที่ช่วยในการ Copy ข้อมูลขนาดใหญ่ลงตารางได้รวดเร็วมากขึ้น ซึ่งถ้าเป็นเมื่อก่อนในการจะ Copy ข้อมูลขนาดใหญ่ลงตารางแต่ละครั้งนั้นเราจะเขียน Code ให้ทำการอ่านข้อมูลแล้วค่อย Insert ทีละ ROW เองจนกว่าจะครบทุก ROW แต่การ Insert ทีละ ROW เองด้วยข้อมูลขนาดใหญ่นั้นก็ส่งผลความล่าช้าในการ Insert เช่นกัน ทาง SQL Server จึงมีตัวช่วยในการ Copy ข้อมูลขนาดใหญ่นี้ที่ชื่อว่า BulkCopy มาใช้งาน


ซึ่งวิธีใช้งานสามารถดูได้ตามตัวอย่างนี้ครับ
จากตัวอย่างด้านล่างเป็นตัวอย่างการนำข้อมูลใน class DataTable มา Copy ใส่ในตารางของ SQL Server

using System.Data.SqlClient;
public bool insertBulkCopy(string tableName, DataTable dataTable)
   {
                using (SqlBulkCopy bc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.TableLock))
    {
                    bool isSuccess = false;
                    try
      {
           bc.DestinationTableName = tableName;
           bc.BatchSize = dataTable.Rows.Count;
           bc.BulkCopyTimeout = this.timeout_command;
                    bc.WriteToServer(dataTable);
           isSuccess = true;
      }
                    catch (SqlException ex)
      {
                       
      }
                    finally
              {
                       
      }
                    return isSuccess;
                   
    }
   }

หรือสามารถศึกษาเพิ่มเดิมได้ที่ https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/bulk-copy-operations-in-sql-server

ผมหวังว่าแชร์นี้จะมีประโยชน์นะครับ ขอบคุณครับ