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...

~~~

2011/04/01

SQL CE én így szeretlek...

Ez zseniális... (egyben tutorial / mesemesemeskete azoknak, akiknek valaha szükségük lesz táblaátnevezésre SQL CE-ben VS2008 alattt...)
Visual Studio 2008-ban, SQL CE-t konfigolva döbbenhetünk rá arra a csodálatos tényre, hogy oly bonyolult műveletek végrehajtására, mint pl... egy tábla ÁTNEVEZÉSE nincs alapból mód. Ugyanis a tábla tulajdonságainál a Name mező ki van szürkítve, csak olvasható, tehát nem tudod átírni, bármennyire is próbálkozol, és még csak elrejtve sincsen a környezetben ilyen funkció. Magyarán mintha a VS2008 nem ismerné az ALTER TABLE NAME c. részt... vagyis inkább az SQL CE nem ismeri ezt.
Mit is tegyél, márpediglen, ha mégis át kell nevezni egy táblát? Ilyenkor jön jól egy kis T-SQL. Na meg egy kis röhögés...
Futtassunk csak egy query-t, névszerint egy sp_rename-t.
sp_rename [réginév], [újnév]
Pl. így
Majd futtatás után rökönyödjünk meg, csalódjunk, essünk pofára, amiért ilyet kapunk:
Igen, jól látod, hibaüzi, hogy Unable to parse query text. Azaz, hogy képtelen értelmezni/lefordítani azt a szájbatekert queryt, tehát nem tudja, mi az az sp_rename... gondolnád te. Viszont ott egy continue gomb...
... ezt kapod, ha rákattintasz. WTF?!!!!! Nyomjunk egy refresht a táblákra...

... na erre varjál gombot. Visual studio 2008, SQL Compact Edition, Micro$oft. Én így szeretlek.

btw, szerinted az normális, hogy egy ilyen "bonyolult" művelethez T-SQL-t kell tudni? ... hány "programozó" cseszett el vajon órákat, hogy mezőnként átmásolt táblákat egy új táblába.... nocomment.
~~~

2010/09/23

Revivespell [Use 1x daily]

Boldog reggeleket!
Finoman fogalmazva is meglehetős rég írtam ide, de most szolgálati közlemény van, úgyhogy annál inkább megjelentetek itt egy-két megjegyzést.
Megj. 1: Szeptembertől én Debrecenben vagyok inkább elérhető, de ez nem jelenti azt, hogy ha hívnátok esetleg sörni, akkor pl. ne tudnék lemenni esetenként... légyszi majd szóljatok, ha lesz valami ilyen eset, hátha tudok csatlakozni.
Megj. 2: A laptopom elhalálódzott, így jelenleg nem igazán van lehetőségem túl sok internetkapcsolatot létesíteni, ezt a bejegyzést is a könyvtárból végzem, az egyetemről :)
Megj. 3: Asszem kurvára változtatnom kell 1-2 dolgon magamon és magam körül... Persze, ez logikus, az ember folyton fejlődjön, de most nem egészen erről van szó. Részleteket nem tudok, és nem is akarok mondani, de majd úgyis megtudja, akiket érint.
Megj. 4: Jó volt a critical mass!!! :)
És igazából itt be is fejezem a szófosást. Örüljetek, ha van minek, és ne feledjétek, hogy mindig van minek. :)
Pöce
~~~

2010/04/29

IM.XML 1

Ez csak egy jegyzet saját magam számára, ill. azoknak akik esetleg belefutnának még ilyen hibaüzenetbe, azoknak tanulságként szolgálhat.
Az cégnél, akiknek dolgozom, lehetősége van minden ügyfélnek arra, hogy XML file-okat egy oldalra feltöltve, a cégtől termékinformációt, rendeléseket, vagy akár számlaadatokat kapjanak meg. Azonban eddig erre semmi átfogó megoldás nem volt, mivel a cég csak az interfészt és a szolgáltatást adta, program nem volt, ami ezt megfelelően ki is használta volna. Azonban a tesztelés, és újabban az egyre több ilyen jellegű felkérés miatt, úgy gondoltam, hogy érdemes lenne csinálni egy kis progit, amivel tudom én magam is tesztelni a rendszer működését.
Így kerültem kapcsolatba azzal, hogy az MSXML 2.4es verzió megkerülésével, C# alapon hogyan is lehetne csinálni web-es feltöltést, és utána válaszfeldolgozást. Nos összerittyentettem gyorsan egy kis felületet, ahol a kedves felhasználó beírja a usn/psw párost, és PNArequestet (készlet és ár információ) tud küldeni, amennyiben tudja a termék sku-ját és mennyiségét.
Magát az XML file-t nem is generálom le, egyszerűen egy stringbe íratom az egészet, amit egy külön osztályban tárolok. Ez nem a legjobb megoldás, mivel korlátos, de tesztelésre pont elegendő.

na de nem ezért írtam blogbejegyzést, hanem maga a feltöltés miatt: elkövettem ugyanis egy pár hibát.

HttpWebRequest xmlRequest = (HttpWebRequest)WebRequest.Create("https://im-xml.com/receiveXML.ASP"); 

Ez még jónak tűnik, de a későbbiekben meglátjuk, hogy helytelen...

xmlRequest.Method = "POST"; 
xmlRequest.ContentType = "text/xml"; 
byte[] xmlByteStream = Encoding.UTF8.GetBytes(rtbXMLText.Text);
Stream xmlStream = xmlRequest.GetRequestStream();
xmlStream.Write(xmlByteStream, 0, xmlByteStream.Length);
xmlStream.Close();

Ez meg maga a küldésért felelős rész. Beállítom, hogy POST típusú tranzakciót, azaz küldést követnék el, méghozzá "text/xml" típusú tartalommal, majd a kis xml file-ocskám szövegét UTF8as kódolású byte tömbbé konvertálom. Miért ezzé? Mert ezt lehet megadni egy Streamnek bemenetnek, amivel majd feltöltöm a webhelyre :) (persze ekkor még jóhiszeműen gondoltam, hogy így fel lehet... :-)) végül lezárom a streamet és kész.

Hogy hol hibádzott a dolog? több helyen is.
A hibaüzenet az volt, hogy "Cannot send a content-body with this verb-type". És a stream létrehozásánál akadt meg. Ez a hibaüzi elvileg olyankor jön elő, ha mondjuk GET-tel szeretnél küldeni, viszont itt a Method jól láthatóan POST volt. Hol van tehát a hiba? ...
Kutakodás, és nem kevés baráti segítség (Kösz Boo :-)) árán végül sikerült megoldani a helyzetet. A hiba kétrétű volt:
  1. HttpWebRequest nem XML küldésre való. Sima WebRequestet kell alkalmazni ilyenkor
  2. A kódolási mizéria elkerülése érdekében a direkt Stream helyett lehet StreamWritert is használni - sokkal egyszerűbb, kezelhetőbb. 
A fenti kódrészletet módosítva erre:
string uri = "https://im-xml.com/receiveXML.asp";
WebRequest xmlreq = WebRequest.Create(uri);
xmlreq.Method = "POST";
xmlreq.ContentType = "text/xml";
StreamWriter srw = new StreamWriter(xmlreq.GetRequestStream());
srw.WriteLine(xth.GetXMLText());
srw.Close();

ahol az xth.GetXMLTest() csak az XML stringet adja vissza. A feltöltés így már rendben lefut, a szerver válaszol, egy egyszerű StreamReaderes kis játékkal ki is lehet olvasni:
WebResponse xmlrsp = xmlreq.GetResponse();
StreamReader srr = new StreamReader(xmlrsp.GetResponseStream());
string fullresponse = srr.ReadToEnd();


Most már csak a kedves felhasználó jogait, akinek a nevében küldöm kell megnézzem, hogy a szerverről ne egy hibaüzi jöjjön vissza... :-)

Tanulságul szolgáljon mindazoknak, akik beleütköznek ilyen hibába esetleg, és hogy használj StreamReadert/Writert sima Stream helyett.

~~~

2010/03/15

Elszartam...

Tartozom mindenkinek egy bocsánatkéréssel.
Aki tudja miért, tudja.
Aki nem, annak nem is kell...

