AirScout/AirScout/DatabaseMaintenanceDlg.cs

131 wiersze
5.5 KiB
C#

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 System.Data.SQLite;
using ScoutBase.Core;
using ScoutBase.Database;
using ScoutBase.Elevation;
using ScoutBase.Propagation;
namespace AirScout
{
public partial class DatabaseMaintenanceDlg : Form
{
ScoutBaseDatabase Database;
System.Data.SQLite.SQLiteDatabase db = null;
ELEVATIONMODEL Model;
public DatabaseMaintenanceDlg( ScoutBaseDatabase database, ELEVATIONMODEL model = ELEVATIONMODEL.NONE)
{
InitializeComponent();
lv_Tables.FullRowSelect = true;
ListViewExtender extender = new ListViewExtender(lv_Tables);
// extend 4th & 5th column for actions
ListViewButtonColumn buttonAction1 = new ListViewButtonColumn(3);
buttonAction1.Click += OnButtonAction1Click;
buttonAction1.FixedWidth = true;
// add extender
extender.AddColumn(buttonAction1);
ListViewButtonColumn buttonAction2 = new ListViewButtonColumn(4);
buttonAction2.Click += OnButtonAction2Click;
buttonAction1.FixedWidth = true;
// add extender
extender.AddColumn(buttonAction2);
// add items
Database = database;
// get SQLite database to use for, use null füor default
if (database.GetType() == typeof(ElevationDatabase))
db = ((ElevationDatabase)Database).GetElevationDatabase(model);
if (database.GetType() == typeof(PropagationDatabase))
db = ((PropagationDatabase)Database).GetPropagationDatabase(model);
Model = model;
this.Text = Database.Name;
this.lbl_Description.Text = Database.Description;
DataTable dt = Database.GetTableList(db);
foreach (DataRow row in dt.Rows)
{
// add items
string tablename = row[0].ToString();
ListViewItem lvi_Location = lv_Tables.Items.Add(tablename);
lvi_Location.SubItems.Add(Database.GetTableDescription(tablename));
lvi_Location.SubItems.Add(Database.GetTableRowCount(tablename, db).ToString());
lvi_Location.SubItems.Add("Delete All");
lvi_Location.SubItems.Add("View");
}
}
private void OnButtonAction1Click(object sender, ListViewColumnMouseEventArgs e)
{
if (e.Item != null)
{
if (MessageBox.Show("Do you really want to delete all entries of table " + e.Item.Text + "?", "Delete All Entries", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
Database.ClearTable(e.Item.Text, db);
}
}
}
private void OnButtonAction2Click(object sender, ListViewColumnMouseEventArgs e)
{
if (e.Item != null)
{
DataTable dt;
string tablename = e.Item.Text;
string columns = "";
// fill DataTable with all fields except BLOBs
// get table structure, very basic approach
SQLiteConnection conn = Database.GetDBConnection(db);
Console.WriteLine("Reading columns for table: " + tablename);
try
{
dt = conn.GetSchema("Columns");
foreach (DataColumn col in dt.Columns)
{
Console.Write("[" + col.ColumnName + "] ");
}
Console.WriteLine("\nDumping content:");
foreach (DataRow row in dt.Rows)
{
for (int j = 0; j < dt.Columns.Count; j++)
Console.Write(row[j].ToString() + ",");
Console.WriteLine();
// extract all column names and types from given table
if (row["TABLE_NAME"].ToString().ToLower() == tablename.ToLower())
{
if (row["DATA_TYPE"].ToString().ToLower() != "blob")
{
columns = columns + row["COLUMN_NAME"].ToString() + ",";
}
}
}
// remove trailing ","
if (columns.EndsWith(","))
columns = columns.Remove(columns.Length - 1);
// Fill DataTable when at least one column is found
if (!string.IsNullOrEmpty(columns))
{
// fill DataTable
dt = new DataTable();
string sql = "SELECT " + columns + " FROM " + tablename;
Console.WriteLine("Initializing DataAdapter: " + sql);
using (SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(sql, conn))
{
dataAdapter.Fill(dt);
DatabaseEditDlg Dlg = new DatabaseEditDlg(dt);
Dlg.ShowDialog();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}
}