Vyvoj tohoto program trval asi 10h rozlozenych do 2 dnu, pricemz tu vetsi cast jsem udelal dneska. Vcera jsem “odrizl” starsi formular ktery vypadal takto:
Proste jste jen v roletce vybrali dostupne databaze a zadali sql dotaz a pak pomoci klavesovych zkratek ktere jsou pod nabidkou “Aplikace” jste vykonali dotaz ExecuteNonQuery(ctrl+r), ExecuteScalar(ctrl+s) nebo ExecuteDataTable(ctrl+d). Toto melo nevyhodu ze pokud jsem mel bunky s rozsahlym obsahem, tak jste se vetsinou vsechno potrebne nedozvedeli:
Nekdy se to dalo obejit ze jste si zvolili na vypsani pouze konkretni sloupce.
To, ze jsem nenasel zadny schopny SqLite manager me vcera vedlo k vlastnimu. Udelal jsem tedy neco takoveho:
Zde se opet z roletky vybrala DB, z te se mi pak do druhe roletky nacetli dostupne tabulky v dane DB a po vybrani tabulky se mi nacetli dostupne sloupce v te tabulce. Pomoci zaskrtavani jsem si mohl ovladat ktere sloupce chci videt a ktere ne – velmi pohodlne a efektivni pro analyzu kdyz mate tak slabou pamet jako ja. To bylo pro vcerejsek s timto programem vsechno.
Dneska jsem ja pokracoval na Importeru a Exporteru dat. Export byl jednoduchy, proste jsem to nahazel do textaku jako hodnota1|hodnota2|… Horsi to bylo s importem. Muj prvni ukol byl vytvorit formalar, kde bych si zvolil sloupce ktere chci nechat a do jakych sloupcu je chci prevest. Tento formular ma stale velke mezery co se tyce validace – je mozne do nej napsat a naklikat cokoliv a program kdyz ty hodnoty budou chybne havaruje az pozdeji. Form po vytvoreni vypadal nejak takto(chybi zde jeste posledni sloupec “DefaultValue” – tedy hodnota ktera se ulozi kdyz na sloupec v nove tabulce neexistuje namapovani na nektery predchozi sloupec):
Proto jsem toto mel docela rychle splneno a byl cas jit na skutecne napojeni hodnot ve vyexportovanem souboru do nove DB. Zatim co se mi hleda muj zasantroceny highlighter, protoze bych vam tu rad poslouzil take kodem, vam tu dam obrazek ze import do nove tabulky byl uspesny:
Aaa, uz jsem jej nasel, kdo by to rekl ze bude ve slozce WebsitesProjects takze tu mate metodu tak jak ted je bez editu, ktera vezme soubor(zde se mi automaticky nacita jiny protoze jsem to ladil) a zobrazi formular vyse a pak s tim dela ruzne kouzla, aby ve finale to mohl jedinou metodou vlozit do DB.
PS: Hlavne ale ze to funguje.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
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); //-Prochazim radky 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; // } } } } } |