2011/06/01

Csak egy kis gyors SQL CE megint...

Legutóbbi bejegyzésemben földig leoltottam kb a zsírparaszt visual studiot és az sql ce-t.
Azóta sikerült lehetőleg még jobban elmélyednem a témában, és bár van benne egy-két nagyon hiányzó és fájó pont, azért bizonyos dolgokban végül egész pofás kis megoldásokkal elő lehet állni, csak tudni kell hogy.
Ennek illusztrálására most álljon itt két kis kódrészlet:

public static DataTable KeresCikket(string parameter)
        {
            CikkTableAdapter cta = new CikkTableAdapter();
            DSCikk.CikkDataTable cdt = cta.GetData();
            DataRow[] cikkrows = cdt.Select("Ean like '%" + parameter + "%' OR Ean like '%" + parameter + "%' OR Megnev like '%" + parameter + "%'");
            DataTable result = new DataTable();
            result = cdt.Clone();
            foreach (DataRow cikkrow in cikkrows)
            {
                result.ImportRow(cikkrow);
            }
            return result;
        }

ÉS!:


public static DataTable KeresCikket(string parameter)
        {
            DSCikk.CikkDataTable cdt = DataAdapters.cta.GetDataByLikeParam(parameter);
            return cdt;
        }


Na kitaláljátok-e... igen. ez a kettő bizony kőugyanazt csinálja. Utóbbi megoldásban egyedül egy amúgy szépen kattintgatással is összerakható SQL query fut... Jó dolog így végignézni, hogy mit disznólkodtam én régebben a projektekben, nagyon sokat lehet szépíteni a kódon. Viszont joggal tehetjük fel a kérdést, hogy teljesítményben ez hogyan jelenik meg. Ezen a ponton lepődtem én meg: az utóbbi metódus kb 3szor gyorsabban le is fut azonos eredményt hozva... most keresem, hol malackodtam még... NEMFÉLREÉRT!

...
Na mondjuk az igaz, hogy vicces megoldást találtam a bluetoothon keresztüli fájlok küldésére (szekvenciálisan). Van egy nagyon jópofa kis keretrendszer az ilyen dolgok hegesztésére: http://32feet.net/ oldalon találhattok hozzá egy egész aktív fórumot, meg sok segítséget. Ráadásul ingyenes.
Igaz, néha kicsit szenvedni kell, mert az oké, hogy addig nem lehet a következő file-t elküldeni, amíg az előző át nem ért, mert a kapcsolaton addig csak egy "BadRequest" üzenet jön vissza, de valamiért nálam ez itt be is ragadt szépen rendesen. Visszafejtettem: a program bár a kapcsolatot lezárta, de a socketet nem szabadította fel, így az beragadt, és az első file leküldése után csak bambult mint GDF-es villanymérnök az oszcilloszkópra. Az, hogy implicit várakozást adunk meg, nem jó megoldás, mert nem tudjuk mikor ér át a file. Az meg milyen paraszt már, ha érted beadod neki hogy várjá fél órát azt addig biztos átmegy, utána mehet a többi. A socketet felszabadítani nem tudtam sajnos, mert mindenhol valami nagy piros pöttyös exceptiont dob a kis gané. Megoldás?
...
...
elment rá két napom, de megmutatom okulásul...:
file küldése után [repeat until nem sikerül a következő file küldése]:

AppSettings.BTRadio.Mode = InTheHand.Net.Bluetooth.RadioMode.PowerOff;
Thread.Sleep(5000);
AppSettings.BTRadio.Mode = InTheHand.Net.Bluetooth.RadioMode.Discoverable;

Igen. Jól látod. Kikapcsolom a kicseszett kékfogat az egész telefonon, várok 5 mp-t és visszakapcsolom.... :D Na így próbálja meg foglaltba tartani a socketet, hogy "driverből" kilövöm alóla az egészet...

~~~