Re: Minimalist, data bound fruit basket with SQLite.NET

  • From: Jamal Mazrui <empower@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Thu, 6 Dec 2007 11:03:41 -0500 (EST)

There are two versions in the archive.  db_fruit.exe is the original
version that creates a Microsoft Access (.mdb) database by default, or
an SQLite (.db) one if the letter "s" is passed on the command line.
The new version is sqlt_fruit.exe, which should create an encrypted .db
file.  Let me know if not.

Jamal
On Thu, 6 Dec 2007, Octavian Rasnita wrote:

> Date: Thu, 6 Dec 2007 17:25:16 +0200
> From: Octavian Rasnita <orasnita@xxxxxxxxx>
> Reply-To: programmingblind@xxxxxxxxxxxxx
> To: programmingblind@xxxxxxxxxxxxx
> Subject: Re: Minimalist, data bound fruit basket with SQLite.NET
>
> Hi,
>
> But I saw a .mdb file in the archive, and not a sqlite file.
>
> I was able to open it with MS Access, and without any password at all.
> Am I missing something?
>
> Octavian
>
> ----- Original Message -----
> From: "Jamal Mazrui" <empower@xxxxxxxxx>
> To: <programmingblind@xxxxxxxxxxxxx>
> Sent: Thursday, December 06, 2007 4:06 PM
> Subject: Minimalist, data bound fruit basket with SQLite.NET
>
>
> >I have updated the archive at
> > http://www.EmpowermentZone.com/db_fruit.zip
> > to include a minimalist C# 3.0 version with basic security -- also pasted
> > below.  Two files are required to run the program (besides .NET 2.0):
> > sqlt_fruit.exe -- about 8K and System.Data.SQLite.dll -- about 670K.
> >
> > Jamal
> >
> > /*
> > content of sqlt_fruit.cs
> > Fruit Basket program in C# 3.0 with SQLite.NET
> > Public domain by Jamal Mazrui
> > */
> >
> > // Import namespaces
> > using System;
> > using System.Data;
> > using System.Data.SQLite;
> > using System.IO;
> > using System.Windows.Forms;
> >
> > // Define class
> > class FruitBasket {
> >
> > // Define entry point of program
> > static void Main() {
> > // Define names of database file, table, and column
> > var sDb = Path.Combine(Application.StartupPath, "sqlt_fruit.db");
> > var sTable = "Basket";
> > var sColumn = "Fruit";
> >
> > // Define connection
> > var sConnect = "Data Source=" + sDb;
> > using (var connect = new SQLiteConnection(sConnect)) {
> >
> > // Create database if not found
> > if (!File.Exists(sDb)) {
> > connect.Open();
> > // Protect with password
> > connect.ChangePassword("MyCode");
> > var sCreate = "create table " + sTable + " (ID integer primary key
> > autoincrement, " + sColumn + " text);";
> > var createCommand = new SQLiteCommand(sCreate, connect);
> > createCommand.ExecuteNonQuery();
> > connect.Close();
> > } // if database exists
> >
> > // Provide password
> > connect.SetPassword("MyCode");
> > connect.Open();
> > // Define table adapter
> > var sSelect = "select * from " + sTable;
> > var selectCommand = new SQLiteCommand(sSelect, connect);
> > var adapter = new SQLiteDataAdapter(selectCommand);
> > var builder = new SQLiteCommandBuilder(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
> >
> > // Update ID in table to unique one generated by database
> > adapter.RowUpdated += (o, e) => {
> > if(e.StatementType != StatementType.Insert) return;
> >
> > var sTransfer = "select last_insert_rowid()";
> > var transferCommand = new SQLiteCommand(sTransfer, connect);
> > e.Row["ID"] = transferCommand.ExecuteScalar( );
> > }; // update
> >
> > // 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();
> > //using (var transact = connect.BeginTransaction()) {
> > 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 sqlt_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
>
__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

Other related posts: