Most popular

วันพฤหัสบดีที่ 30 มิถุนายน พ.ศ. 2554

การใช้ TActionManager Delphi 2010

TActionManager ที่อยู่ใน Delphi 2010 มีการใช้งานคล้ายกับ TActionList ใน Delphi Version ก่อนๆ จะแต่งต่างกันตรงที่มีประสิทธิภาพ และยืดหยุ่นมากกว่า
TActionManager หรือ TActionList เป็น Component ที่ใช้สำหรับจัดการการพัฒนาโปรแกรมเป็นหลัก ไม่ใช่เทคโนโลยีใดๆ ที่ทำให้โปรแกรมมีประสิทธิภาพมากขึ้น เป็นการบริหาร Event method ต่างๆในโปรแกรมที่อาจจะใช้งาน method ซ้ำๆกัน

Component Action Manager จะอยู่ใน Tab Additional
ผู้เขียนจะทำตัวอย่างง่ายๆเพื่อให้เข้าใจ โดยตัวอย่างแรกจะทำการสร้าง Event ขึ้นโดย VCL Action Manager
จะให้ปุ่มทำงานกับ Action method ที่สร้างเอาไว้

บนฟอร์มประกอบด้วย TEdit , TButton และ TActionManager
คลิ๊กเมาส์ปุ่มขวาที่ Component ActionManager แล้วเลือก Customize
หน้าต่าง Editing ของ ActionManager ใน Tab Actions ให้เลือก New Action เพื่อเพิ่ม Action ตามภาพ
เปลี่ยน Name และ Cation ของ Action ที่สร้างขึ้นเป็น ShowText
ใน Tab Events ให้สร้าง Action method OnExecute ขึ้นมา
ภายใน method ShowTextExecute ที่สร้างขึ้นใส่ คำสั่งให้แสดงค่าของ Edit บนฟอร์ม


procedure TForm1.ShowTextExecute(Sender: TObject);
begin
     ShowMessage(Self.Edit1.Text);
end;


ไปที่ Property Action ของปุ่ม Show Text แล้วเลือกให้ใช้ Action method ShowText ที่สร้างโดย ActionManager 
เมื่อทดสอบโดยกดปุ่ม ปุ่ม ShowText จะไปทำงานที่ Action ShowText แทน Event OnClick
อีกตัวอย่างนึงคือ การสร้างปุ่มให้ทำงานได้แบบไม่ต้องเขียนคำสั่งใดๆ ซึ่งเป็นความสามารถที่เพิ่มขึ้นมา
ตัวอย่างนี้ผู้เขียนจะทำการแสดงภาพโดยใช้ Action Manager เข้ามาช่วย

Component ที่ใช้คือ TImage , TButton และ TActionManager
กำหนด Action ของปุ่ม เลือก New Standard Action > Dialog > TOpenPicture
เมื่อเปิดหน้าต่าง Editing ของ ActionManager ดูก็จะพบว่ามีการสร้าง Action Open Picture ให้อัตโนมัติ แต่ยังไม่สามารถทำงานได้ จนกว่าจะสร้าง Action method ที่ OnAccept
ใน  method OpenPicture1Accept ก็แค่ใส่คำสั่งนำ File Path ของรูปภาพมาแสดงใน TImage เท่านั้นเอง


procedure TForm1.OpenPicture1Accept(Sender: TObject);
begin
     Self.Image1.Picture.LoadFromFile(Self.OpenPicture1.Dialog.FileName);
end;

ทดสอบโดยกดปุ่ม Open Picture แล้วเลือกไฟล์รูปภาพเข้ามาแสดง

วันพุธที่ 29 มิถุนายน พ.ศ. 2554

