👋 Nový obsah na borekb.cz

Info Tento blog je v "read-only módu" a nový obsah již nebude přibývat. O vývoji píšu na DevBlog.

.NET

Jak zrychlit libovolnou .NET aplikaci

Pokud chcete zrychlit libovolnou .NET aplikaci na svém počítači (a kdo by nechtěl), můžete zkusit do souboru NázevProgramu­.exe.config do sekce <configuration> vložit

<startup>
  <requiredRuntime version="v2.0.50727" />
</startup>

To donutí aplikaci použít .NET Framework 2.0, který přináší uričtá výkonnostní zlepšení. Na druhou stranu se může stát, že aplikace není pro .NET 2.0 testována a některé věci mohou zlobit. Všechno má své pro a proti…

Zařazeno do kategorií |

Validace cesty k souboru

Dělám aplikaci, kde uživatel zadává cestu k jednomu nebo více souborům a současně může v názvu použít * jako wildcard character. Potřeboval jsem nějakým způsobem validovat, že uživatel zadává smysluplný řetězec ve formátu „C:\cesta\k\sou­boru.txt;C:\ji­na\cesta\s*mas­kou.txt“. Jak na to?

.NET žádné extra metody na validaci cest nemá. File.Exists() vrátí false nejen při neplatné cestě, ale i tehdy, když je cesta syntakticky zcela v pořádku, jen neexistuje cílový soubor. Tudy proto cesta nevede.

Pro validaci jednoho souboru lze úspěšně použít malou fintu využívající mechanismus výjimek:

Zařazeno do kategorií |

Databinding u ovládacího prvku ListView

ListView je komponentou, která je známá třeba z průzkumníka Windows. Umožňuje zobrazit obsah v podobě ikon nebo seznamu a poměrně dobře se hodí na zobrazení read-only tabulkových dat (asi lépe než DataGrid nebo DataGridView). Nepříjemností je, že ListView neobsahuje podporu databindingu, takže je pro zobrazení dat potřeba napsat trochu kódu, na což my, zhýčkaní vývojáři .NETu, nejsme zvyklí :) .

Pokud s ListView pracujete pouze občas, asi bude nejrychlejší splodit pár řádků kódu a data naplnit ručně nějakou iterací přes řádky datového zdroje. Pokud jste však nadšenými příznivci prvku ListView a plánujete ho používat často, doporučuji přečíst článek Creating a Data Bound ListView Control. Ten obsahuje postup, kterak pomocí dědičnosti vytvořit vlastní prvek obsahující všechny vymoženosti ListView rozšířené o možnost velmi jednoduchého navázání na datový zdroj.

Zařazeno do kategorií |

QueryADataSet - SQL dotazy pro DataSet

DataSet je zajímavým objektem technologie ADO.NET. Jedná se o in-memory databázi, která může obsahovat tabulky, relace, omezení, pohledy apod. Řádky v tabulce je možno třídit a filtrovat, lze vyhledávat řádky podle hodnoty primárního klíče nebo provádět další kousky pomocí metody Compute(), plnohodnotý SQL jazyk však k dispozici není. Není tak snadné provádět subdotazy, různé joiny apod.

Alespoň částečným řešením je knihovna QueryADataSet, která přináší implementaci podmnožiny jazyka SQL ke snadnému použití v DataSetech. Zde je příklad z domovské stránky produktu:

Zařazeno do kategorií |

Nové ikony ve Visual Studiu 2005

Zhruba před rokem Soma na svém blogu oznámil, že nové Visual Studio bude obsahovat aktualizovanou sadu ikon pro použití ve vlastních programech zdarma. Dneska jsem se chtěl na tyto ikony podívat a ejhle – nikde jsem je nemohl najít. Pokud máte stejný problém, hledejte v adresáři C:\Program Files\Microsoft Visual Studio 8\Common7\VS2005I­mageLibrary – zde leží soubor VS2005ImageLi­brary.zip, který všechny ikony v několika formátech obsahuje.

Zařazeno do kategorií |

Nasazení ASP.NET aplikace využívající SQL Server Express na běžném hostingu

