Barcode Scanning

This week marked my first foray into the world of the .NET Compact Framework. We’re using Motorola MC9090 scanners running Windows Mobile 5.0 and our application needs to read scanned barcodes directly into an existing SQL Server database.

First job was to download the Motorola EMDK kit containing the relevant .dll’s for the scanners, it even comes with a sample project demo’ing how to use them. The two main classes of note are symbol.barcode.reader and symbol.barcode.readerdata, which are pretty self explanatory and deal with the scanned data from the scanner. You need to setup a Reader object to read from the scanner and a ReaderData object to handle the read data (see told you they were self explanatory) and probably an event handler to do something with it once you have scanned.

The code snippet below demonstrates how to capture scanned data and display in a Windows MessageBox. (I’m using a Windows Smart Device Application for Windows Mobile 5.0 and .NET compact Framework 3.5)..

public partial class Form1 : Form
{
    //setup Reader & ReaderData objects
    Symbol.Barcode.Reader barcodeReader = null;
    Symbol.Barcode.ReaderData barcodeReaderData = null;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        barcodeReader = new Symbol.Barcode.Reader();
        //sets up ReaderData to receive text and allocates max buffer size for barcode (7905 bytes).
        barcodeReaderData = new Symbol.Barcode.ReaderData(Symbol.Barcode.ReaderDataTypes.Text, Symbol.Barcode.ReaderDataLengths.MaximumLabel);

        barcodeReader.Actions.Enable();  //enable scanner hardware.
        barcodeReader.ReadNotify += new EventHandler(barcodeReader_Read);  //eventHandler for when read is complete.
        barcodeReader.Actions.Read(barcodeReaderData);  //read scan.          
    }

    private void barcodeReader_Read(object sender, EventArgs e)
    {
        Symbol.Barcode.ReaderData nextReaderData = barcodeReader.GetNextReaderData();  //Get(s)NextReaderData
        MessageBox.Show(nextReaderData.Text);  //Display output in messagebox.
        barcodeReader.Actions.Read(barcodeReaderData);  //await next scan.
    }

    private void Form1_Closing(object sender, CancelEventArgs e)
    {
        //Dispose of everything
        barcodeReader.Actions.Flush();
        barcodeReader.Actions.Disable();
        barcodeReader.Dispose();
        barcodeReaderData.Dispose();
    }
}

Building Layered Applications in .NET

For the project we are currently working on, we have drawn significant inspiration from an excellent series of tutorials by ASP.NET MVP Imaar Spanjaars over at his website.

The series is split into two, with the first 3 parts explaining and demonstrating basic n-layer architecture and the 2nd 6 part series extending this and adding concurrency checking, security and a validation framework. The series is written in ASP.NET but the concepts and architecture are applicable and easily adapted for any of the .NET languages.