Tényleg ne haragudjatok :-(
~~~

2010/03/03

Szóval az ígért linuxos átmentés

No történetem a következő:
Egészen tavaly május óta én a Windows 7 RC (Build 7100)-at használtam, ill. volt a gépen egy Kubuntu 9.04 is, többek között azért, mert jó ha van más is a gépen, ha betojja magát a windows meg egyébként is jó az (bioinfo 4esem a bizonyíték rá, hogy jó ha van...)
Na de ugye kijött a Win7 full azóta, és jó lett volna arra frissíteni, mert a szerencsétlen 7100es meghalódik ugye márciustól, én meg nem akartam bereszkírozni.
Nagy okosan amit tudtam dvd-re, amit nem, azt a linuxra átmásoltam a win7ről, majd jöhetett a Nagy Radír. A gond az, hogy az új win7 lazán kiírtotta a GRUB-ot, és így a gép elindulásakor már nem ajánlotta nekem oly kedvesen fel, hogy Windows, vagy Kubuntu, hanem lazán jött a kis ablakozó. A linuxom meg mintha ott sem lett volna...
Megoldásra először azt gondoltam, hogy az lenne a jó megoldás, ha visszahoznám a grubot. Igen ám, de a win7 az MBR-be írta be a saját indítóját, így erre így mód nem volt, hiába próbáltam live-cdről áttenni, ill. visszaprogramoztatni a live cd-s konsole-ról a grubot, hogy újra az menjen oda, nem jártam sikerrel. (google a barátod a keresésben, hogy kell ilyet csinálni).
Második megoldásom (miután ez és a live cd-ről vinyó elérés is zátonyra futott), hogy tulképp nekem nem fontos a kubuntu, csak a file-ok legyenek meg, amit oda mentettem, aztán max újra felrakom majd a linuxot ha nagyon kell. Meglepően sok progi van, ami képes arra, hogy windows alól kezeld a linuxos file-rendszereket (google: ext4 read under windows 7), de sajnos a legsikeresebb megoldás itt is csak az volt, ami a könyvtárszerkezetet be bírta olvasni, de magukat a file-okat már nem ...
Ekkor gondoltam egy nagyot. Windows 7 alatt betettem az ubuntu live cd-jét, és onnan, a windows alá amolyan "majdnemvirtualpc" módra felraktam egy - a windows alól futtatható kubuntut. Erre maga a kubuntu telepítő cd ad lehetőséget, van egy kis progi rá, a wubi. Bővebb infó róla, és a telepítésről itt:
http://wubi-installer.org/faq.php
Ezzel csináltam magamnak egy kellemes 10 gigás kis linuxot a gépemre. Legközelebb amikor újraindult a gép, kijött a kis menü, hogy windows 7 vagy kubuntu kell-e. Ráböktem hogy linux... és szezám tágulj... látta a másik linux partíciót! :-) Innen indult a copy paste-s rész, gyakorlatilag egy hordozható vinyóra kimásoltam a file-okat (mivel a windowsos partíciót viszont nem látta... mountolni meg lusta voltam) , majd újraindítva windowsba a gépet visszamásoltam és voilá!
A 10 Gigás linux bármikor eltávolítható, simán a windows meghajtójára file szinten másolja fel egy könyvtárba a file-jait (csinál oda gyak.lag egy virtuális driveként használható file-t és kész)
Én ezt mindenesetre bizt. ami bizt. nem töröltem le.

És meglett minden ... :)
~~~

2010/02/24

Géphiány

No hát újratelepítettem a gépemet nagy okosan... mert hogy ugye le fog járni a windows próbaverzióm. Ójee...
Eredmény:
A gépemen van 1 linux, arra archiváltam ki kb a kis apróságokat. Na az a meghajtóm kompletten eltűnt. Az új win 7, ami legális a bmf MSDNAA oldaláról lett leszedve... na az meg nem hajlandó aktiválni ^^ ergó 30 napig használhatom.
Azt hiszem mérges vagyok. Azt hiszem joggal...
am nem baj legalább kihasználom h van blogom :D

no pöce, én telepítgetek...
~~~