Vývoj tohoto program trval asi 10h rozložených do 2 dnů, přičemž tu větší část jsem udělal dneska. Včera jsem “odřízl” starší formulář který vypadal takto:
Prostě jste jen v roletce vybrali dostupné databáze a zadali sql dotaz a pak pomocí klávesových zkratek které jsou pod nabídkou “Aplikace” jste vykonali dotaz ExecuteNonQuery(ctrl+r), ExecuteScalar(ctrl+s) nebo ExecuteDataTable(ctrl+d). Toto mělo nevýhodu že pokud jsem měl buňky s rozsáhlým obsahem, tak jste se většinou všechno potřebné nedozvěděli:
Někdy se to dalo obejít že jste si zvolili na vypsání pouze konkrétní sloupce.
To, že jsem nenašel žádný schopný SqLite manager mě včera vedlo k vlastnímu. Udělal jsem tedy něco takového:
Zde se opět z roletky vybrala DB, z té se mi pak do druhé roletky načetli dostupné tabulky v dané DB a po vybrání tabulky se mi načetli dostupné sloupce v té tabulce. Pomocí zaškrtávání jsem si mohl ovládat které sloupce chci vidět a které ne – velmi pohodlně a efektivně pro analýzu když máte tak slabou paměť jako já. To bylo pro včerejšek s tímto programem všechno.
Dneska jsem já pokračoval na Importeru a Exporteru dat. Export byl jednoduchý, prostě jsem to nahazel do textáku jako hodnota1|hodnota2|… Horší to bylo s importem. Můj první úkol byl vytvořit formalář, kde bych si zvolil sloupce které chci nechat a do jakých sloupců je chci převést. Tento formulář má stále velké mezery co se týče validace – je možné do něj napsat a naklikat cokoliv a program když ty hodnoty budou chybné havaruje až později. Form po vytvoření vypadal nějak takto(chybí zde ještě poslední sloupec “DefaultValue” – tedy hodnota která se uloží když na sloupec v nové tabulce neexistuje namapování na některý předchozí sloupec):
Proto jsem toto měl docela rychle splněno a byl čas jít na skutečné napojení hodnot ve vyexportovaném souboru do nové DB. Zatím co se mi hledá můj zašantročený highlighter, protože bych vám tu rád posloužil také kódem, vám tu dám obrázek že import do nové tabulky byl úspěšný:
Aaa, už jsem jej našel, kdo by to řekl že bude ve složce WebsitesProjects takže tu máte metodu tak jak teď je bez editu, která vezme soubor(zde se mi automaticky načítá jiný protože jsem to ladil) a zobrazí formulář výše a pak s tím dělá různé kouzla, aby ve finále to mohl jedinou metodou vložit do DB.
PS: Hlavně ale že to funguje.
private void toolStripButton2_Click(object sender, EventArgs e)
{
string dd = null;
//dd = DW.SelectOfFile(AppFolders.Output);
dd = @"F:\Mona\sunamo\SunamoSqliteManager\Output\BibleServer.db3 - News - 17.7.2012 134752.sqlitem";
if (dd != null)
{
List<Dictionary<string,string>> seznamSloupcu = new List<Dictionary<string,string>>();
string[] hlavicka = null;
string[][] d = SF.GetAllElementsFileAdvanced(dd, out hlavicka);
List<string[]> oldRows = new List<string[]>(d.Length -
1);
//-Procházím řádky
for (int i = 0; i < d.Length; i++)
{
string[] radek = d[i];
if (radek.Length != hlavicka.Length)
{
throw new Exception("");
}
else
{
Dictionary<string, string> ddg = new Dictionary<string, string> ();
for (int o = 0; o < hlavicka.Length; o++)
{
ddg.Add(hlavicka[o], radek[o]);
}
seznamSloupcu.Add(ddg);
oldRows.Add(radek);
}
}
ImportToTable import = new ImportToTable(StoredProceduresI.ci.SelectColumnsNamesOfTable(actualTable), hlavicka, oldRows);
if (import.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
BindingList<EntityTableRow> w = import.entity;
List<string> nazvySloupcuOld = new List<string>();
List<string> nazvySloupcuNew2 = new List<string>();
StringBuilder nazvySloupcuNew = new StringBuilder();
List<TypeAffinity> affinitys = new List<TypeAffinity>();
List<string> vychoziHodnoty = new List<string>();
for (int i = 0; i < w.Count; i++)
{
foreach (EntityTableRow item2 in w)
{
if (i + 1 == item2.Order)
{
EntityTableRow item = w[i];
if (item.Keep)
{
nazvySloupcuOld.Add(item.OldName);
nazvySloupcuNew.Append(item.NewName + ",");
affinitys.Add(item.DataTypeOld);
nazvySloupcuNew2.Add(item.NewName);
vychoziHodnoty.Add(item.DefaultValue);
}
break;
}
}
}
for (int u = 0; u < d.Length; u++)
{
//try
//{
object[] o = new object[nazvySloupcuNew2.Count];
for (int i = 0; i < o.Length; i++)
{
string puvodniNazevSloupce = nazvySloupcuNew2[i];
if (puvodniNazevSloupce.Trim() == "")
{
continue;
}
//int nt = nazvySloupcuOld.IndexOf(puvodniNazevSloupce);
if (seznamSloupcu[u].ContainsKey(puvodniNazevSloupce))
{
o[i] = ReturnCorrectType(seznamSloupcu[u][puvodniNazevSloupce], affinitys[i]);
}
else
{
o[i] = ReturnCorrectType(vychoziHodnoty[i], affinitys[i]);
}
}
StoredProceduresI.ci.InsertToTable(actualTable, "(" + nazvySloupcuNew.ToString().TrimEnd(',') + ")", o);
//
}
//catch (Exception)
//{
// throw;
//
}
}
}
}
}



