Re: Data bound fruit basket with SQL Server Compact Edition

  • From: Jamal Mazrui <empower@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Tue, 4 Dec 2007 22:11:17 -0500 (EST)

For anyone interested in exploring this database option furhter, I have
now converted its help files from the Microsoft Document Explorer format
(.hxs) to structured text at
http://www.EmpowermentZone.com/ssce_doc.zip

SQL Server Compact Edition appears to have some of the simplicity and
portability benefits of SqLite -- though not as small or fast -- while
bringing other benefits of complete .NET integration and built-in
mechanisms for synchronizing mobile devices and desktop computers.

Jamal
On Tue, 4 Dec 2007, Jamal Mazrui wrote:

> Date: Tue, 4 Dec 2007 17:12:53 -0500 (EST)
> From: Jamal Mazrui <empower@xxxxxxxxx>
> Reply-To: programmingblind@xxxxxxxxxxxxx
> To: programmingblind@xxxxxxxxxxxxx
> Subject: Data bound fruit basket with SQL Server Compact Edition
>
> >From the archive at
> http://www.EmpowermentZone.com/ssce_fruit.zip
>
> Previously, I did a fruit basket program in C# 2.0 with data binding via
> Microsoft Access or SQLite, available at
> http://www.EmpowermentZone.com/db_fruit.zip
>
> The present program is written in C# 3.0 with data binding via Microsoft
> SQL Server Compact Edition 3.5 (previously called Mobile or EveryWhere
> Edition).  This version of SQL Server was released with the .NET Framework
> 3.5 and Visual Studio 2008.  It is a freely distributable, embeddable
> database system, designed for both mobile devices and desktop computers
> (but not web servers).
>
> A Database is contained in a single file with a .sdf extension, and may be
> ported simply by copying the file.  The software's home page is at
> http://www.microsoft.com/sql/editions/compact/default.mspx
>
> The fruit basket program requires the runtime engine available from there.
> Designer support for compact database applications is provided in Visual
> Studio 2008, including the Express Editions.
>
> The code for this program tries to be minimalistic by using a layout
> panel, inferred types, in-line properties, and anonymous event handlers.
> The ssee_fruit.sdf database is created if not found.  It tracks fruit
> added to or deleted from the basket, so the same content is present at the
> start of a new program session.
>
> Jamal
>
> /*
> content of ssce_fruit.cs
> Fruit Basket program in C# 3.0 with SQL Server Compact Edition 3.5
> Public domain by Jamal Mazrui
> */
>
> // Import namespaces
> using System;
> using System.Data;
> using System.Data.SqlServerCe;
> using System.IO;
> using System.Windows.Forms;
>
> // Define class
> class FruitBasket {
>
> // Define entry point of program
> static void Main() {
> // Define full path of database file
> var sSdf = Path.Combine(Application.StartupPath, "ssce_fruit.sdf");
> // Define database connection string
> var sConnect = "Data Source=" + sSdf;
>
> // Define connection
> using (var connect = new SqlCeConnection(sConnect)) {
> var sTable = "Basket";
> var sColumn = "Fruit";
>
> // Open connection if database exists, else create it
> if (File.Exists(sSdf)) connect.Open();
> else {
> using (var engine = new SqlCeEngine(sConnect)) engine.CreateDatabase();
> connect.Open();
> var sCreate = "create table " + sTable + " (ID int identity primary key, "
> + sColumn + " nvarchar(20))";
> var createCommand = new SqlCeCommand(sCreate, connect);
> createCommand.ExecuteNonQuery();
> } // if database exists
>
> // Define table adapter
> var sSelect = "select * from " + sTable;
> var selectCommand = new SqlCeCommand(sSelect, connect);
> var adapter = new SqlCeDataAdapter(selectCommand);
> var builder = new SqlCeCommandBuilder(adapter);
> var table = new DataTable(sTable);
> adapter.Fill(table);
>
> // Create controls;
> var tlp = new TableLayoutPanel {ColumnCount = 3, RowCount = 2};
> var lblFruit = new Label {Text = "&Fruit:", Parent = tlp};
> var txtFruit = new TextBox {Parent = tlp};
> var btnAdd = new Button {Text = "&Add", Parent = tlp};
> var lblBasket = new Label {Text = "&Basket:", Parent = tlp};
> var lstBasket = new ListBox {DataSource = table, DisplayMember = sColumn,
> Parent = tlp};
> var btnDelete = new Button {Text = "&Delete", Parent = tlp};
>
> // Define Add event handler;
> btnAdd.Click += (o, e) => {
> var sFruit = txtFruit.Text.Trim();
> if (sFruit.Length == 0) MessageBox.Show("No fruit to add!", "Alert");
> else {
> table.Rows.Add(null, sFruit);
> adapter.Update(table);
> lstBasket.SelectedIndex = lstBasket.Items.Count - 1;
> txtFruit.Clear();
> } // if fruit to add
> }; // add
>
> // Transfer new ID generated by database into table
> table.RowChanged += (o, e) => {
> if(e.Action != DataRowAction.Add) return;
>
> var sTransfer = "SELECT @@identity";
> var transferCommand = new SqlCeCommand(sTransfer, connect);
> e.Row["ID"] = transferCommand.ExecuteScalar( );
> }; // transfer
>
> // Define Delete event handler;
> btnDelete.Click += (o,e) => {
> var iFruit = lstBasket.SelectedIndex;
> if (iFruit == -1) MessageBox.Show("No fruit to delete!", "Alert");
> else {
> table.Rows[iFruit].Delete();
> adapter.Update(table);
> if (iFruit == lstBasket.Items.Count) iFruit--;
> lstBasket.SelectedIndex = iFruit;
> } // if fruit to delete
> }; // delete
>
> // Finalize dialog;
> var dlg = new Form {Text = "Fruit Basket", AcceptButton = btnAdd,
> StartPosition = FormStartPosition.CenterScreen, AutoSize = true,
> AutoSizeMode = AutoSizeMode.GrowAndShrink};
> dlg.Controls.Add(tlp);
> // Define closing event handler
> dlg.Closing += (o, e) => e.Cancel = (MessageBox.Show("Close program?",
> "Confirm", MessageBoxButtons.YesNo) == DialogResult.No);
> dlg.ShowDialog();
> connect.Close();
> } // using connect
> } // Main method
> } // FruitBasket class
>
> // End of ssce_fruit.cs
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

Other related posts: