สวัสดีครับ บทความเกี่ยวกับการเขียนโปรแกรมก็ดำเนินมาถึงชุดที่ 4 แล้วนะครับฉบับนี้ผมจะขอพูดถึงการเขียนโปรแกรมบนเครื่อง Pocket PC เพื่อเชื่อมต่อกับระบบฐานข้อมูล
หากพูดถึงการพัฒนา Software แล้วสิ่งที่ขาดไม่ได้เลยก็คือการจัดเก็บข้อมูลของโปรแกรมซึ่งบนเครื่อง Pocket PC ก็มีอยู่หลายรูปแบบเช่นกัน เช่น txt File , .PDB(Palm Database) Microsoft pocket access และการจัดเก็บฐานข้อมูลเชิงสัมพันธ์ซึ่งก็คือ MS SQL SERVER CE นั่นเอง
Microsoft Structured Query Language Server 2000 Windows CE Edition (SQL Server CE) นับเป็นเวอร์ชั่นย่อขนาดของ Microsoft SQL Server 2000 Database Engine ที่ใช้กับเครื่อง PC ทั่วไป โดย SQL Server CE จึงมีคุณสมบัติและฟังก์ชั่นการทำงานไม่มากเท่ากับเวอร์ชั่นบนเครื่อง PC
คุณสมบัติทั่วไปของ SQL Server CE
· ฐานข้อมูลมีขนาดสูงสุดได้ 2 GB
· สนับสนุนคอลัมน์แบบ Binary Large Objects (BLOBS) มีขนาดสูงสุดได้ 1 GB
· สนับสนุนการทำงานบางส่วนของ คำสั่ง Data Definition Language (DDL) ดังตารางที่ 1
· สนับสนุนการทำงานบางส่วนของ คำสั่ง Data Manipulation Language (DML) statements ดังตารางที่ 2
· คุณสมบัติทั่วไปของ Database indexes, primary keys, constraints และ column defaults
· สามารถตั้งรหัสผ่านให้กับฐานข้อมูลได้โดยรหัสผ่านที่ตั้งจะถูกเข้ารหัสด้วยกุญแจ 128 bits
คำสั่ง DDL ที่สามารถใช้งานได้กับ SQL Server CE
คำสั่ง
การทำงาน
CREATE DATABASE
สร้างฐานข้อมูลใหม่
CREATE TABLE
สร้างตารางใหม่ในฐานข้อมูล, Primary Key , foreign Key และอื่นๆ
ALTER TABLE
แก้ไขตารางที่มีอยู่แล้ว
CREATE INDEX
สร้าง index ให้กับฐานข้อมูล
DROP INDEX
ลบ index ออกจากฐานข้อมูล
DROP TABLE
ลบตารางพร้อมข้อมูลต่างๆ ออกทั้งหมด
ตารางที่ 1 คำสั่ง DDL ที่สามาใช้งานได้
DATA TYPE
DESCRIPTION
Bigint
Integer (whole number) data from –263 (–9,223,372,036,854,775,808) through 263 – 1 (9,223,372,036,854,775,807).
Integer
Integer (whole number) data from –231 (–2,147,483,648) through 231 – 1 (2,147,483,647).
Smallint
Integer data from –32,768 to 32,767.
Tinyint
Integer data from 0 to 255.
Bit
Integer data with either a 1 or 0 value.
numeric (p, s)
Fixed-precision and scale-numeric data from –1038 + 1 through 1038 – 1. p specifies precision and can vary between 1 and 38. s specifies scale and can vary between 0 and p.
Money
Monetary data values from –263/10,000 through (263 – 1)/10,000 (–922,337,203,685,477.5808 through 922,337,203,685,477.5807 units).
Float
Floating-point number data from –1.79E+308 through 1.79E+308.
Real
Floating precision number data from –3.40E+38 through 3.40E+38.
Datetime
Date and time data from January 1, 1753, to December 31, 9999, with an accuracy of one three-hundredth second, or 3.33 milliseconds. Values are rounded to increments of .000, .003, or .007 milliseconds.
nchar(n)
Fixed-length Unicode data with a maximum length of 255 characters. Default length = 1.
nvarchar(n)
Variable-length Unicode data with a length of 1 to 255 characters. Default length = 1.
ntext
Variable-length Unicode data with a maximum length of (230 – 2) / 2 (536,870,911) characters.
binary(n)
Fixed-length binary data with a maximum length of 510 bytes. Default length = 1.
varbinary(n)
Variable-length binary data with a maximum length of 510 bytes. Default length = 1.
Image
Variable-length binary data with a maximum length of 230 – 1 (1,073,741,823) bytes.
uniqueidentifie
A globally unique identifier (GUID).
IDENTITY [(s, i)]
This is a property of a data column, not a distinct data type. Only data columns of the integer data types can be used for identity columns. A table can have only one identity column. A seed and increment can be specified, and the column cannot be updated. s (seed) = starting value i (increment) = increment value
ROWGUIDCOL
This is a property of a data column, not a distinct data type. It is a column in a table that is defined by using the uniqueidentifier data type.
ตารางที่ 2 ชนิดข้อมูลต่างๆที่ SQL SERVER CE สามารถใช้งานได้
ติดตั้ง SQL SERVER CE
การติดตั้ง SQL Server CE ลงบนเครื่อง Pocket PC สามารถทำได้เหมือนกับ ติดตั้ง Application ทั่วไปโดยสามารถทำการดาวโหลดได้ที่ http://www.microsoft.com/download ซึ่งเราจำเป็นต้องดาวโหลด SQL SERVER CE Development Tool มาติดตั้งกับ Visual Studio.NET เพื่อให้เราสามารถใช้งาน Namespace ต่างๆเกี่ยวกับ SQL Server Ce ได้
หลังจากนั้นเวลาที่เราทำการเขียนโปรแกรมสำหรับเครื่อง Pocket PC นั้นโปรแกรม Visual Studio.NET จะทำการตรวจสอบและติดตั้ง SQL Server Ce Version ใหม่ให้เองโดยอัตโนมัติ หรือหากเราต้องการติดตั้งเองก็สามารถทำได้โดยการคัดลอก File .cab เพื่อเอาไปติดตั้งเองบนเครื่อง Pocket PC ได้โดยไฟล์ ติดตั้งจะอยู่ใน Folder Program Files\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\v1.0.5000\Windows CE\wce400 โดยใน Folder นี้จะมีไฟล์ .cab สำหรับติดตั้งให้กับ CPU รุ่นต่างๆ
เราสามารถตรวจสอบการทำงานของ SQL SERVER CE ได้โดยการเรียกใช้ SQL CE Query Anzlyzer จาก Programs ดังรูปที่ 1-2
รูปที่ 1 Icon SQL CE Query Analyzer (1.bmp) รูปที่ 2 หน้าตาโปรแกรม SQLCE Query Analyzer(2.bmp)
การใช้งานฐานข้อมูล
เราสามารถสร้างฐานข้อมูลขึ้นมาเพื่อใช้งานกับ SQL SERVER CE ได้ สองวิธีด้วยกัน คือ การสร้างด้วย Query Analyzer และ การสร้างโดยการเขียนโปรแกรมบนเครื่อง Pocket PC ซึ่งในที่นี่จะขอพูดถึงเฉพาะในวิธีหลังเท่านั้นครับ
การที่เราจะสามารถติดต่อเพื่อเข้าใช้งานคำสั่งใดๆกับฐานข้อมูล SQL SERVER CE ได้นั้นเราจำเป็นต้องใช้ Namespace System.Data.SqlServerCE ส่วนการสร้างฐานข้อมูลนั้นต้องอาศัย Namespace System.Data.SqlServerCe.SqlCeEngine. ซึ่ง SqlCeEngine สามารถทำงานได้สองส่วนคือ การสร้างฐานข้อมูลใหม่ และการ Compact ฐานข้อมูล
ก่อนที่เราจะทำการใช้ Namespace ดังกล่าวได้นั้นเราต้องทำการ Add Reference ของSQL Server CE ให้กับ Project ของเราก่อน โดยไปที่ Menu Tool à Add reference จากนั้น Double คลิกที่ System.Data.SqlServerCe จากนั้นคลิด Ok ดังรูปที่ 3
รูปที่ 3 การเพิ่ม Reference ให้กับ project (3.bmp)
ขั้นตอนการสร้างฐานข้อมูล
1. ทำการตรวจสอบให้แน่ใจก่อนว่า ไม่มีไฟล์ที่ชื่อซ้ำกับไฟล์ที่เราต้องการสร้างไฟล์ฐานข้อมูลที่สร้างได้จะอยู่ในนามสกุล SQL Server CE database file (.sdf) ซึ่งขั้นตอนนี้สำคัญมากหากเราสร้างไฟล์ฐานข้อมูลใหม่ในขณะที่มีไฟล์ฐานข้อมูลเดิมอยู่แล้วข้อมูลทั้งหมดในฐานข้อมูลจะหายไปทันที
2. ทำการสร้าง Instance ของ SqlCeEngine จากนั้นทำการสร้าง Connection String (DDL Statement ตามตารางที่ 1) เพื่อส่งค่าให้กับ Instance ของ SqlCeEngine ที่สร้างขึ้นมา
3. ทำการเรียกใช้งาน Method CreateDataBase จาก Instance ของ SqlCeEngine ที่สร้างขึ้น
ตัวอย่าง โปรแกรมสำหรับสร้างฐานข้อมูล
สร้างForm ใหม่ขึ้นมาแล้วทำการลาก Button Control ดังรูปที่ 2 จากนั้นเปลี่ยน Text Property ใหม่เป็น “Create Database”ดังรูปที่ 3
รูปที่ 4 สร้าง button ใหม่ (4.bmp)
ทำการ Double Click ที่ Button ที่เราสร้างขึ้นมาโปรแกรมจะพาเราเข้าไปสู่หน้าจอ Coding และทำการสร้างMethod ที่ทำหน้าที่ดักจับการคลิกของปุ่มนั้นจากนั้นทำการ พิมพ์ code ลงไปใน Button1_OnClick method และทำการสร้าง Method ใหม่ขึ้นมาที่ชื่อ CreateNewDatabase ดังรูปที่ 4
รูปที่ 5 เขียน Code เพื่อสร้าง Database(5.bmp)
เราลองมาดู Code ที่เราสร้างขึ้นมากันครับ
บรรทัดที่ 72 เป็นการเรียกใช้ Function CreateNewDatabase() ทำงาน
บรรทัดที่ 73 สั่งให้โปรแกรมแสดง Message Box เพื่อให้ผู้ใช้รู้ว่าได้สร้างฐานข้อมูลเรียบร้อยแล้ว
บรรทัดที่ 78 เป็นการเริ่มสร้าง Method CreateNewDatabase
บรรทัดที่ 80 เป็นการสร้าง string ชื่อ connStr เพื่อเก็บค่า Command line parameter เพื่อส่งให้กับ SqlCeEngine
บรรทัดที่ 82 เป็นการสร้าง Instance ของ SqlCeEngine ใหม่ชื่อ engine แล้วทำการส่ง ConnStr ซึ่งเป็น Command Line Parameter ให้กับ instance นั้น
บรรทัดที่ 84 เป็นการสั่งให้ method CreateDatabase ของ SqlEngine ทำงาน
ทีนี้เรามาดูกันว่า Command Line Parameter ของ SqlEngine สำหรับการสร้างฐานข้อมูลใหม่มีอะไรกันบ้างที่เราใช้กันไปแล้วคือ
DataSource = “temp.sdf”,Password=”testing123”;
อย่างที่ได้กล่าวไปแล้วไฟล์ฐานข้อมูลของ Sql Server Ce จะถูกเก็บอยู่ในรูปของนามสกุล .sdf เพราะฉนั้นการกำหนด DataSource คือการกำหนดว่าไฟล์ฐานข้อมูลที่เราต้องการสร้างขึ้นมานั้นมีชื่อว่าอะไร ส่วน Password ก็มีความหมายตรงตัวอยู่แล้วนั่นคือรหัสผ่านสำหรับใช้ฐานข้อมูลนั้นๆ นอกจากนี้ยังมีคำสั่งอื่นๆอีกซึ่งจะแสดงในตารางที่ 3
ชื่อ Parameter
ความจำเป็น
การทำงาน
Provider
Optional
กำหนดชื่อ Data Provider ให้กับ โปรแกรมซึ่งค่าปริยายจะเป็นMicrosoft.sqlserver.oledb.ce.2.0
Data Source
Required
ชื่อของไฟล์ฐานข้อมูล ต้องกำหนด .sdf เป็นสกุลไฟล์ไว้ด้วยทุกครั้ง
Locale Identifier
Optional
กำหนดการเข้ารหัสภาษาของฐานข้อมูลซึ่งค่าปริยายจะเป็นLatin1_General (0 x 00000409)
SSCE:Database Password
Optional
กำหนดรหัสผ่านให้กับฐานข้อมูล
SSCE:Encrypt
Optional
กำหนดว่าจะให้ฐานข้อมูลที่สร้างขึ้นมานั้นถูกเข้ารหัสหรือไม่ ซึ่งจะใช้ได้เฉพาะตอนที่สร้างฐานข้อมูลขึ้นมาใหม่เท่านั้นและที่สำคัญต้องทำการกำหนดรหัสผ่านให้กับฐานข้อมูลด้วย
ตารางที่ 3 Command line parameter ของ SqlEngine
จากนั้นลองสั่งให้โปรแกรมทำงานโดยคลิกที่ เมนู Debug à Start Without debugging หรือกด Ctrl + F5 แล้วเลือก Target เป็น pocket PC Device จะได้ผลดังรูปที่ 6 จากนั้นให้ลองคลิกที่ ปุ่ม Create Database รอสักครู่จะมี MessageBox ขึ้นมาบอกว่า Database Created ดังรูปที่ 7 แสดงว่าเราได้ทำการสร้างฐานข้อมูลสำเร็จแล้ว

ให้เราลองใช้ File Explorer ออกมาดูที่ path / เราจะเห็นไฟล์ชื่อ Testdb.sdf อยู่ แสดงว่าเราสามารถสร้างฐานข้อมูลได้สำเร็จเรียบร้อยดังรูปที่ 8
รูปที่ 6 โปรแกรมขณะทำงาน(6.bmp) รูปที่ 7 สร้างฐานข้อมูลเรียบร้อย(7.bmp)
รูปที่ 8 ไฟล์ฐานข้อมูลที่สร้างแล้ว(8.bmp) รูปที่ 9 ใส่รหัสผ่าน(9.bmp)
ทดสอบฐานข้อมูล
เมื่อเราได้ฐานข้อมูลที่เราต้องการแล้วเราสามารถทดสอบได้ว่าฐานข้อมูลนั้นทำงานได้เรียบร้อยดีหรือไม่โดยการคลิกที่ ไฟล์ฐานข้อมูลนั้น เมื่อคลิกแล้วโปรแกรมจะเรียก SQLCE Query Analyzer ขึ้นมาดังรูปที่ 9 โปรแกรมจะเตือนว่า Incorrect Password ให้คลิก ok จากนั้นโปรแกรมจะให้เราใส่ Password ใหม่อีกครั้ง ให้ใส่ให้ถูก(testing123ตามที่เราได้ตั้งไว้ใน Connection String)แล้วคลิก ok จะปรากฏหน้าจอดังรูปที่ 10 ซึ่งแสดงว่าฐานข้อมูลพร้อมใช้งานแล้ว ซึ่งการใช้งาน SqlCE Query Analyzer จะขอกล่าวถึงในโอกาสต่อไป
สรุป
เราจะเห็นได้ว่า SQL SERVER CE นั้นมีความสามารถเรียกได้ว่าเกือบจะเทียบเท่ากับ SQL SERVER จริง สำหรับการใช้งานทั่วไปที่ไม่ต้องการระบบฐานข้อมูลที่ซับซ้อนมากนั้น ไฟล์ฐานข้อมูลที่สร้างได้เราสามารถมองเห็นเป็นไฟล์นามสกุล .sdf เพียงไฟล์เดียวซึ่งสะดวกในการคัดลอกจะสำรองข้อมูล
แต่สำหรับท่านที่คิดจะใช้เครื่อง Pocket PC เป็น Database Server สำหรับให้เครื่องคอมพิวเตอร์ต่างๆภายใน Network เข้ามาติดต่อ ก็ต้องขอบอกเลยครับว่าทำไม่ได้เนื่องจาก SQL SERVER CE กำหนดการเชื่อมต่อสูงสุดเอาไว้เพียง 1 การเชื่อมต่อเท่านั้น นั่นหมายความว่าหากมีโปรแกรมใดเปิดไฟล์ฐานข้อมูลนั้นไปแล้ว โปรแกรมอื่นๆ หรือ เครื่องอื่นๆ จะไม่สามารถติดต่อเข้ามาได้อีก