Až doposud jsem si myslel, že nasazení ASP.NET aplikací je snadnou až triviální záležitostí. Podle všech reklamních sloganů i logiky architektury ASP.NET by měl fungovat zázrak jménem xcopy deployment, zvlášť když nový SQL Server 2005 umožňuje databáze jednoduše nahrát jako jeden nebo několik MDF souborů. Jak ale vypadala realita, když jsem někde na netu potřeboval zprovoznit ASP.NET aplikaci do školy?

Začal jsem na svém hostingu, kde ASP.NET a SQL Server 2005 Express běží někdy od listopadu. Jakýkoliv pokus o práci s databází však končil chybou „Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed.“ Asi hodinu jsem se problém snažil řešit s pracovníkem podpory, na webu jsem pročetl mnoho článků a diskuzních fór, ale vše bez úspěchu (mezi nejlepší zdroje patřil článek Tomáše Petříčka Nejčastější chybové hlášky SQL Express 2005 a diskuze na MSDN forums). Chyba je kdoví kde – možná jsou na nějaký soubor špatně nastavená práva, možná by pomohla reinstalace, ale jisté bylo jen to, že na mém hostingu aplikaci zřejmě nezprovozním.

Zařazeno do kategorií |

There is already an open DataReader associated with this Command which must be closed first

Představte si následující kód, ve kterém je využíváno jediné připojení k databázi (detaily jsou vynechány):

reader = command.ExecuteReader();
while (reader.Read()) {
  ...
  updateCommand.ExecuteNonQuery();
  ...
}

Tento kód skončí výjimkou „There is already an open DataReader associated with this Command which must be closed first“.

První věcí je, že popis výjimky moc vývojáři nepomůže. Zpráva totiž napovídá, že je s jedním Commandem asociováno víc DataReaderů, což ale na první pohled není pravda – jediný otevřený DataReader je asociován s objektem command, který není totožný s objektem updateCommand. Navíc vykonáváme ExecuteNonQuery a žádného DataReadera nevytváříme. Pro začátečníka mého typu je tedy hláška zcela k ničemu, naopak je spíše matoucí. (V souvislosti s tím doporučuji shlédnout skvělý track PRS223: Getting Users to Fall in Love with Your Software: 2005 Editionvideí z PDC 05, kde se na téma zbytečných hlášek pobavíte a poučíte zároveň.) Jen pro úplnost poznamenám, že hláška svůj smysl má, protože oba objekty command jsou propojeny přes objekt Connection a DataReader se vytváří i při ExecuteNonQuery, protože tento příkaz vrací počet ovlivněných řádků. Ale to je celkem jedno, hláška prostě dobrá není.

Zařazeno do kategorií |

Jak zrychlit start .NET aplikací

Seznam užitečných tipů a triků pro zrychlení startu vyvíjené .NET aplikace by neměl uniknout nikomu, kdo to s použitelností vlastního programu myslí vážně. Rychlý start je jedna ze základních věcí, která může uživatelům velmi zpříjemnit život.

Zařazeno do kategorií |

Jak přidat řádek pomocí GridView

GridView je mocný ovládací prvek ASP.NET 2.0. Prakticky bez nutnosti psaní kódu umí natáhnout data z databáze, třídit je, stránkovat, editovat nebo mazat. Bohužel je ale neumí nijak jednoduše přidávat – k tomu účelu slouží prvek DetailsView. Přesto však existuje postup, který umožňuje řádky přidávat i přes prvek GridView.

Ačkoliv tato možnost pravděpodobně zajímá mnoho ASP.NET vývojářů, na webu moc konkrétních informací nalézt nelze, a když už jsou, týkají se spíše programového přidávání řádků. Tento článek se tedy snaží zaplnit určitou mezeru, když ukazuje konkrétní vizuální postup ve Visual Studiu.

Zařazeno do kategorií |

IronPython na MSDN TV

Jak jsem před nedávnem psal, vydání první bety IronPythonu mě potěšilo, protože Python bude příští jazyk, který bych se rád naučil. Doposud jsem Python na platformě .NET pouze vítal, ale po shlédnutí epizody MSDN TV s názvem IronPython: Python on the .NET Framework jsem se pro celou věc doslova nadchnul. Jim Hugunin s IronPythonem předvádí úžasn

Zařazeno do kategorií |
Syndikovat obsah

Komentáře jsou uzavřeny (blog je v read-only módu). Pokud mě chcete kontaktovat, můžete mailem.