เทคนิคการ Drag and Drop File เข้ามาใช้ในโปรแกรม (C#)

เทคนิคนี้คือการทำ Drag and Drop กับฟอร์ม (ลากและวาง) ผู้เขียนสร้างฟอร์ม แล้วใช้ Control ListBox เพื่อรับ File Path ที่เลือกเข้ามา โดยที่คำสั่งการทำงานทั้งหมดจะอยู่ที่ Event DragDrop และ DragEnter ของฟอร์ม

ในที่นี้ผู้เขียนให้ฟอร์มชื่อ FrmDD และ ListBox ชื่อ ListBox1
Code ทั้งหมด


    public partial class frmDD : Form
    {
        public frmDD()
        {
            InitializeComponent();
            //กำหนดให้ฟอร์มรองรับการวาง(สิ่งที่ลากมา)
            this.AllowDrop = true;
        }


        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            //ตรวจสอบชนิดของข้อมูลที่ลากเข้ามาว่าเป็นไฟล์หรือไม่
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                e.Effect = DragDropEffects.Copy; // หากเป็นไฟล์ให้ใช้ Effect เป็น Copy
            else
                e.Effect = DragDropEffects.None; // หากไม่ใช้ไฟล์ให้ Effect เป็น None 
        }


        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            // แปลงไฟล์ที่ลากมาให้เป็น File Path เก็บไว้ใน string[]
            //ใช้ string[] เป็น array เพราะอาจมีหลายไฟล์
            string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);


            //วนลูปนำ File Path ใส่ใน ListBox
            foreach (string File in FileList)
                this.listBox1.Items.Add(File);
        }
    }


ทดสอบการทำงานด้วยการลากไฟล์จาก Window Explorer เข้ามาไว้ในโปรแกรม

จะได้ File Path ของไฟล์ทั้งหมดเข้ามาแสดงใน  ListBox
ท่านผู้อ่านสามารถนำไปต่อยอดได้เลย




ที่มา : http://www.jonasjohn.de/snippets/csharp/drag-and-drop-example.htm

วันอังคารที่ 28 มิถุนายน พ.ศ. 2554

