<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hagenberg Software Blog &#187; Michael Hewarth</title>
	<atom:link href="http://blog.hagenberg-software.at/author/hewmic/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hagenberg-software.at</link>
	<description>Hagenberg Software blogs about software, Microsoft and SharePoint</description>
	<lastBuildDate>Mon, 21 Nov 2011 10:56:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Sql Reporting Services Parameter by URL</title>
		<link>http://blog.hagenberg-software.at/2011/11/sql-reporting-services-parameter-by-url/</link>
		<comments>http://blog.hagenberg-software.at/2011/11/sql-reporting-services-parameter-by-url/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 10:56:01 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[Microsoft SharePoint]]></category>
		<category><![CDATA[Microsoft SQL Server]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=975</guid>
		<description><![CDATA[Wert an die URL anhängen z.b.: &#38;KundeId=2, im Sharpoint &#38;rp:UserFCodes=1]]></description>
			<content:encoded><![CDATA[<p>Reporting Services Berichte lassen sich Parameter leicht in der URL übergeben:</p>
<p><strong>1) Normalmodus (SqlServerReportViewer):</strong><br />
einfach &amp;PArametername=Wert an die URL anhängen z.b.: &amp;KundeId=2</p>
<p>https://x.y.z/ReportServer_CRM/Pages/ReportViewer.aspx?%2fKundeGesamt&amp;rs:Command=Render&amp;KundeId=2</p>
<p><strong>2) Sharepoint integrierter Modus (RSViewerPage.aspx):</strong><br />
Parameternamem mit Präfix rp anhängen: &amp;rpParametername=Wert anhängen z.b.: &amp;rp:UserFCodes=1</p>
<p>http://x.y.z/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/Test%20Reporting/ZugriffsstatistikGesamt.rdl&amp;Source=http%3A%2F%2F192%2E168%2E10%2E65%2FTest%2520Reporting%2FForms%2FAllItems%2Easpx&amp;DefaultItemOpen=1&amp;rp:UserFCodes=1</p>
<div class="zemanta-pixie" style="margin-top: 10px;height: 15px"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: medium none;float: right" src="http://img.zemanta.com/zemified_e.png?x-id=fa0521d1-6d4f-44cb-b13f-fb2a68e154a6" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2011/11/sql-reporting-services-parameter-by-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sql agent running ? mit tsql</title>
		<link>http://blog.hagenberg-software.at/2011/08/sql-agent-running-mit-tsql/</link>
		<comments>http://blog.hagenberg-software.at/2011/08/sql-agent-running-mit-tsql/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 09:52:29 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[Microsoft SQL Server]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=973</guid>
		<description><![CDATA[if 0&#60;(select count(*) from sys.sysprocesses where program_name like &#8216;SQLAgent%&#8217;) begin print &#8216;sql agent is running&#8217; end else begin print &#8216;sql agent is not running&#8217; end]]></description>
			<content:encoded><![CDATA[<p>if 0&lt;(select count(*) from sys.sysprocesses where program_name like &#8216;SQLAgent%&#8217;)<br />
begin<br />
print &#8216;sql agent is running&#8217;<br />
end<br />
else<br />
begin<br />
print &#8216;sql agent is not running&#8217;<br />
end</p>
<div class="zemanta-pixie" style="margin-top: 10px;height: 15px"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: medium none;float: right" src="http://img.zemanta.com/zemified_e.png?x-id=8f6884a1-6ab9-4de3-b4f9-e65c3a07b869" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2011/08/sql-agent-running-mit-tsql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>typed Dataset: mit Null Werte umgehen</title>
		<link>http://blog.hagenberg-software.at/2011/07/typed-dataset-mit-null-werte-umgehen/</link>
		<comments>http://blog.hagenberg-software.at/2011/07/typed-dataset-mit-null-werte-umgehen/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 15:02:35 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[DataSet]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=970</guid>
		<description><![CDATA[verwende SetXXXNull()  IsXXXNull() Methode der typed Datarow Instanzen]]></description>
			<content:encoded><![CDATA[<p>Um Null Werte abzufragen verwendet man die IsXXXNull() Methode der typed Datarow Instanzen, um Null Werte zu schreiben die SetXXXNull() Methode, wobei XXX der Feldname ist.</p>
<p>z.b.:</p>
<p>DsCRM.tTextNmDataTable dtTextNm = new DsCRM.tTextNmDataTable();<br />
DsCRM.tTextNmRow drTextNm = dtTextNm.NewtTextNmRow();<br />
drTextNm.ChildId = dr.Id;<br />
drTextNm.ParentId = (int)dt.ExtendedProperties[C.ParentId];<br />
drTextNm.Created = DateTime.UtcNow;<br />
drTextNm.CreatedBy = Data.WinUserName;<br />
drTextNm.SetValidUntilNull();<br />
drTextNm.IsValidUntilNull();</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2011/07/typed-dataset-mit-null-werte-umgehen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>asp.net 4.0 deployment on IIS 7.0</title>
		<link>http://blog.hagenberg-software.at/2011/07/asp-net-4-0-deployment-on-iis-7-0/</link>
		<comments>http://blog.hagenberg-software.at/2011/07/asp-net-4-0-deployment-on-iis-7-0/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 11:35:50 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[ASP .NET]]></category>
		<category><![CDATA[Internet Information Services]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=968</guid>
		<description><![CDATA[aspnet_regiis –i um asp4.0 auf iis7 zum Laufen zu kriegen]]></description>
			<content:encoded><![CDATA[<p>Beim Versuch eine asp.net 4.0 app auf einen default configuriertem iis7 zu installieren erhält man beim Öffnen der website:</p>
<p>HTTP Error 404.17 &#8211; Not Found The requested content appears to be script and will not be served by the static file handler.</p>
<p>das  Problem ist, dass ASP.NET 4.0 Framework war zwar am Rechner installiert  =&gt; daher konnte man in den AppPools auch einstellen, dass der  AppPool unter 4.0 laufen soll, doch man muß es auch noch als (ehemals  isapi, nun allgemein) handler installieren, damit aspx seiten damit abgehandelt werden  können mittels:<br />
c:\windows\microsoft.net\framework\v4.0….\aspnet_regiis –i</p>
<p>unter  iis7.0 ist auch der server kern in asp.net daher sind keine  isapi.dlls wie unter iis60 und 5.0 nötig, um bestimmte dateiarten wie  aspx zu handeln, sondern das kann gleich im kern gehandelt werden.</p>
<div class="zemanta-pixie" style="margin-top: 10px;height: 15px"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: medium none;float: right" src="http://img.zemanta.com/zemified_e.png?x-id=2bc09fd3-2ae7-40a3-9c40-5fb7cca46f02" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2011/07/asp-net-4-0-deployment-on-iis-7-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transactionale Replikation:</title>
		<link>http://blog.hagenberg-software.at/2011/05/transactionale-replikation/</link>
		<comments>http://blog.hagenberg-software.at/2011/05/transactionale-replikation/#comments</comments>
		<pubDate>Thu, 12 May 2011 12:22:10 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[sql server]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=927</guid>
		<description><![CDATA[Zunächst wird mit einem SQLAgentJob ein Snapshot angelegt, und zwar macht das der Raplikationsagent, also das WIndows Konto das beim Einrichten des Publishers angegeben wurde. wichtig: dieser Agent braucht schreibrechte auf der Freigabe, die zum Speichern des Snapshots verwendet wird &#8211; dort wird ein unc Directory angelegt und darin wieder eines mit dem Publikationsnamen, darin [...]]]></description>
			<content:encoded><![CDATA[<p>Zunächst wird mit einem SQLAgentJob ein Snapshot angelegt, und zwar macht das der Raplikationsagent, also das WIndows Konto das beim Einrichten des Publishers angegeben wurde. wichtig: dieser Agent braucht schreibrechte auf der Freigabe, die zum Speichern des Snapshots verwendet wird &#8211; dort wird ein unc Directory angelegt und darin wieder eines mit dem Publikationsnamen, darin werden die Files gepeichert. Insgesamt werden 3 SqlAgent Jobs verwendet: einen zum erstellen des SNapshots, einen logreader (liest das Transactionlog der Publikations Datenbank) und einen für die Subscription &#8211; dieser spielt zunächst den Snapshot in die Target Db ein und dann die Änderungen, die der LogReader des Publishers liefert.</p>
<p>Der Replikationsmonitor zeigt den Status aller Publikationen auf einen Blick und auch gleich die History der betroffenen<br />
<img src="/Users/hewmic/AppData/Local/Temp/moz-screenshot-2.png" alt="" /><img src="/Users/hewmic/AppData/Local/Temp/moz-screenshot-3.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2011/05/transactionale-replikation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zusammenfassung Delegates, anonyme Methoden usw.</title>
		<link>http://blog.hagenberg-software.at/2011/03/zusammenfassung-delegates-anonyme-methoden-usw/</link>
		<comments>http://blog.hagenberg-software.at/2011/03/zusammenfassung-delegates-anonyme-methoden-usw/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 08:06:02 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[Delegate]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=925</guid>
		<description><![CDATA[Evolution der Delegates in C#: delegate void TestDelegate(string s); TestDelegate testDelA = new TestDelegate(M); //C#1.0 explicite Method M must me declared TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); }; //C#2.0 inline &#8220;anonymos method TestDelegate testDelC = (x) =&#62; { Console.WriteLine(x); }; // C# 3.0. lambda expr. Action &#60;string&#62; TestDelegate; //C#4.0 DelegateDefinition einfacher //C# 4.0 Actions [...]]]></description>
			<content:encoded><![CDATA[<p>Evolution der Delegates in C#:</p>
<p>delegate void TestDelegate(string s);<br />
TestDelegate testDelA = new TestDelegate(M); //C#1.0 explicite Method M must me declared<br />
TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); }; //C#2.0 inline &#8220;anonymos method<br />
TestDelegate testDelC = (x) =&gt; { Console.WriteLine(x); }; // C# 3.0. lambda expr.<br />
Action &lt;string&gt; TestDelegate; //C#4.0 DelegateDefinition einfacher //C# 4.0 Actions</p>
<p>In Windows Forms muss eine anonyme Methode noch zu einem MethodInvoker konvertiert werden:<br />
this.Invoke(new MethodInvoker(delegate() { pgbStatus.Minimum = 0; }));</p>
<p>In Wpf zu einer Action:<br />
Application.Current.Dispatcher.Invoke((Action)delegate<br />
{<br />
SetButtonsEnabled(true);<br />
}, null);</p>
<div class="zemanta-pixie" style="margin-top: 10px;height: 15px"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: medium none;float: right" src="http://img.zemanta.com/zemified_e.png?x-id=784f3f39-6b4a-49fa-80f8-4f9c844008a6" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related pretty-attribution"></span></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2011/03/zusammenfassung-delegates-anonyme-methoden-usw/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>custom config section class</title>
		<link>http://blog.hagenberg-software.at/2011/03/custom-config-section-class/</link>
		<comments>http://blog.hagenberg-software.at/2011/03/custom-config-section-class/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 10:00:48 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=918</guid>
		<description><![CDATA[Eine eigen configsection Klasse muss von ConfigurationSection abgeleitet sein, braucht eine Property SectionName, anbei der Code zum lesen und Schreiben, bei Fehlersuche ist es ratsam im Visual Studio unter Debug/Exceptions bei CLR Exceptions das Häckchen bei Thrown anzuhacken, da Fehler sonst vom Configurationmanager unterdrückt werden. Aktiviert man aber dass die Ausführung bei thrown Exceptions unterbricht,bekommt [...]]]></description>
			<content:encoded><![CDATA[<p>Eine eigen configsection Klasse muss von ConfigurationSection abgeleitet sein, braucht eine Property SectionName, anbei der Code zum lesen und Schreiben, bei Fehlersuche ist es ratsam im Visual Studio unter Debug/Exceptions bei CLR Exceptions das Häckchen bei Thrown anzuhacken, da Fehler sonst vom Configurationmanager unterdrückt werden. Aktiviert man aber dass die Ausführung bei thrown Exceptions unterbricht,bekommt man die Orignal Fehlermeldung des Configurationmanagers.</p>
<p>private string _SectionName;<br />
public string Name<br />
{<br />
get<br />
{<br />
return this.SectionInformation.Name;<br />
}<br />
}<br />
public string SectionName<br />
{<br />
get<br />
{<br />
return _SectionName;<br />
}<br />
set<br />
{<br />
_SectionName = value;<br />
}<br />
}</p>
<p>public static List&lt;DataContextParams&gt; GetSectionsFromConfig()<br />
{<br />
Configuration c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);<br />
ConfigurationSectionGroup csg = c.GetSectionGroup(&#8220;DataContextParams&#8221;);<br />
List&lt;DataContextParams&gt; ldcp = new List&lt;DataContextParams&gt;();<br />
foreach (DataContextParams dcp in csg.Sections)<br />
{<br />
ldcp.Add(dcp);<br />
}<br />
return ldcp;<br />
}</p>
<p>/// &lt;summary&gt;<br />
/// schreibt dieses Objekt in die Config<br />
/// &lt;/summary&gt;<br />
/// &lt;param name=&#8221;configfile&#8221;&gt;wenn null wird in die execonfig geschrieben&lt;/param&gt;<br />
public void SaveSectionToConfig(string configfile)<br />
{<br />
ExeConfigurationFileMap oConfigFile = new ExeConfigurationFileMap();<br />
Configuration oConfiguration;<br />
if (null == configfile)<br />
{<br />
oConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);<br />
}<br />
else<br />
{<br />
oConfigFile.ExeConfigFilename = configfile;<br />
oConfiguration = ConfigurationManager.OpenMappedExeConfiguration(oConfigFile, ConfigurationUserLevel.None);<br />
}</p>
<p>//Add it to the configuration&#8217;s sections<br />
oConfiguration.Sections.Add(SectionName, this);</p>
<p>//Save the given section in the configuration file<br />
this.SectionInformation.ForceSave = true;<br />
oConfiguration.Save(ConfigurationSaveMode.Full);</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2011/03/custom-config-section-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Default Values in Stored Procedures, Severity Levels</title>
		<link>http://blog.hagenberg-software.at/2011/01/default-values-in-stored-procedures-severity-levels/</link>
		<comments>http://blog.hagenberg-software.at/2011/01/default-values-in-stored-procedures-severity-levels/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 12:59:17 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[sqlserver]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=915</guid>
		<description><![CDATA[ALTER PROCEDURE testRaiseError @Severity int =18 AS BEGIN &#8211; SET NOCOUNT ON added to prevent extra result sets from &#8211; interfering with SELECT statements. SET NOCOUNT ON; Raiserror(&#8216;Test Raiserrror&#8217;,@Severity,10) END Fehler ab einer Severity von 10 brechen ein laufendes TSQL Script ab und gelten als Fehler]]></description>
			<content:encoded><![CDATA[<p>ALTER PROCEDURE testRaiseError<br />
@Severity int =18<br />
AS<br />
BEGIN<br />
&#8211; SET NOCOUNT ON added to prevent extra result sets from<br />
&#8211; interfering with SELECT statements.<br />
SET NOCOUNT ON;</p>
<p>Raiserror(&#8216;Test Raiserrror&#8217;,@Severity,10)<br />
END</p>
<p>Fehler ab einer Severity von 10 brechen ein laufendes TSQL Script ab und gelten als Fehler</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2011/01/default-values-in-stored-procedures-severity-levels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transaktion mit Fehlerbehandlung in TSQL</title>
		<link>http://blog.hagenberg-software.at/2011/01/transaktion-mit-fehlerbehandlung-in-tsql/</link>
		<comments>http://blog.hagenberg-software.at/2011/01/transaktion-mit-fehlerbehandlung-in-tsql/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 10:44:31 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[sqlserver]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=911</guid>
		<description><![CDATA[Beispiel Insert und Update in einer Transaktion, wenn eines fehlschlägt wird zurückgerollt und der Fehler weitergegeben BEGIN TRAN T1 BEGIN TRY &#8211;write all values to mcit.auditrail (@UserId) INSERT INTO [AuditTrail] ([ActionType],[ObjectType],[ObjectId],[OldValues],[NewValues],[UserId]) SELECT &#8216;Update&#8217;,'Products&#8217;,Id,CONVERT(Nvarchar(MAX),Price),CONVERT(Nvarchar(MAX),Price*@PriceFact),@UserId from product where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0 update mcit.product set Price=Price*@PriceFact where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0 END TRY BEGIN CATCH [...]]]></description>
			<content:encoded><![CDATA[<p>Beispiel Insert und Update in einer Transaktion, wenn eines fehlschlägt wird zurückgerollt und der Fehler weitergegeben</p>
<p>BEGIN TRAN T1<br />
BEGIN TRY<br />
&#8211;write all values to mcit.auditrail (@UserId)<br />
INSERT INTO [AuditTrail] ([ActionType],[ObjectType],[ObjectId],[OldValues],[NewValues],[UserId])<br />
SELECT &#8216;Update&#8217;,'Products&#8217;,Id,CONVERT(Nvarchar(MAX),Price),CONVERT(Nvarchar(MAX),Price*@PriceFact),@UserId<br />
from product where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0</p>
<p>update mcit.product set Price=Price*@PriceFact where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0<br />
END TRY<br />
BEGIN CATCH<br />
print &#8216;Fehler in Transaktion aufgetreten &#8211; Rolle zurück&#8217;<br />
ROLLBACK TRAN T1</p>
<p>DECLARE @MSG NVARCHAR(MAX) SET @MSG=ERROR_MESSAGE()<br />
DECLARE @SEV INT SET @SEV=ERROR_SEVERITY()<br />
DECLARE @STA INT SET @STA=ERROR_STATE()<br />
RAISERROR (@MSG,@SEV,@STA)<br />
RETURN<br />
END CATCH<br />
COMMIT TRAN T1</p>
<p>END</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2011/01/transaktion-mit-fehlerbehandlung-in-tsql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>log4net &#8211; einfaches Besipiel fuer rolling file appender, Email und Datenbank appender</title>
		<link>http://blog.hagenberg-software.at/2010/12/log4net-einfaches-besipiel-fuer-rolling-file-appender-email-und-datenbank-appender/</link>
		<comments>http://blog.hagenberg-software.at/2010/12/log4net-einfaches-besipiel-fuer-rolling-file-appender-email-und-datenbank-appender/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 14:15:04 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=909</guid>
		<description><![CDATA[appender schreiben die messages in files, mails, datenbanken &#8230;; die messages werden mit den loggern erzeugt, wobei es eine logger hirachie gibt an deren Spitze der root logger steht, der auch alle messages die von anderen loggern erzeugt wurden loggt (also an seine appender weitergibt). So ist es möglich mit einem logger z.b. alle log [...]]]></description>
			<content:encoded><![CDATA[<p>appender schreiben die messages in files, mails, datenbanken &#8230;; die messages werden mit den loggern erzeugt, wobei es eine logger hirachie gibt an deren Spitze der root logger steht, der auch alle messages die von anderen loggern erzeugt wurden loggt (also an seine appender weitergibt). So ist es möglich mit einem logger z.b. alle log messages eines namespaces (+subnamespaces) zu loggen, also einfaches Beispiel:</p>
<p><strong>im Code:</strong><br />
public class Myclass<br />
{<br />
protected static ILog log = log4net.LogManager.GetLogger(&#8220;System.Windows.Forms&#8221;); //erzeuge logger</p>
<p>public static void TestLog()<br />
{<br />
log.Info(&#8220;Test&#8221;+DateTime.Now); // Test log<br />
}<br />
}<br />
<strong>in App.config:</strong></p>
<p>&lt;logger name=&#8221;System.Windows.Forms&#8221;&gt;<br />
&lt;level value=&#8221;INFO&#8221;/&gt;<br />
&lt;appender-ref ref=&#8221;fileapp&#8221;/&gt;<br />
&lt;/logger&gt;</p>
<p>&lt;appender name=&#8221;fileapp&#8221; type=&#8221;log4net.Appender.FileAppender&#8221;&gt;<br />
&lt;file value=&#8221;log.txt&#8221; /&gt;<br />
&lt;layout type=&#8221;log4net.Layout.PatternLayout&#8221;&gt;<br />
&lt;conversionPattern value=&#8221;%date;%-5level;%message;%exception%newline&#8221;/&gt;<br />
&lt;/layout&gt;<br />
&lt;/appender&gt;</p>
<p><strong>nach Level filtern im Appender (loggt keine Info und Debug)</strong><br />
&lt;filter type=&#8221;log4net.Filter.LevelRangeFilter&#8221;&gt;<br />
&lt;levelMin value=&#8221;WARN&#8221;/&gt;<br />
&lt;levelMax value=&#8221;FATAL&#8221;/&gt;<br />
&lt;/filter&gt;</p>
<p><strong>Levels</strong>:<br />
•ALL<br />
•DEBUG<br />
•INFO<br />
•WARN<br />
•ERROR<br />
•FATAL<br />
•OFF</p>
<p><strong>Beispiel für config die mittels root logger alles loggt in 3 Appender: file, datenbank und email:</strong></p>
<p>&lt;root&gt;<br />
&lt;level value=&#8221;ALL&#8221;/&gt;<br />
&lt;appender-ref ref=&#8221;RFArootAll&#8221;/&gt;<br />
&lt;appender-ref ref=&#8221;DBAroot&#8221;/&gt;<br />
&lt;appender-ref ref=&#8221;SMTPAHSG&#8221;/&gt;<br />
&lt;/root&gt;</p>
<p>&lt;appender name=&#8221;RFArootAll&#8221; type=&#8221;log4net.Appender.RollingFileAppender&#8221;&gt;<br />
&lt;file value=&#8221;log_RFArootAll.txt&#8221;/&gt;<br />
&lt;appendToFile value=&#8221;true&#8221;/&gt;<br />
&lt;rollingStyle value=&#8221;Size&#8221;/&gt;<br />
&lt;maxSizeRollBackups value=&#8221;10&#8243;/&gt;<br />
&lt;maximumFileSize value=&#8221;50MB&#8221;/&gt;<br />
&lt;staticLogFileName value=&#8221;true&#8221;/&gt;<br />
&lt;layout type=&#8221;log4net.Layout.PatternLayout&#8221;&gt;<br />
&lt;conversionPattern value=&#8221;%date;%logger;%message;%exception%newline&#8221;/&gt;<br />
&lt;/layout&gt;<br />
&lt;/appender&gt;</p>
<p>&lt;appender name=&#8221;DBAroot&#8221; type=&#8221;log4net.Appender.ADONetAppender&#8221;&gt;<br />
&lt;bufferSize value=&#8221;1&#8243;/&gt;<br />
&lt;connectionType value=&#8221;System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#8243;/&gt;<br />
&lt;connectionString value=&#8221;Data Source=localhost;Initial Catalog=myDb;Integrated Security=True&#8221;/&gt;<br />
&lt;commandText value=&#8221;INSERT INTO Log ([Date],[Level],[Logger],[User],[Message],[Exception]) VALUES (@log_date, @log_level, @logger, @user, @message, @exception)&#8221;/&gt;<br />
&lt;parameter&gt;<br />
&lt;parameterName value=&#8221;@log_date&#8221;/&gt;<br />
&lt;dbType value=&#8221;DateTime&#8221;/&gt;<br />
&lt;layout type=&#8221;log4net.Layout.RawTimeStampLayout&#8221;/&gt;<br />
&lt;/parameter&gt;<br />
&lt;parameter&gt;<br />
&lt;parameterName value=&#8221;@log_level&#8221;/&gt;<br />
&lt;dbType value=&#8221;String&#8221;/&gt;<br />
&lt;size value=&#8221;50&#8243;/&gt;<br />
&lt;layout type=&#8221;log4net.Layout.PatternLayout&#8221;&gt;<br />
&lt;conversionPattern value=&#8221;%p&#8221;/&gt;<br />
&lt;/layout&gt;<br />
&lt;/parameter&gt;<br />
&lt;parameter&gt;<br />
&lt;parameterName value=&#8221;@logger&#8221;/&gt;<br />
&lt;dbType value=&#8221;String&#8221;/&gt;<br />
&lt;size value=&#8221;255&#8243;/&gt;<br />
&lt;layout type=&#8221;log4net.Layout.PatternLayout&#8221;&gt;<br />
&lt;conversionPattern value=&#8221;%c&#8221;/&gt;<br />
&lt;/layout&gt;<br />
&lt;/parameter&gt;<br />
&lt;parameter&gt;<br />
&lt;parameterName value=&#8221;@user&#8221;/&gt;<br />
&lt;dbType value=&#8221;String&#8221;/&gt;<br />
&lt;size value=&#8221;50&#8243;/&gt;<br />
&lt;layout type=&#8221;log4net.Layout.PatternLayout&#8221;&gt;<br />
&lt;conversionPattern value=&#8221;%X{user}&#8221;/&gt;<br />
&lt;/layout&gt;<br />
&lt;/parameter&gt;<br />
&lt;parameter&gt;<br />
&lt;parameterName value=&#8221;@message&#8221;/&gt;<br />
&lt;dbType value=&#8221;String&#8221;/&gt;<br />
&lt;size value=&#8221;4000&#8243;/&gt;<br />
&lt;layout type=&#8221;log4net.Layout.PatternLayout&#8221;&gt;<br />
&lt;conversionPattern value=&#8221;%m&#8221;/&gt;<br />
&lt;/layout&gt;<br />
&lt;/parameter&gt;<br />
&lt;parameter&gt;<br />
&lt;parameterName value=&#8221;@exception&#8221;/&gt;<br />
&lt;dbType value=&#8221;String&#8221;/&gt;<br />
&lt;size value=&#8221;2000&#8243;/&gt;<br />
&lt;layout type=&#8221;log4net.Layout.ExceptionLayout&#8221;/&gt;<br />
&lt;/parameter&gt;<br />
&lt;/appender&gt;</p>
<p>&lt;appender name=&#8221;SMTPAHSG&#8221; type=&#8221;log4net.Appender.SMTPAppender&#8221;&gt;<br />
&lt;filter type=&#8221;log4net.Filter.LevelRangeFilter&#8221;&gt;<br />
&lt;levelMin value=&#8221;WARN&#8221;/&gt;<br />
&lt;levelMax value=&#8221;FATAL&#8221;/&gt;<br />
&lt;/filter&gt;<br />
&lt;param name=&#8221;To&#8221; value=&#8221;***.net&#8221;/&gt;<br />
&lt;param name=&#8221;From&#8221; value=&#8221;***.net&#8221;/&gt;<br />
&lt;param name=&#8221;Subject&#8221; value=&#8221;logging message&#8221;/&gt;<br />
&lt;param name=&#8221;SMTPHost&#8221; value=&#8221;***.net&#8221;/&gt;<br />
&lt;authentication value=&#8221;1&#8243;/&gt;<br />
&lt;username value=&#8221;***&#8221;/&gt;<br />
&lt;password value=&#8221;***&#8221;/&gt;<br />
&lt;param name=&#8221;LocationInfo&#8221; value=&#8221;false&#8221;/&gt;<br />
&lt;param name=&#8221;BufferSize&#8221; value=&#8221;1&#8243;/&gt;<br />
&lt;layout type=&#8221;log4net.Layout.PatternLayout&#8221;&gt;<br />
&lt;conversionPattern value=&#8221;%date;%-5level;%message;%exception%newline&#8221;/&gt;<br />
&lt;/layout&gt;<br />
&lt;/appender&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2010/12/log4net-einfaches-besipiel-fuer-rolling-file-appender-email-und-datenbank-appender/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spaltenheader beim Kopieren einschliessen</title>
		<link>http://blog.hagenberg-software.at/2010/12/spaltenheader-beim-kopieren-einschliessen/</link>
		<comments>http://blog.hagenberg-software.at/2010/12/spaltenheader-beim-kopieren-einschliessen/#comments</comments>
		<pubDate>Mon, 27 Dec 2010 15:50:08 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=897</guid>
		<description><![CDATA[Im SqlManagement Studio: Optionen / Abfrageergebnis / SQL Server / Ergebnisse in Raster / Spaltenheader beim Kopieren &#8230; einschliessen]]></description>
			<content:encoded><![CDATA[<p>Im SqlManagement Studio:</p>
<p>Optionen / Abfrageergebnis / SQL Server / Ergebnisse in Raster / Spaltenheader beim Kopieren &#8230; einschliessen</p>
<p><a href="http://blog.hagenberg-software.at/wp-content/uploads/2010/12/SqlServerIncludeHeaders1.png"><img class="alignnone size-medium wp-image-903" src="http://blog.hagenberg-software.at/wp-content/uploads/2010/12/SqlServerIncludeHeaders1-300x184.png" alt="" width="300" height="184" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2010/12/spaltenheader-beim-kopieren-einschliessen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OLE Server mittels C#</title>
		<link>http://blog.hagenberg-software.at/2010/12/ole-server-mittels-c/</link>
		<comments>http://blog.hagenberg-software.at/2010/12/ole-server-mittels-c/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 15:41:56 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=891</guid>
		<description><![CDATA[OLE Automation dient dem Zugriff auf Com Objekten con Script Sprachen aus, diese benötigen ein Late Binding, da ja kein Compiler vorhanden ist, der das Binding vor der Laufzeit macht. Daher gibt es das IDispatch Interface, alle OLE Server müssen dieses Implementieren. In c# erledigt die ganze Interfacedefinition usw. die Attributierung der Klasse, die COM [...]]]></description>
			<content:encoded><![CDATA[<p>OLE Automation dient dem Zugriff auf Com Objekten con Script Sprachen aus, diese benötigen ein Late Binding, da ja kein Compiler vorhanden ist, der das Binding vor der Laufzeit macht. Daher gibt es das IDispatch Interface, alle OLE Server müssen dieses Implementieren.</p>
<p>In c# erledigt die ganze Interfacedefinition usw. die Attributierung der Klasse, die COM zur Verfügung gestellt werden soll &#8211; wichtig: in VS2008 und VS2010 muss man   ComVisible(true) explizit angeben, früher war dies im Attribut ClassInterface enthalten &#8230; im Projekt vom Typ Class Library sollte unter Properties/Build/Output register for Com interop angehackt sein, das registriert den OLE Server gleich und  generiert die Type Librarty, die für Script Sprachen die vorhandenen Methoden zur Verfügung stellt.</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;<br />
using System.Runtime.InteropServices;</p>
<p>namespace Ole6<br />
{<br />
[Guid("9C78E2DB-E664-47BE-A2C2-213AA2005078"),<br />
ClassInterface(ClassInterfaceType.AutoDual),<br />
ComVisible(true)]<br />
public class Ole6<br />
{<br />
public Ole6() { }<br />
public string Test()<br />
{<br />
return &#8220;Test&#8221;;<br />
}</p>
<p>}</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2010/12/ole-server-mittels-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>textfile tracelistener adden &amp; verwenden</title>
		<link>http://blog.hagenberg-software.at/2010/12/textfile-tracelistener-adden-verwenden/</link>
		<comments>http://blog.hagenberg-software.at/2010/12/textfile-tracelistener-adden-verwenden/#comments</comments>
		<pubDate>Sun, 19 Dec 2010 20:00:04 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[trace]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=882</guid>
		<description><![CDATA[ins app.config File einfügen: &#60;system.diagnostics&#62; &#60;trace autoflush=&#8221;true&#8221; indentsize=&#8221;2&#8243;&#62; &#60;listeners&#62; &#60;add name=&#8221;textfilelistener&#8221; type=&#8221;System.Diagnostics.TextWriterTraceListener&#8221; initializeData=&#8221;Log.txt&#8221;/&#62; &#60;/listeners&#62; &#60;/trace&#62; &#60;/system.diagnostics&#62; im code verwenden: Trace.TraceInformation(Application.ExecutablePath + &#8221; started at &#8221; + DateTime.Now.ToString());]]></description>
			<content:encoded><![CDATA[<p>ins app.config File einfügen:</p>
<p><em>&lt;system.diagnostics&gt;<br />
&lt;trace autoflush=&#8221;true&#8221; indentsize=&#8221;2&#8243;&gt;<br />
&lt;listeners&gt;<br />
&lt;add name=&#8221;textfilelistener&#8221; type=&#8221;System.Diagnostics.TextWriterTraceListener&#8221;<br />
initializeData=&#8221;Log.txt&#8221;/&gt;<br />
&lt;/listeners&gt;<br />
&lt;/trace&gt;<br />
&lt;/system.diagnostics&gt;</em></p>
<p>im code verwenden:</p>
<p><strong>Trace.TraceInformation</strong>(Application.ExecutablePath + &#8221; started at &#8221; + DateTime.Now.ToString());</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2010/12/textfile-tracelistener-adden-verwenden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>windows forms anzeige refreshen während hintergrundtask im selben thread läuft</title>
		<link>http://blog.hagenberg-software.at/2010/12/windows-forms-anzeige-refreshen-wahrend-hintergrundtask-im-selben-thread-lauft/</link>
		<comments>http://blog.hagenberg-software.at/2010/12/windows-forms-anzeige-refreshen-wahrend-hintergrundtask-im-selben-thread-lauft/#comments</comments>
		<pubDate>Sun, 19 Dec 2010 18:42:34 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=873</guid>
		<description><![CDATA[eigentlich ist es ja nicht schön, einen längerdauernden task im GUI Thread laufen zu lassen, aber bei quick &#38; dirty testforms macht es ab und zu sinn. Wenn man den status des länger dauernden tasks dann anzeigen will, ist es sinnvoll nicht nur this.refresh(); aufs formular in der langdauernden schleife aufzurufen sondern auch Application.DoEvents(); &#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>eigentlich ist es ja nicht schön, einen längerdauernden task im GUI Thread laufen zu lassen, aber bei quick &amp; dirty testforms macht es ab und zu sinn. Wenn man den status des länger dauernden tasks dann anzeigen will, ist es sinnvoll nicht nur<br />
<strong>this.refresh();</strong> aufs formular in der langdauernden schleife aufzurufen sondern auch<br />
<strong>Application.DoEvents();</strong> &#8230; dann werden die ganzen Windwos Messages abgearbeitte, die z.b. durch progressbar.PerformStep() ausgelöst werden  und die anzeige wird aktualisiert &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2010/12/windows-forms-anzeige-refreshen-wahrend-hintergrundtask-im-selben-thread-lauft/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>.Net Color zu Crystal Reports Farbe konvertieren</title>
		<link>http://blog.hagenberg-software.at/2010/02/net-color-zu-crystal-reports-farbe-konvertieren/</link>
		<comments>http://blog.hagenberg-software.at/2010/02/net-color-zu-crystal-reports-farbe-konvertieren/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 11:35:38 +0000</pubDate>
		<dc:creator>Michael Hewarth</dc:creator>
				<category><![CDATA[Software Entwicklung]]></category>
		<category><![CDATA[Crystal Report]]></category>
		<category><![CDATA[MSSQL]]></category>

		<guid isPermaLink="false">http://blog.hagenberg-software.at/?p=641</guid>
		<description><![CDATA[.Net speichert die Farbe Color als 4Bytes: ARGB A &#8230; Alpha Channel (durchsichtigkeit) R Rot G Grün B Blau Crystal Report erwartet die Farben allerdings in BGR (Blau Grün Rot). Daher muss am den Alpha Teil wegschneiden und R sowie B vertauschen &#8211; z.b. in TSQL 2008 Scalar Value Funtion: -- Create date: 09.09.2010 -- [...]]]></description>
			<content:encoded><![CDATA[<div>.Net speichert die Farbe Color als 4Bytes: ARGB</p>
<ul>
<li><em>A &#8230; Alpha Channel (durchsichtigkeit)</em></li>
<li><em>R Rot</em></li>
<li><em>G Grün</em></li>
<li><em>B Blau</em></li>
</ul>
</div>
<div>Crystal Report erwartet die Farben allerdings in BGR (Blau Grün Rot).</div>
<div>Daher muss am den Alpha Teil wegschneiden und R sowie B vertauschen &#8211; z.b. in TSQL 2008 Scalar Value Funtion:</div>
<pre class="brush: sql; title: ;">
-- Create date: 09.09.2010
-- Description: Wandelt ARGB (Alpha Channel rgb von .Net Color.ToARGB() hat 4 Byte für RGBA, wobei Rot= 00ffff Grün=ff00ff und blau=ffff00 ist ) in RGB um
-- =============================================
ALTER FUNCTION [dbo].[fnArgb2Bgr]
(
@ARGB as int
)
RETURNS int
AS
BEGIN
DECLARE @BGR as int
DECLARE @R as int = (@ARGB &amp; 0x00FF0000)/0x10000
DECLARE @G as int = (@ARGB &amp; 0x0000FF00) /0x100
DECLARE @B as int = (@ARGB &amp; 0x000000FF)&lt;/div&gt;
&lt;div&gt;

SET @BGR=@B*0x10000+@G*0x100+@R
RETURN @BGR

END
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.hagenberg-software.at/2010/02/net-color-zu-crystal-reports-farbe-konvertieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

