d4a5d43707
svn path=/trunk/gtk-sharp/; revision=6132
333 lines
7 KiB
C#
333 lines
7 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
|
|
using Gtk;
|
|
using Gdk;
|
|
using Gnome;
|
|
using GtkSharp;
|
|
|
|
public class BrowseTab : VBox
|
|
{
|
|
private Button goFirst;
|
|
private Button goPrev;
|
|
private Button goNext;
|
|
private Button goLast;
|
|
private TextView id;
|
|
private TextView nameData;
|
|
private TextView address;
|
|
|
|
public BrowseTab () : base (false, 0)
|
|
{
|
|
Table table = new Table (3, 3, true);
|
|
table.Attach (new Label ("ID: "), 0, 1, 0, 1);
|
|
table.Attach (new Label ("Name: "), 0, 1, 1, 2);
|
|
table.Attach (new Label ("Address: "), 0, 1, 2, 3);
|
|
table.Attach (ID, 1, 2, 0, 1);
|
|
table.Attach (NameData, 1, 2, 1, 2);
|
|
table.Attach (Address, 1, 2, 2, 3);
|
|
|
|
HBox hbox = new HBox (false, 0);
|
|
hbox.PackStart (ButtonFirst);
|
|
hbox.PackStart (ButtonPrev);
|
|
hbox.PackStart (ButtonNext);
|
|
hbox.PackStart (ButtonLast);
|
|
|
|
this.PackStart (table, false, false, 0);
|
|
this.PackStart (hbox, false, false, 0);
|
|
}
|
|
|
|
public Widget ButtonFirst
|
|
{
|
|
get {
|
|
if (goFirst == null)
|
|
goFirst = Button.NewFromStock (Stock.GotoFirst);
|
|
return goFirst;
|
|
}
|
|
}
|
|
|
|
public Widget ButtonPrev
|
|
{
|
|
get {
|
|
if (goPrev == null)
|
|
goPrev = Button.NewFromStock (Stock.GoBack);
|
|
return goPrev;
|
|
}
|
|
}
|
|
|
|
public Widget ButtonNext
|
|
{
|
|
get {
|
|
if (goNext == null)
|
|
goNext = Button.NewFromStock (Stock.GoForward);
|
|
return goNext;
|
|
}
|
|
}
|
|
|
|
public Widget ButtonLast
|
|
{
|
|
get {
|
|
if (goLast == null)
|
|
goLast = Button.NewFromStock (Stock.GotoLast);
|
|
return goLast;
|
|
}
|
|
}
|
|
|
|
public Widget ID
|
|
{
|
|
get {
|
|
if (id == null)
|
|
id = new TextView ();
|
|
return id;
|
|
}
|
|
}
|
|
|
|
public Widget NameData
|
|
{
|
|
get {
|
|
if (nameData == null)
|
|
nameData = new TextView ();
|
|
return nameData;
|
|
}
|
|
}
|
|
|
|
public Widget Address
|
|
{
|
|
get {
|
|
if (address == null)
|
|
address = new TextView ();
|
|
return address;
|
|
}
|
|
}
|
|
}
|
|
|
|
public class GtkDbClient {
|
|
|
|
static Window window;
|
|
static Notebook notebook = null;
|
|
static BrowseTab browse;
|
|
|
|
static void Main ()
|
|
{
|
|
Application.Init ();
|
|
window = new Window ("Database client");
|
|
window.DeleteEvent += new DeleteEventHandler (Window_Delete);
|
|
VBox box = new VBox (false, 0);
|
|
notebook = new Notebook ();
|
|
|
|
box.PackStart (CreateMenu (), false, false, 0);
|
|
box.PackStart (notebook, false, false, 0);
|
|
|
|
browse = new BrowseTab ();
|
|
AddPage ("Browse", browse);
|
|
AddPage ("Insert", new Label ("Insert"));
|
|
AddPage ("Remove", new Label ("Remove"));
|
|
AddPage ("Update", new Label ("Update"));
|
|
|
|
window.Add (box);
|
|
window.ShowAll ();
|
|
Application.Run ();
|
|
}
|
|
|
|
static Gtk.MenuBar CreateMenu ()
|
|
{
|
|
MenuBar mb = new MenuBar ();
|
|
Menu file_menu = new Menu ();
|
|
|
|
ImageMenuItem close_item = new ImageMenuItem ("Close");
|
|
close_item.Image = new Image (Stock.Close, IconSize.Menu);
|
|
ImageMenuItem quit_item = new ImageMenuItem ("Quit");
|
|
quit_item.Image = new Image (Stock.Quit, IconSize.Menu);
|
|
|
|
quit_item.Activated += new EventHandler (Quit_Activated);
|
|
|
|
file_menu.Append (new SeparatorMenuItem ());
|
|
file_menu.Append (close_item);
|
|
file_menu.Append (quit_item);
|
|
|
|
MenuItem file_item = new MenuItem ("_File");
|
|
file_item.Submenu = file_menu;
|
|
|
|
mb.Append (file_item);
|
|
|
|
Menu help_menu = new Menu ();
|
|
MenuItem help_item = new MenuItem ("_Help");
|
|
help_item.Submenu = help_menu;
|
|
MenuItem about = new MenuItem ("About");
|
|
about.Activated += new EventHandler (About_Box);
|
|
help_menu.Append (about);
|
|
mb.Append (help_item);
|
|
|
|
return mb;
|
|
}
|
|
|
|
static void AddPage (string title, Widget child)
|
|
{
|
|
notebook.AppendPage (child, new Label (title));
|
|
}
|
|
|
|
static void About_Box (object o, EventArgs args)
|
|
{
|
|
string [] authors = new string [] {
|
|
"Rodrigo Moya (rodrigo@ximian.com",
|
|
"Gonzalo Paniagua (gonzalo@ximian.com)",
|
|
"Duncan Mak (duncan@ximian.com)",
|
|
};
|
|
|
|
string [] documenters = new string [] {};
|
|
|
|
Gnome.About about = new Gnome.About ("Gtk# Db Client", "0.1",
|
|
"Copyright (C) 2002, Ximian Inc.",
|
|
"A Sample Database client",
|
|
authors, documenters, "", new Pixbuf ());
|
|
about.Show ();
|
|
}
|
|
|
|
static void Window_Delete (object o, DeleteEventArgs args)
|
|
{
|
|
Application.Quit ();
|
|
args.RetVal = true;
|
|
}
|
|
|
|
static void Quit_Activated (object o, EventArgs args)
|
|
{
|
|
Application.Quit ();
|
|
}
|
|
}
|
|
|
|
class DbData
|
|
{
|
|
private uint id;
|
|
private string name;
|
|
private string address;
|
|
|
|
private DbData () {}
|
|
|
|
public DbData (uint id, string name, string address)
|
|
{
|
|
this.id = id;
|
|
this.name = name;
|
|
this.address = address;
|
|
}
|
|
|
|
public uint Id
|
|
{
|
|
get { return id; }
|
|
}
|
|
|
|
public string Name
|
|
{
|
|
get { return name; }
|
|
}
|
|
|
|
public string Address
|
|
{
|
|
get { return address; }
|
|
}
|
|
}
|
|
|
|
class IdConnection : IDisposable
|
|
{
|
|
private SqlConnection cnc;
|
|
private bool disposed;
|
|
|
|
public IdConnection ()
|
|
{
|
|
cnc = new SqlConnection ();
|
|
string connectionString = "hostaddr=127.0.0.1;" +
|
|
"user=monotest;" +
|
|
"password=monotest;" +
|
|
"dbname=monotest";
|
|
|
|
cnc.ConnectionString = connectionString;
|
|
try {
|
|
cnc.Open ();
|
|
} catch (Exception){
|
|
cnc = null;
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public void Insert (uint id, string name, string address)
|
|
{
|
|
string insertCmd = String.Format ("INSERT INTO customers VALUES ({0}, '{1}', '{2}')",
|
|
id, name.Trim (), address.Trim ());
|
|
IDbCommand insertCommand = cnc.CreateCommand();
|
|
insertCommand.CommandText = insertCmd;
|
|
insertCommand.ExecuteNonQuery ();
|
|
}
|
|
|
|
public void Delete (int id)
|
|
{
|
|
string deleteCmd = String.Format ("DELETE FROM customers WHERE id = {0}", id);
|
|
IDbCommand deleteCommand = cnc.CreateCommand();
|
|
deleteCommand.CommandText = deleteCmd;
|
|
deleteCommand.ExecuteNonQuery ();
|
|
}
|
|
|
|
public bool Update (int id, string name, string address)
|
|
{
|
|
string updateCmd = String.Format ("UPDATE customers SET name = '{1}', address = '{2}' WHERE id = {0}",
|
|
id, name.Trim (), address.Trim ());
|
|
IDbCommand updateCommand = cnc.CreateCommand();
|
|
updateCommand.CommandText = updateCmd;
|
|
bool updated = false;
|
|
return (updateCommand.ExecuteNonQuery () != 0);
|
|
}
|
|
|
|
public ArrayList SelectAll ()
|
|
{
|
|
IDbCommand selectCommand = cnc.CreateCommand();
|
|
string selectCmd = "SELECT id, name, address FROM customers ORDER by id";
|
|
selectCommand.CommandText = selectCmd;
|
|
IDataReader reader = selectCommand.ExecuteReader ();
|
|
return FillDataList (reader);
|
|
}
|
|
|
|
public DbData Select (int id)
|
|
{
|
|
IDbCommand selectCommand = cnc.CreateCommand();
|
|
string selectCmd = "SELECT id, name, address FROM customers WHERE id = " + id;
|
|
selectCommand.CommandText = selectCmd;
|
|
IDataReader reader = selectCommand.ExecuteReader ();
|
|
ArrayList list = FillDataList (reader);
|
|
return (DbData) list [0];
|
|
}
|
|
|
|
private ArrayList FillDataList (IDataReader reader)
|
|
{
|
|
ArrayList list = new ArrayList ();
|
|
while (reader.Read ()) {
|
|
DbData data = new DbData ((uint) reader.GetValue (0),
|
|
(string) reader.GetValue (1),
|
|
(string) reader.GetValue (2));
|
|
list.Add (data);
|
|
}
|
|
return list;
|
|
}
|
|
|
|
protected virtual void Dispose (bool exp)
|
|
{
|
|
if (!disposed && cnc != null) {
|
|
disposed = true;
|
|
try {
|
|
cnc.Close ();
|
|
} catch (Exception) {
|
|
}
|
|
cnc = null;
|
|
}
|
|
}
|
|
|
|
public void Dispose ()
|
|
{
|
|
Dispose (true);
|
|
GC.SuppressFinalize (this);
|
|
}
|
|
|
|
~IdConnection ()
|
|
{
|
|
Dispose (false);
|
|
}
|
|
}
|
|
|