เทคนิคการทำ Drag and Drop (C#)

เทคนิคการ Drag and Drop หรือ "ลากแล้ววาง" ในปัจจุบันนิยมกันมาก และทำให้โปรแกรมมีความเป็น User Friendly มากขึ้น
ผู้เขียนจะอธิบาย Code การทำ Drad and Drop กับ Listbox 2 ตัว คือ LisBox1 กับ ListBox2 ตามรูปด้านล่าง

ในหน้า Design วาง ListBox ทั้ง 2 ตัวไว้คนละข้างของฟอร์ม พร้อมใส่ Item ให้ ListBox1
(ListBox2 ให้กำหนด AllowDrop เป็น true ด้วย)
กำหนด Event MouseDown เพื่อให้ทำงานในขณะที่เกิดการกดเมาส์ลงบน ListBox1


ใส่ Code คำสั่งในส่วนของ Event Mouse Down      

       private void listBox1_MouseDown(object sender, MouseEventArgs e)
        {
            //ถ้าใน Listbox1 ไม่มี item อยู่เลยก็ไม่ต้องทำงานคำสั่งด้านล่าง
            if (listBox1.Items.Count == 0) return;


            //หา Index ของ item ใน Listbox1 จากการกดเมาส์
            int index = listBox1.IndexFromPoint(e.X, e.Y);
            //เก็บค่าของ item ในรูปแบบของ string
            string s = listBox1.Items[index].ToString();
            //เรียกใช้ function DoDragDrop พร้อมส่ง parameter 2 ตัว
            DragDropEffects dde1 = DoDragDrop(s,DragDropEffects.All);


            //ตรวจสอบว่า DragDropEffects อยู่ในหมวดใด
            if (dde1 == DragDropEffects.All)
            {
                //หากตรงตามหมวดที่ใช้งาน ให้ลบ item ออกหลังจากที่ลาก item ออกไปแล้ว
                listBox1.Items.RemoveAt(listBox1.IndexFromPoint(e.X, e.Y));
            } 
        }



สถานะต่างๆของ DragDropEffects

  • All : จะสามารถทำ copied , remove ไปจากต้นทาง และให้ย้ายไปที่ปลายทางได้
  • Copy : เป็นการคัดลอกไปที่ปลายทาง
  • Link : ต้นทางเชื่อมโยงกับปลายทาง
  • Move : ย้ายจากต้นทางไปที่ปลายทาง
  • None : ไม่ยอมให้วางที่ปลายทาง
  • Scroll : อยู่ในระหว่างการไปที่ปลายทาง

ส่วนใน ListBox2 จะมีการใช้งานอยู่ 2 Event คือ DragOver และ DragDrop

        //Event Drag Over คือการลากมาถึง

        private void listBox2_DragOver(object sender, DragEventArgs e)
        {
            //ให้กำหนดค่า effect เป็น DragDropEffects All
            e.Effect = DragDropEffects.All;
        }


        //เมื่อวางลงบน ListBox2
        private void listBox2_DragDrop(object sender, DragEventArgs e)
        {
            //ตรวจสอบว่าเป็นค่าที่ถูกลากมาเป็นชนิดตัวอักษร หรือข้อความหรือไม่
            if (e.Data.GetDataPresent(DataFormats.StringFormat))
            {
                //หากเป็นข้อความให้แปลงใส่ในตัวแปร string
                string str = (string)e.Data.GetData(DataFormats.StringFormat);
                //เพิ่ม item ให้กับ ListBox2
                listBox2.Items.Add(str);
            }
        }


เสร็จเรียบร้อย พร้อมทดสอบการทำงานได้ โดยให้กดเมาส์ค้าง ลากข้อความจาก ListBox1 มาจนถึง ListBox2 แล้วปล่อยเมาส์ จะพบว่า item ที่อยู่ใน ListBox1 จะย้ายมาอยู่ใน ListBox2

item จาก Listbox1 จะย้ายมาอยู่ใน ListBox2 ตามภาพ


ที่มา : http://www.codeproject.com/KB/dotnet/csdragndrop01.aspx

เจาะ Auto Increment ของ Firebird ทำงานอย่างไร

คราวที่แล้วผู้เขียนได้นำเสนอการใช้งานเบื้องต้นกับฐานข้อมูล Firebird ไปแล้ว ตอนนี้ขอเก็บตกในส่วนที่น่าสนใจอีกส่วนนึง คือการจัดการ Field ที่เป็นแบบ Auto Increment หรือแบบตัวเลขอัตโนมัตินั่นเอง
ความเป็นฐานข้อมูลที่ทำงานตรงไปตรงมากึ่ง Manual นี่เอง ซึ่งหากเราเข้าใจการทำงานทั้งหมดก็จะนำไปประยุคใช้ได้อย่างมีประสิทธิภาพมากขึ้น
จากฐานข้อมูล TEST และ Table EMPLOYEE ที่ผู้เขียนได้สร้างขึ้น ผู้เขียนจะทำการเพิ่ม Field "EMPLOYEE_ID" ให้เป็นประเภท INTEGER พร้อมกำหนดให้เป็นแบบ Autoincrement โดยใช้โปรแกรม SQL Manager Interbase/Firebird เหมือนเดิม

กำหนดตามภาพ
จะเห็นว่าในเมนูทางด้านซ้ายจะปรากฎ Autoincrement ขึ้น

Autoincrement ภายในประกอบด้วย Generator , Trigger และ Procedure
นั่นหมายความว่าหากจะทำการกำหนด Field ให้เป็นแบบ Autoincrement แล้ว การทำงานของ Autoincrement จะสัมพันกับ 3 ส่วนคือ Generator , Trigger , Procedure ซึ่งทั้ง 3 ส่วนนี้โปรแกรม SQL Manager จะสร้าง SQL Code ให้เอง

ในส่วนของ Generator ก็ทำงานเหมือนกัยตัวแปรที่คอยเก็บค่าการเพิ่มตัวเลขเอาไว้ สามารถเปลี่ยนชื่อ และตั้งค่าเริ่มต้นได้ ในที่นี้ให้เริ่มต้นที่ 0
ในส่วนของ Trigger โปรแกรมจะเขียน Trigger ให้ทำงานก่อนที่จะเพิ่มข้อมูลเข้ามา (Before Insert)
Trigger Code
//สร้าง Trigger ชื่อ BI_EMPLOYEE_EMPLOYEE_ID ของ Table EMPLOYEE

CREATE TRIGGER BI_EMPLOYEE_EMPLOYEE_ID FOR EMPLOYEE
//ให้ทำงานก่อนมีการเพิ่มข้อมูล
ACTIVE BEFORE INSERT 
//กำหนดตำแหน่งการทำงานที่ 0
POSITION 0
AS 
BEGIN
  //ถ้า Field EMPLOYEE_ID ที่เพิ่มเข้ามาเป็น NULL
  IF (NEW.EMPLOYEE_ID IS NULL) THEN
      //ให้ Function GEN_ID เพิ่มค่า Generator "EMPLOYEE_EMPLOYEE_ID_GEN" ขึ้นที่ละ 1 แล้วเอาใส่ใน Field EMPLOYEE_ID 
      NEW.EMPLOYEE_ID = GEN_ID(EMPLOYEE_EMPLOYEE_ID_GEN, 1);
END


ในส่วนของ Procedure เป็น Code ที่ใช้ในการเปลี่ยนค่าใน Field "EMPLOYEE_ID"
Procedure
//สร้าง Procedure ชื่อ "EMPLOYEE_EMPLOYEE_ID_AUTOINC"


CREATE PROCEDURE EMPLOYEE_EMPLOYEE_ID_AUTOINC
//คืนค่าเป็น INTEGER
RETURNS (NEW_VALUE INTEGER)
AS
BEGIN
  //เพิ่มค่า Generator "EMPLOYEE_EMPLOYEE_ID_GEN" ขึ้นอีก 1
  NEW_VALUE = GEN_ID(EMPLOYEE_EMPLOYEE_ID_GEN, 1);
END

ผู้เขียนใส่ Description แล้วกด OK เพื่อเพิ่ม Field จากนั้นกด Compile ด้วย

หน้าต่างแสดงค่าต่างๆ บ่งบอกว่าจะมีการสร้าง Generator กด Commit เพื่อยืนยัน
จะเห็นว่าใน Tab Databases ซ้ายมือจะมีการสร้าง Trigger และ Generator ขึ้นมาให้แล้ว

ทดสอบเพิ่มข้อมูลลงใน Table EMPLOYEE

เพิ่มข้อมูลแล้วกด Commit  Trigger จะทำงานทันทีจะได้ค่าของ Field เพิ่มขึ้นเรื่อยๆ
สามารถเข้าไปดูในกลุ่มของ Generator เพื่อดูค่าที่เพิ่มขึ้นได้

จากตัวอย่างมีการเพิ่มข้อมูล 2 Record ค่าของ EMPLOYEE_EMPLOYEE_ID_GEN ก็เพิ่มเป็น 2 เช่นเดียวกัน

ทำความเข้าใจกับสถาปัตยกรรมเทียร์ (Tier)

Tier คำนี้เมื่อแปลออกมาจะแปลได้ว่า "ชั้น"
Tier ในวงการ Software ก็มีความหมายคล้ายกัน สำหรับท่านที่ยังไม่เข้าใจขอแนะนำง่ายๆ โดยให้มองว่า "ชั้น" นั้นเป็นนามธรรม เมื่อนำมาใช้ในวงการ Software แล้ว จำเป็นต้องสร้างนามธรรมนั้นเป็นภาพลักษณ์ขึ้นมา
นิยามเฉพาะเจาะจงของ Tier ก็คือ "การรับ-ส่งข้อมูลในชั้นต่างๆ" นั่นเอง มักจะใช้คำว่า Tier กับ Software ทาง Business solution ที่มีระบบเครือข่าย มี Database Server ผู้เขียนจะจำแนกสถาปัตยกรรมเทียร์เป็น 3 แบบ ให้เห็นความแตกต่างอย่างชัดเจน

  1. 2 Tier
  2. 3 Tier
  3. Multi-tier

2 Tier คำเรียกนี้อาจจะไม่ค่อยคุ้น เพราะส่วนใหญ่จะเรียกว่า Client / Server เป็นการรับ-ส่งข้อมูลจากโปรแกรมไปที่ Database Server ส่วนใหญ่จะใช้ในงานสำนักงาน หรือในองค์กรเดียวกัน (ดูภาพประกอบ)

ภาพแสดงการรับส่งข้อมูลแบบ Client / Server มีทั้งหมด 2 Tier
3 Tier คำนี้คุ้นกันมาก แล้วมันมีอะไรทำให้เกิดมาอีกชั้น (Tier) นึงล่ะ ?
สิ่งที่เพิ่มเข้ามาอาจจะเรียกว่า Middle Tier หรือ Middle ware ก็ได้ มันคือ Software ที่เข้ามาจัดการการรับส่งข้อมูลระหว่าง Client กับ Server อีกที อาจจะเหมือนพ่อ/แม่สื่อ ที่ทำให้ทั้ง Client และ Server มีประสิทธิภาพมากขึ้น
เมื่อใดถึงต้องใช้ Middle Tier / Middle ware?

  • เมื่อผู้ใช้งานมีจำนวนมาก จำเป็นต้องจัดการข้อมูลให้ทั่วถึง และลดภาระของ Database Server
  • เมื่อมีการรับ - ส่ง ข้อมูลในระยะไกล มีข้อจำกัดทางกายภาพ
  • เมื่อ Database Server มีความสามารถในการจัดการข้อมูลไม่เพียงพอ

แสดงการรับ - ส่งข้อมูลระหว่าง Client - Middle - Database Server มีทั้งหมด 3 ชั้น หรือ 3 Tier
หมายเหตุ
 ในการใช้งานจริง Middle ware จะติดตั้งไว้คนละเครื่องกับ Database Server หรือภายใน Database Server ก็ได้

Multi-tier หรือ n-tier
หมายความว่าต้องมี Tier (ชั้น) จำนวนมากมาย (n-tier n = แทนชั้นเท่าใดก็ได้)  นั่นหมายความว่าจะมีการแตกแขนง Tier ต่างๆมากขึ้นในชั้นของ Middle และ Server เพื่อให้ระบบทำงานได้อย่างมีประสิทธิภาพ มีการเก็บข้อมูลอย่างเป็นระเบียบ และมีผู้ใช้งานอย่างมหาศาล

ภาพแสดงชั้นของ Tier ที่มีมากกว่า 3 Tier
การจะออกแบบสถาปัตยกรรมเทียร์ ยิ่งมีจำนวน Tier มากก็จะยิ่งพัฒนาลำบากและซับซ้อนขึ้น ทั้งนี้ก็แล้วแต่จุดประสงค์ในการใช้งาน และทรัพยากรต่างๆของระบบ  จะใช้จำนวน Tier เท่าไหร่นั้นคงต้องขึ้นอยู่กับความจำเป็น บางท่านได้ยินคำว่า 3 Tier หรือ Multi-tier ก็ขนลุกคิดว่ามันเป็นอะไรที่สุดยอด และถ้ามีโอกาสจะต้องใช้ หากคิดเช่นนั้นอาจเป็นการขี่ช้างจับตั๊กแตนก็เป็นได้

ที่มา : (ภาพ) http://www.intersystems.com/trakcare/solution/section-04.html


รับวางระบบงาน ระบบ Network และพัฒนาระบบ Data warehouse และ ERP ด้วยทีมงานที่มีประสบการณ์ ติดต่อได้ที่ e-mail : arrays2003@hotmail.com

C# สร้าง Windows Service ให้เรียกโปรแกรมอื่น

การสร้าง Windows Service ด้วย C# ผู้เขียนจะใช้ Visual Studio 2010 .Net 4.0 ในการทำตัวอย่าง
ขั้นแรกให้สร้าง Project โดยเลือกเป็น Windows Service

ในที่นี้ผู้เขียนตั้งชื่อว่า "myService"
Visual Studio จะสร้าง ไฟล์ Service1.cs และ Code ให้ชุดนึง เป็น Code การทำงาน Start และ Stop ของ Service
ผู้เขียนจะใส่คำสั่งในการเปิดโปรแกรม Notepad เข้าไปที่ OnStart ของ Service


        protected override void OnStart(string[] args)
        {
            Process.Start("notepad.exe");
        }


แต่เนื่องจากการสร้าง Windows Service จะไม่สามารถจำลองการทำงานของโปรแกรมได้ ต้องทำการติดตั้ง Service เข้าไปใน Windows ก่อนจึงจะรู้ผลการทำงาน ใน .Net จะต้องสร้าง Installer class เพื่อกำหนดค่าต่างๆในการติดตั้ง เพิียงเพิ่ม Installer Class เข้าไปใน Project แล้วเขียน Code เพิ่มดังนี้

คลิ๊กเมาส์ขวาที่ Project เลือก Add > New Item
ไปที่หมวด General และเลือก Installer Class ในที่นี้ผู้เขียนจะใช้ชื่อที่เป็นเริ่มต้นคือ Installer1.cs
จากนั้นเขียน Code ในการตั้งค่าการติดตั้งลงไปใน Installer Class (Installer1)


using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.ServiceProcess;




namespace myService
{
    [RunInstaller(true)]
    public partial class Installer1 : System.Configuration.Install.Installer
    {
        public Installer1()
        {
            InitializeComponent();
            ServiceInstaller si = new ServiceInstaller();
            ServiceProcessInstaller spi = new ServiceProcessInstaller();


            si.ServiceName = "myService"; // ชื่อของ Service
            si.DisplayName = "myService"; // ชื่อที่ใช้แสดงใน Service manager
            si.StartType = ServiceStartMode.Manual; //เมื่อติดตั้งแล้วให้อยู่ในสถานะ Manual
            this.Installers.Add(si);


            spi.Account = System.ServiceProcess.ServiceAccount.LocalSystem; // กำหนดประเภทของ Service
            spi.Password = null;
            spi.Username = null;


            this.Installers.Add(spi);
        }
    }
}


เสร็จเรียบร้อยก็ให้ทำการ Build Project เท่านี้ Windows Service ก็พร้อมที่จะนำไปติดตั้งแล้ว
เพื่อความสะดวกในการติดตั้งผู้เขียนขอแนะนำให้สร้าง Batch File ในการช่วยติดตั้ง (Install) และถอนออก (Uninstall)


ภายในไฟล์ install.bat

@ECHO OFF

REM The following directory is for .NET 4.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX2%

echo Installing myService...
echo ---------------------------------------------------
InstallUtil /i myService.exe
echo ---------------------------------------------------
echo Done.

ภายในไฟล์ uninstall.bat

@ECHO OFF

REM The following directory is for .NET 4.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX2%

echo Installing myService...
echo ---------------------------------------------------
InstallUtil /u myService.exe
echo ---------------------------------------------------
echo Done.



เมื่อทำการรันไฟล์ install.bat จะทำการติดตั้ง myService ทันที
จากนั้นให้เข้าไปดูใน Control Panel > Administrative Tools > Services จากนั้นหาชื่อ myService แล้วเข้าไปดูที่ Properties

คลิ๊กเมาส์ปุ่มขวาแล้วเลือก properties
ใน Tab Log on ให้ติ๊กเครื่องหมายที่  Allow service to interact with desktop เพื่อให้สามารถเรียกโปรแกรมอื่นๆได้  จากนั้นกด Apply
ทดสอบด้วยการกดปุ่ม Start ใน Tab General
เมื่อ Service อยู่ในสถานะ Start ก็จะทำการเรียกให้โปรแกรม Notepad เปิดขึ้นมาทันที
เป็นตัวอย่างง่ายๆ ที่สามารถนำไปประยุคใช้ได้ ผู้เขียนหวังว่าจะมีประโยชน์สำหรับทุกท่านไม่มากก็น้อยนะครับ


  รับวางระบบงาน ระบบ Network และพัฒนาระบบ Data warehouse และ ERP ด้วยทีมงานที่มีประสบการณ์ ติดต่อได้ที่ e-mail : arrays2003@hotmail.com

วันจันทร์ที่ 27 มิถุนายน พ.ศ. 2554

Firebird .Net provider เจ้านกไฟกับดอทเน็ต

หากต้องการใช้ .Net Framework กับฐานข้อมูล Firebird จำเป็นต้องใช้ Provider ในการใช้งาน สามารถดาวน์โหลดได้ฟรีจาก http://www.firebirdsql.org/en/net-provider/

ผุ้เขียนเลือก NETProvider 2.6.5 for .Net 3.5 (.7z)
unzip ออกมา ภายในจะมีไฟล์ 2 ไฟล์
ผู้เขียนสร้าง Project Windows Form ขึ้นมาใหม่ด้วย Visual Studio 2010

คลิ๊กเมาส์ขวาที่ Project แล้วเลือก Add Reference
ในหน้าต่าง Add Reference ให้เลือก Tab Browse เพื่อเลือกไฟล์ .dll ที่ได้ unzip ออกมา จากนั้น กด OK
จะเห็นว่ามี Reference ของ FirebirdSql เพิ่มเข้ามา
ทดสอบเขียน Code ดึง Table เข้ามาใน DataGridView


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FirebirdSql.Data.FirebirdClient;  //use FirebirdClient เข้ามาใช้งาน


namespace firebirdTest
{
    public partial class Form1 : Form
    {
        private DataSet DS;
        private BindingSource BS;
        private DataGridView DGV;


        public Form1()
        {
            InitializeComponent();
            //Connecttion String
            string conStr = @"User=SYSDBA;Password=masterkey;Database=D:\FIREBIRD_DATA\TEST.GDB;DataSource=localhost;";
            conStr += "Port=3050;Dialect=3; Charset=UTF8;Role=;Connection lifetime=15;Pooling=true;";
            conStr += "MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;";


            using (FbConnection fbConn = new FbConnection(conStr))
            {
                this.DS=new DataSet();
                FbDataAdapter fbADAP = new FbDataAdapter("SELECT * FROM EMPLOYEE", fbConn);
                fbADAP.Fill(DS);
                fbConn.Open();


                this.BS = new BindingSource(DS, DS.Tables[0].TableName);
                this.DGV = new DataGridView();
                this.DGV.ReadOnly = true;
                this.DGV.Dock = DockStyle.Fill;
                this.DGV.DataSource = this.BS;
                this.Controls.Add(this.DGV);
            }
        }
    }
}


เมื่อรันทดสอบจะได้ตามภาพ
สรุปว่า การใช้งานฐานข้อมูล Firebird ด้วย .Net ไม่ใช่เรื่องยากเลย และใช้งานได้ไม่ต่างจากการเขียน Code ทำงานกับ SQL Server ต่างกันแค่เพียงค่าที่กำหนดใน Connection String เท่านั้น

หมายเหตุ
ข้อมูล Connection String เพิ่มเติม http://www.connectionstrings.com/firebird

เริ่มต้นกับฐานข้อมูล Firebird (เจ้านกไฟ ของฟรีที่ไม่กระจอก)(3/3)

จากตอนที่แล้วผู้เขียนได้อธิบายการ Register Host และ Database ไปแล้ว ตอนนี้จะทดลองใช้ Database ตัวที่สร้างขึ้น
การสร้าง Table
คลิ๊กเมาส์ขวาที่ Tables แล้วเลือก New Table...
จะมีหน้าต่างให้สร้าง Table ปรากฎทางด้านขวาตามภาพ

เลือก Database Test ทางด้านซ้าย ใน Tab Table ทางด้านขวา กำหนด Table name และใส่ Description ให้เรียบร้อย
เลือก Tab Fields แล้วกดที่ new field
ตั้งชื่อ Field กำหนด Type ของข้อมูลให้เรียบร้อย ในที่นี้ผู้เขียนสร้าง Field ชื่อ EMPLOYEE_CODE เป็น Primary Key
 โดยให้ Type เป็น CHAR มีขนาด 4 และในเมื่อ Type เป็นประเภทตัวอักษรจึงตั้งค่า Character set เป็น "UTF8" 
ใส่ Description ให้เรียบร้อย จากนั้นกด OK ได้เลย
เมื่อเพิ่ม Field ทั้งหมดเรียบร้อยให้กดที่ Compile เพื่อสร้าง Table ในฐานข้อมูล
จากนั้นจะพบหน้าต่างที่ให้ตรวจสอบความถุกต้อง หากถูกต้องตามต้องการแล้ว กดปุ่ม Commit ได้เลย หรือต้องการยกเลิกให้กดปุ่ม Rollback
Table "EMPLOYEE" ได้ถูกสร้างขึ้นแล้ว
จากนั้นลองเพิ่มข้อมูล โดยไปที่ Tab Data เพิ่มข้อมูลลงไปในแต่ละ Field จากนั้นกด Commit
เท่านี้ก็เสร็จเรียร้อยในการทดลองการสร้าง Table ขึ้นใช้งาน
ที่แตกต่างจากฐานข้อมูลอื่นๆก็คือการใช้ Firebird นั้นค่อนข้างจะเป็นแบบ manual เสียมาก โปรแกรมที่ช่วยให้จัดการกับฐานข้อมูลก็เป็นเพียงแค่ช่วยให้เรา Generate SQL ขึ้นมาเท่านั้น จะเป็นต้อง Commit เพื่อให้ฐานข้อมูลถูกอัพเดท หรือทำการ Rollback เองเพื่อยกเลิก Transaction
อย่างไรก็ตาม Firebird ไม่ได้ถูกพัฒนามาเพื่อใช้งานหนักมากจนเกินไป จากประสบการณ์ของผู้เขียนที่เคยทำงานกับ Firebird 1.5 มา มันสามารถรองรับการใช้งานข้อมูลได้เป็นหลักแสน Record ซึ่งอาจจะเหมาะสำหรับองค์กรขนาดกลาง ลงไปถึงขนาดย่อม