C#Pocket PC Programming ตอนที่ 4-1 เขียนโปรแกรมเชื่อมต่อกับ SQL SERVER CE

Posted 20/01/2008 23:52
by deltaflyer
คะแนนนิยม

สวัสดีครับ บทความเกี่ยวกับการเขียนโปรแกรมก็ดำเนินมาถึงชุดที่ 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 รุ่นต่างๆ

clip_image002

เราสามารถตรวจสอบการทำงานของ SQL SERVER CE ได้โดยการเรียกใช้ SQL CE Query Anzlyzer จาก Programs ดังรูปที่ 1-2

clip_image004

รูปที่ 1 Icon SQL CE Query Analyzer (1.bmp) รูปที่ 2 หน้าตาโปรแกรม SQLCE Query Analyzer(2.bmp)

การใช้งานฐานข้อมูล

เราสามารถสร้างฐานข้อมูลขึ้นมาเพื่อใช้งานกับ SQL SERVER CE ได้ สองวิธีด้วยกัน คือ การสร้างด้วย Query Analyzer และ การสร้างโดยการเขียนโปรแกรมบนเครื่อง Pocket PC ซึ่งในที่นี่จะขอพูดถึงเฉพาะในวิธีหลังเท่านั้นครับ

clip_image006

การที่เราจะสามารถติดต่อเพื่อเข้าใช้งานคำสั่งใดๆกับฐานข้อมูล 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 ที่สร้างขึ้น

ตัวอย่าง โปรแกรมสำหรับสร้างฐานข้อมูล

clip_image008

สร้างForm ใหม่ขึ้นมาแล้วทำการลาก Button Control ดังรูปที่ 2 จากนั้นเปลี่ยน Text Property ใหม่เป็น “Create Database”ดังรูปที่ 3

รูปที่ 4 สร้าง button ใหม่ (4.bmp)

clip_image010

ทำการ 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 แสดงว่าเราได้ทำการสร้างฐานข้อมูลสำเร็จแล้ว

clip_image013
clip_image014

ให้เราลองใช้ File Explorer ออกมาดูที่ path / เราจะเห็นไฟล์ชื่อ Testdb.sdf อยู่ แสดงว่าเราสามารถสร้างฐานข้อมูลได้สำเร็จเรียบร้อยดังรูปที่ 8

clip_image016

รูปที่ 6 โปรแกรมขณะทำงาน(6.bmp) รูปที่ 7 สร้างฐานข้อมูลเรียบร้อย(7.bmp)

clip_image018

รูปที่ 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 การเชื่อมต่อเท่านั้น นั่นหมายความว่าหากมีโปรแกรมใดเปิดไฟล์ฐานข้อมูลนั้นไปแล้ว โปรแกรมอื่นๆ หรือ เครื่องอื่นๆ จะไม่สามารถติดต่อเข้ามาได้อีก

 

maidy said:

เกิด error ค่ะมันฟ้องว่า Unspecified error [ \My Documents\test3.sdf,Password : 1234 ] ที่ engine.CreateDatabase();

///////////////////////////////

public void CreateNewDatabase()

       {

           string connStr = @"Data Source = \My Documents\test3.sdf,Password : 1234";

           using (SqlCeEngine engine = new SqlCeEngine(connStr))

           {

               engine.CreateDatabase();//บรรทัดนี้ค่ะ

           }

       }

///รบกวช่งยตอบหน่อยนะค่ะ

March 29, 2008 2:46 PM
 

maidy said:

Unspecified error [ \My Documents\test3.sdf,Password : 1234 ] ตรง  engine.CreateDatabase();

////////////

public void CreateNewDatabase()

       {

           string connStr = @"Data Source = \My Documents\test3.sdf,Password : 1234";

           using (SqlCeEngine engine = new SqlCeEngine(connStr))

           {

               engine.CreateDatabase();//บรรทัดนี้ค่ะ

           }

       }

//รบกวนผู้รูช่วยตอบหน่อยค่ะ ขบคุณค่ะ

March 29, 2008 2:49 PM
 

maidy said:

Unspecified error [ \My Documents\test3.sdf,Password : 1234 ] ตรง  engine.CreateDatabase();

//รบกวนผู้รูช่วยตอบหน่อยค่ะ ขบคุณค่ะ

March 29, 2008 2:51 PM
 

maidy said:

error ตรง engine.CreateDatabase();

March 29, 2008 2:51 PM
(required)  
(optional)
(required)  
Add
Google
คอแหลม
โฆษณาออนไลน์,
				โฆษณา,ออนไลน์,ลงโฆษณา,ประกาศ,online advertising,online
				,advertising,โปรโมทสินค้า,โปรโมทเว็บไซต์,promote website,
				seo,pay per click,ad per click,media,ค้นหาเว็บ,media,
				สื่อ