ODBC คืออะไร
ODBC (Open Database Connectivity) เป็นโปรโตคอลที่ให้ Windows Application ส่วน Client สามารถติดต่อกับฐานข้อมูลได้ โดยต้องอาศัย OBDC Driver ของฐานข้อมูลแต่ละยี่ห่อ เช่น หากต้องการเชื่อมต่อกับ Microsoft SQL Server ก็ต้องติดตั้ง ODBC Driver สำหรับ SQL Server หรือถ้าจะเชื่อมต่อกับ Apache Impala ก็ต้องติดตั้ง ODBC Driver สำหรับ Impala
โดยในบทความนี้จะพูดถึง
- การตั้งค่า SQL Server ให้สามารถใช้งาน ODBC เชื่อมต่อ
- การติดตั้ง ODBC Driver สำหรับ Window
- การพัฒนา .NET Application ให้ Query ผ่าน Dapper โดยใช้
- การ Integrate Dapper ในการ Parameterize
ตัวอย่างการประยุทธ์ใช้ ODBC ในผลิตภัทธ์ของ Windows เช่น การใช้ Microsoft Excel ในการเชื่อมต่อไปฐานข้อมูลต่าง ๆ หรือใช้กับเครื่องมืออย่างเช่นในสายงาน Data analytics อย่าง Tableau ก็สามารถใช้ ODBC ในการดึงข้อมูลจากฐานข้อมูลเพื่อนำมาวิเคราะห์ข้อมูล
การติดตั้ง Docker Desktop
โดยในตัวอย่างนี้เราจะใช้เป็น Docker Desktop ซึ่งง่ายต่อการใช้งานมากกว่าแบบ Command line แต่เอาเข้าจริง ๆ ในท้ายที่สุดเราก็ยังจำเป็นที่ต้องเขียน Command line อยู่ดี แค่ Docker Desktop มาช่วยทำให้เห็นภาพในการทำงานได้ง่ายขึ้น มาเริ่มกันดีกว่า
เราสามารถติดตั้ง Docker Desktop ได้จากเว็บ Docker เลย (ลิงก์) หลังจากนั้นก็ทำการติดตั้ง
สามารถทดสอบ Docker ได้ด้วยคำสั่ง docker --version
ซึ่งเราควรจะเห็น version ของ Docker ที่เราทำการติดตั้ง
การติดตั้ง MS SQL Server ใน Docker
สมมุติว่าการติดตั้ง Docker ไม่มีปัญหา (สำหรับคนมีปัญหาก็สู้ ๆ นะ) เราจะมาเริ่มติดตั้ง SQL Server กันเลย โดย SQL Server เป็น Database จากทาง Microsoft ที่ค่อนข้างได้รับความนิยมและที่สำคัญเลยคือสามารถรองรับการเชื่อมต่อด้วย ODBC ได้
เริ่มติดตั้ง SQL Server ลง Docker
1) ทำการ pull image ของ SQL server ลงเครื่องเราก่อน โดนใช้คำสั่งนี้ใน terminal
docker pull mcr.microsoft.com/mssql/server:2022-latest
ซึ่งทางผู้อ่านก็สามารถเลือกได้เองว่าจะใช้ image ใดก็ได้จาก docker hub (แต่ในบทความต่อจากนี้่จะใช้เป็น distro ubuntu)
2) เมื่อเรา pull image ลงมาแล้ว เราควรจะเห็น docker image ใน Docker Desktop
เราก็จะเริ่ม run image เพื่อเปิดการใช้งานด้วยคำสั่งต่อไปนี้
docker run -d --name sql_server_demo -e 'ACCEPT_EULA=Y' -e 'SA_PASSWROD=veryStrongPassword@123' -p 1433:1433 mcr.microsoft.com/mssql/server
อธิบายคำสั่ง
- docker run เป็นการสั่งให้ docker run image
- -d คือให้ run container นี้เป็นแบบ detached แบบ backgroud
- — name คือการตั้งชื่อให้กับ container ที่เรากำลังจะ run ซึ่งในครั้งนี้จะใช้ชื่อเป็น sql_server_demo
- -e คือการกำหนด enviroment variable โดยจะตามด้วยชื่อและค่าที่เรากำหนด (ในรูปแบบ ‘<VARIABLE>=<VALUE>’) โดย envrioment ที่เราจำเป็นต้องกำหนดมีดังต่อไปนี้
- ACCEPT_EULA เพื่อเป็นการยอมรับ End-User Licensing Agreement ในการใช้งาน
- SA_PASSWORD เพื่อกำหนด password System Administrator โดยต้องจดจำไว้เพื่อใช้ access container (โดยต้องตั้งให้มีความปลอดภัยโดยต้องมีตัวอักขระเล็กใหญ่ ตัวเลข และเครื่องหมายพิเศษ) - -p เป็น Publish Port ของ container
- และสุดท้ายคือชื่อ image ที่เรากำลังจะ run ซึ่งในที่นี้คือ mcr.microsoft.com/mssql/server
3) เราควรจะเห็น container ที่กำลัง run ชื่อ sql_server_demo โดยสามารถเช็กได้จาก Docker Desktop หรือ ด้วยคำสั่ง docker container ls
ติดตั้ง ODBC Driver สำหรับ SQL Server
เพื่อให้ Application สามารถติดต่อไปที่ SQL Server ด้วย ODBC ได้นั้น ก็จำเป็นจะต้องติดตั้ง ODBC Driver ซึ่งเป็นเสมือนตัวกลางระหว่าง Application กับ Database
โดยสามารถติดตั้งได้จาก microsoft ODBC สำหรับในบทความนี้จะเน้นไปใน Windows
หลังจากกด Next แบบไม่ลืมหูลืมตาแล้ว ให้เราเข้าไป Search หา ODBC Data Sources
ตั้งค่า DSN และทดสอบการเชื่อมต่อไปที่ SQL Server
ต่อไปเราจะเชื่อมต่อ ODBC Driver กับ SQL Server โดยเริ่มจากการตั้งค่า DSN (Data source name) กันก่อนเลย
- กดไปที่ Tab System DSN
2.
- เราจะตั้งชื่อ DSN นี่ว่า SQL_demo
- สำหรับ Description อาจจะใส่หรือไม่ก็ได้
- Server : localhost:1433 ซึ่งก็คือ Port ของ Container เรา (หรืออาจจะเป็น Address ของ Database)
3)
ในหน้านี้ให้กดเลือกตามภาพ และให้เราทำการใส่ user ID และ Password ของ System Admin (อันเดียวกับที่ตั้งค่า Enviroment)
แต่อาจจะไม่จำเป็นที่จะต้องกรอกเพราะเราสามารถใช้เป็น connection string แทนได้ ซึ่งเราจะกล่าวต่อไปในบทความหน้า
4) เลือกให้เลือก Trust server certificate
5) กด Test Connection
ในบทความต่อไป เราจะมาลองสร้าง .NET Application ง่าย ๆ ที่จะเชื่อมต่อไปที่ SQL Server โดยใช้ ODBC
บทความต่อไป: https://medium.com/@chinnakitglock/net-odbc-02d78f58ad18