<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblog.rebex.cz/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Weblog @ Rebex.cz :: Honza Šotola</title><link>http://weblog.rebex.cz/blogs/honzas/default.aspx</link><description>nepravidelné poznámky .NET vývojáře</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>Číslování týdnů v .NETu</title><link>http://weblog.rebex.cz/blogs/honzas/archive/2010/01/27/slov-n-t-dn-v-netu.aspx</link><pubDate>Wed, 27 Jan 2010 08:48:00 GMT</pubDate><guid isPermaLink="false">456b44c7-fdf6-4664-b66b-585568c60ca2:3263</guid><dc:creator>honzas</dc:creator><slash:comments>0</slash:comments><comments>http://weblog.rebex.cz/blogs/honzas/comments/3263.aspx</comments><wfw:commentRss>http://weblog.rebex.cz/blogs/honzas/commentrss.aspx?PostID=3263</wfw:commentRss><description>&lt;P&gt;V letošním roce je (opět) patrné, že .NET používá jiné číslování týdnů, než je standardizováno v České republice.&lt;BR&gt;Upozornil nás na to klient, jehož aplikace letos používala čísla týdnů o jedno vyšší, než podle papírového kalendáře, přestože vloni fungovala správně.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Jak to má být:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;V ČR se pro reprezentaci času používá (stejně jako ve většine Evropy) norma &lt;A href="http://cs.wikipedia.org/wiki/T%C3%BDden#.C4.8C.C3.ADslo_t.C3.BDdne"&gt;ISO 8601&lt;/A&gt; (v ČR převzatá jako &lt;A href="http://csnonline.unmz.cz/Detailnormy.aspx?k=73912"&gt;ČSN ISO 8601&lt;/A&gt;) a podle té je &lt;STRONG&gt;první týden v roce takový, který obsahuje 4.&amp;nbsp;leden&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Jak to je:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Číslo týdne pro zvolené &lt;EM&gt;datum &lt;/EM&gt;se v .NETu získá metodou &lt;BR&gt;&lt;EM&gt;Calendar.GetWeekOfYear(datum, weekRule, firstDayOfWeek)&lt;/EM&gt;.&lt;BR&gt;Instanci třídy &lt;EM&gt;Calendar&lt;/EM&gt; získáme např. z &lt;EM&gt;CultureInfo.CurrentCulture.Calendar&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;Problém je právě v tom, odkud dodat hodnotu parametrů &lt;EM&gt;weekRule &lt;/EM&gt;(pravidlo pro číslování týdnů). Rozumné by bylo převzít ho z aktuálního regionálního nastavení, tedy z &lt;BR&gt;&lt;EM&gt;CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule&lt;/EM&gt;.&lt;BR&gt;Bohužel, ta pro českou kulturu (cs-CZ) vrací hodnotu &lt;EM&gt;FirstDay&lt;/EM&gt; (tedy číslování se začíná v týdnu, který obsahuje první leden).&lt;/P&gt;
&lt;P&gt;Tedy zápis &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;CODE&gt;CultureInto.CurrentCulture.Calendar.GetWeekOfYear(&lt;BR&gt;&amp;nbsp;&amp;nbsp;datum,&lt;BR&gt;&amp;nbsp;&amp;nbsp;CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule,&lt;BR&gt;&amp;nbsp;&amp;nbsp;CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek).&lt;/CODE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;nevrátí číslo týdne, platné v ČR.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Jak to řešit:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Natvrdo (resp. po ověření, že aktuální CultureInfo je české) používat hodnotu &lt;EM&gt;CalendarWeekRule.FirstFourDayWeek&lt;/EM&gt;&lt;STRONG&gt;.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Správné číslo týdne tedy vrátí výraz&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;CODE&gt;CultureInto.CurrentCulture.Calendar.GetWeekOfYear(&lt;BR&gt;&amp;nbsp;&amp;nbsp;datum,&lt;BR&gt;&amp;nbsp;&amp;nbsp;CalendarWeekRule.FirstFourDayWeek,&lt;BR&gt;&amp;nbsp;&amp;nbsp;CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)&lt;/CODE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Poznámka:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Podobně se chová (ve výchozím nastavení) i český MS Outlook 2007.&lt;BR&gt;I zde lze ale přepnout na pravidlo číslování týdnů přes&lt;BR&gt;&lt;EM&gt;Nástroje/Možnosti/Možnosti kalendáře/První týden roku: "První týden se 4 dny"&lt;BR&gt;&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://weblog.rebex.cz/aggbug.aspx?PostID=3263" width="1" height="1"&gt;</description></item><item><title>Jak nalepit desetinná čísla z SQL Server Management Studia do Excelu?</title><link>http://weblog.rebex.cz/blogs/honzas/archive/2010/01/12/jak-nalepit-desetinn-sla-z-sql-server-management-studia-do-excelu.aspx</link><pubDate>Tue, 12 Jan 2010 14:12:00 GMT</pubDate><guid isPermaLink="false">456b44c7-fdf6-4664-b66b-585568c60ca2:3260</guid><dc:creator>honzas</dc:creator><slash:comments>0</slash:comments><comments>http://weblog.rebex.cz/blogs/honzas/comments/3260.aspx</comments><wfw:commentRss>http://weblog.rebex.cz/blogs/honzas/commentrss.aspx?PostID=3260</wfw:commentRss><description>&lt;P&gt;Pokud pracujete na počítači s českým regional settings a potřebujete výsledek SQL dotazu z gridu v SQL Server Management Studiu (SSMS) přenést přes clipboard do Excelu, narazíte na to, že SSMS používá u desetinných čísel (datového typu &lt;EM&gt;Decimal&lt;/EM&gt;) natvrdo desetinnou tečku (kdežto Excel vyžaduje desetinnou čárku). Takže se čísla do Excelu přenseou jako text.&lt;/P&gt;
&lt;P&gt;Microsot to na&amp;nbsp;&lt;A title="Microsoft SQL Server Management Studio doesn't get OS regional Setting " href="http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=458416"&gt;svém fóru&lt;/A&gt;&amp;nbsp;uznal jako bug&amp;nbsp;a v tomtéž threadu lze najít i workaround - stačí přetypovat čísla na &lt;EM&gt;Float&lt;/EM&gt; a SSMS už použije desetinnou čárku.&lt;/P&gt;&lt;img src="http://weblog.rebex.cz/aggbug.aspx?PostID=3260" width="1" height="1"&gt;</description><category domain="http://weblog.rebex.cz/blogs/honzas/archive/tags/SQL/default.aspx">SQL</category><category domain="http://weblog.rebex.cz/blogs/honzas/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category></item><item><title>Ukončení ASPX stránky pomocí Response.End není ideální</title><link>http://weblog.rebex.cz/blogs/honzas/archive/2009/11/20/ukon-en-aspx-str-nky-pomoc-response-end-nen-ide-ln.aspx</link><pubDate>Fri, 20 Nov 2009 12:36:00 GMT</pubDate><guid isPermaLink="false">456b44c7-fdf6-4664-b66b-585568c60ca2:3236</guid><dc:creator>honzas</dc:creator><slash:comments>0</slash:comments><comments>http://weblog.rebex.cz/blogs/honzas/comments/3236.aspx</comments><wfw:commentRss>http://weblog.rebex.cz/blogs/honzas/commentrss.aspx?PostID=3236</wfw:commentRss><description>&lt;P&gt;&lt;EM&gt;Možná objevuji Ameriku, ale přinejmenším vývojářům v Rebexu doporučuji tento článek přečíst a začít se jím řídit.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Response.End&lt;/STRONG&gt; jsem dlouho nepotřeboval používat (kromě ukončování stránek při ladění) a setkávám se s ním teprve v poslední době, kdy jsme si navykli exportovat data z ASPX stránek dle následujícího scénáře:&lt;BR&gt;(scénář je&amp;nbsp;převzat&amp;nbsp;přímo z jendoho &lt;A title="DevExpress AspxPivotGridExporter" href="http://demos.devexpress.com/ASPxPivotGridDemos/Features/Export.aspx" target=_blank&gt;dema k DevExpress PivotGridu&lt;/A&gt;)&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;CODE&gt;MemoryStream vystup = ZiskejVystupniData();&lt;BR&gt;Response.Clear();&lt;BR&gt;//...nastavení Response HTTP headeru...&lt;BR&gt;Response.BinaryWrite(vystup.GetBuffer);&lt;BR&gt;Response.End();&lt;/CODE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Pokud na dané stránce explicitně odchytáváte výjimky, zjistíte, že hází &lt;STRONG&gt;ThreadAbortException&lt;/STRONG&gt;&lt;BR&gt;(pokud ale výjimku neodchytáváte, stránka nespadne a v vše funguje bez viditelných problémů).&lt;/P&gt;
&lt;P align=left&gt;&lt;A title="ThreadAbortException Occurs If You Use Response.End" href="http://support.microsoft.com/kb/312629" target=_blank&gt;Článek v MSDN bázi znalostí&lt;/A&gt; doporučuje namísto &lt;STRONG&gt;Response.End&lt;/STRONG&gt; použít&lt;BR&gt;&lt;STRONG&gt;HttpContext.Current.ApplicationInstance.CompleteRequest&lt;/STRONG&gt;.&lt;BR&gt;To obvykle zafunguje, dosud s tím nemám žádné negativní zkušenosti a doporučuji tento způsob preferovat.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Interní poznámka pro vývojáře v Rebexu:&lt;BR&gt;Ukončování stránek pomocí &lt;STRONG&gt;HttpContext.Current.ApplicationInstance.CompleteRequest&lt;/STRONG&gt; bohužel nezafunguje v starých projektech, kde se používá UcPage.&lt;BR&gt;V takových situacích doporučuji odchytávat při volání &lt;STRONG&gt;Response.End&lt;/STRONG&gt;u výjimku &lt;STRONG&gt;ThreadAbortException &lt;/STRONG&gt;a zahazovat ji.&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://weblog.rebex.cz/aggbug.aspx?PostID=3236" width="1" height="1"&gt;</description><category domain="http://weblog.rebex.cz/blogs/honzas/archive/tags/DevExpress/default.aspx">DevExpress</category><category domain="http://weblog.rebex.cz/blogs/honzas/archive/tags/ASPX/default.aspx">ASPX</category></item><item><title>Jak přinutit .NET aplikaci běžet v 32bit režimu</title><link>http://weblog.rebex.cz/blogs/honzas/archive/2009/10/29/jak-p-inutit-net-aplikaci-b-et-v-32bit-re-imu.aspx</link><pubDate>Thu, 29 Oct 2009 11:28:00 GMT</pubDate><guid isPermaLink="false">456b44c7-fdf6-4664-b66b-585568c60ca2:3234</guid><dc:creator>honzas</dc:creator><slash:comments>0</slash:comments><comments>http://weblog.rebex.cz/blogs/honzas/comments/3234.aspx</comments><wfw:commentRss>http://weblog.rebex.cz/blogs/honzas/commentrss.aspx?PostID=3234</wfw:commentRss><description>&lt;P&gt;Občas se stane, že aplikace v .NETu referencuje jinou .DLL, která pracuje jen v 32bit režimu.&lt;BR&gt;Příkladem je např. MS Jet Engine pro práci s Access databází či SqlServerCe.dll pro přístup do SQL Server Compact databází.&lt;/P&gt;
&lt;P&gt;Vše funguje dobře, dokud aplikaci nespustíte na počítači s 64bitovým OS. Pak začne aplikace padat, typicky na "BadFormatException".&lt;BR&gt;Visual Studio totiž defaultně kompliluje aplikace tak, že platformu (32bit nebo 64bit) si volí při spuštění adaptivně podle toho, co je na daném počítači dostupné.&lt;/P&gt;
&lt;P&gt;Řešení jsou různá podle dané situace:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Pokud máte přístup ke zdrojákům aplikace,&lt;BR&gt;pak stačí ve vlastnostech projektu na kartě &lt;EM&gt;Build&lt;/EM&gt; přepnout přepínač &lt;EM&gt;Plaform target&lt;/EM&gt;&amp;nbsp;z &lt;EM&gt;Any CPU&lt;/EM&gt; na &lt;EM&gt;x86&lt;/EM&gt;.&lt;BR&gt;POZN: tento přepínač není dostupný u Compact Framework projektů, protože tam se nějakých 64bitů ani neočekává.&lt;/LI&gt;
&lt;LI&gt;Pokud není výsledná assembly podepsaná,&lt;BR&gt;pak můžete cílovou platformu změnit pomocí utility &lt;EM&gt;Corflags.exe&lt;/EM&gt;&lt;BR&gt;Např. &lt;CODE&gt;corflags.exe application.exe /32BIT+&lt;/CODE&gt;&lt;BR&gt;Je ověřeno, že toto nastavení funguje i na aplikace, zkompilované pro Compact Framework (výsledné .exe pak běží i na stolních i na kapesních Windows)&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Pro situaci, kdy nemáte přístup ke zdrojákům a assembly je podepsaná, řešení neznám.&lt;/P&gt;&lt;img src="http://weblog.rebex.cz/aggbug.aspx?PostID=3234" width="1" height="1"&gt;</description><category domain="http://weblog.rebex.cz/blogs/honzas/archive/tags/64bit/default.aspx">64bit</category><category domain="http://weblog.rebex.cz/blogs/honzas/archive/tags/Compact+Framework/default.aspx">Compact Framework</category></item><item><title>Log4net metoda InfoFormat() se chová jinak, než String.Format()</title><link>http://weblog.rebex.cz/blogs/honzas/archive/2009/10/07/log4net-metoda-infoformat-se-chov-jinak-ne-string-format.aspx</link><pubDate>Wed, 07 Oct 2009 10:07:00 GMT</pubDate><guid isPermaLink="false">456b44c7-fdf6-4664-b66b-585568c60ca2:3221</guid><dc:creator>honzas</dc:creator><slash:comments>2</slash:comments><comments>http://weblog.rebex.cz/blogs/honzas/comments/3221.aspx</comments><wfw:commentRss>http://weblog.rebex.cz/blogs/honzas/commentrss.aspx?PostID=3221</wfw:commentRss><description>&lt;P&gt;Odlišnost jsem potkal při zápisu data a času do logu log4netu:&lt;BR&gt;Narozdíl od standardní metody&amp;nbsp;String.Format&amp;nbsp;formátuje metoda InfoFormat datum dle anglického formátu bez ohledu na CurrentCulture.&lt;/P&gt;
&lt;P&gt;Příklad:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;_log.Info(string.Format("{0}", DateTime.Now));&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;vraci 7.10.2009 12:04:49&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;_log.InfoFormat("{0}", DateTime.Now);&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;vraci 10/07/2009 12:04:49&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Nevím, zda je to bug nebo feauture, ale příjemné mi to není.&lt;/P&gt;&lt;img src="http://weblog.rebex.cz/aggbug.aspx?PostID=3221" width="1" height="1"&gt;</description></item></channel></rss>