<?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>Codehauerei Schwarz</title>
	<atom:link href="http://codehauerei-schwarz.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://codehauerei-schwarz.de</link>
	<description>.NET SQL-Server &#38; more</description>
	<lastBuildDate>Mon, 28 Mar 2011 08:38:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Emails per IMAP abfragen</title>
		<link>http://codehauerei-schwarz.de/2011/03/22/emails-per-imap-abfragen/</link>
		<comments>http://codehauerei-schwarz.de/2011/03/22/emails-per-imap-abfragen/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 16:02:50 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[EMail]]></category>
		<category><![CDATA[IMAP]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=237</guid>
		<description><![CDATA[Ein kleines Beispielprojekt um Emails per IMAP abzurufen IMAP_Sample Update: Jetzt auch mit SSL-Unterstützung&#8230;]]></description>
			<content:encoded><![CDATA[<p>Ein kleines Beispielprojekt um Emails per IMAP abzurufen</p>
<p><a href='http://codehauerei-schwarz.de/wp-content/uploads/2011/03/IMAP_Sample.rar'>IMAP_Sample</a></p>
<p>Update: Jetzt auch mit SSL-Unterstützung&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2011/03/22/emails-per-imap-abfragen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL-Scripts per Kommandozeile ausführen</title>
		<link>http://codehauerei-schwarz.de/2011/02/10/sql-scripts-von-der-kommandozeile-ausfuhren/</link>
		<comments>http://codehauerei-schwarz.de/2011/02/10/sql-scripts-von-der-kommandozeile-ausfuhren/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 14:47:00 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=232</guid>
		<description><![CDATA[sqlcmd -S Server -U Benutzer -P Passwort -i "C:\SqlScript.sql"]]></description>
			<content:encoded><![CDATA[<pre class="brush:[shell]">
sqlcmd -S Server -U Benutzer -P Passwort -i "C:\SqlScript.sql"
</pre>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2011/02/10/sql-scripts-von-der-kommandozeile-ausfuhren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SqlParameter.Add() vs AddWithValue()</title>
		<link>http://codehauerei-schwarz.de/2010/09/21/sqlparameter-add-vs-addwithvalue/</link>
		<comments>http://codehauerei-schwarz.de/2010/09/21/sqlparameter-add-vs-addwithvalue/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 18:33:05 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=209</guid>
		<description><![CDATA[Der Großteil der Entwickler wird sich bei Datenbankabfragen sicher mit der Methode AddWithValue() angefreundet haben. Man gibt nur noch den Namen des Sql-Parameters und den entsprechenden Wert an und das .Net Framework kümmert sich um den Rest. using (var conn = new SqlConnection(@"ConnectionString zensiert")) { conn.Open();      string sql = "Select LastName FROM TestTable WHERE [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_3.png"></a>Der Großteil der Entwickler wird sich bei Datenbankabfragen sicher mit der Methode AddWithValue() angefreundet haben.</p>
<p>Man gibt nur noch den Namen des Sql-Parameters und den entsprechenden Wert an und das .Net Framework kümmert sich um den Rest.</p>
<pre class="brush:[c#]">using (var conn = new SqlConnection(@"ConnectionString zensiert"))
{
     conn.Open();

     string sql = "Select LastName FROM TestTable WHERE LastName = @l";

     var cmd = new SqlCommand(sql, conn);

      cmd.Parameters.AddWithValue("@l", "Harglgargl");
       //selbes Ergebnis
       //cmd.Parameters.Add("@l", "Meier");

       object res = cmd.ExecuteScalar();
}</pre>
<p>Ich würde erwarten, dass der SQL-Server schlau genug wäre und den Parameter korrekt auflöst.</p>
<p>Leider gibt es hier ein kleines Problem.</p>
<p>Führt man das Codefragment mit den Werten &#8220;Huber&#8221;, &#8220;Schmidt&#8221;, und &#8220;Harglgargl&#8221; aus würde man erwarten,</p>
<p>dass der SQL-Server einen bereits vorhandenen Ausführungsplan benutzt bzw. einen Plan für diese Abfrage erstellt und dann wiederverwendet.</p>
<p>Das Resultat sieht leider etwas anders aus:</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_1.png"><img class="alignnone size-full wp-image-213" title="SqlParameter_AddWithValue_1" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_1.png" alt="Cached Plans" width="573" height="306" /></a></p>
<p>Für jede Varchar-Länge wird ein eigener Ausführungsplan angelegt.</p>
<p>Die Auswirkungen werden bei einem genaueren Blick auf die Speicherausnutzung des SQL-Servers deutlich.</p>
<p>Mein Dev-Server sagt dazu auf jeden Fall Folgendes:</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_2.png"><img class="alignnone size-full wp-image-215" title="SqlParameter_AddWithValue_2" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_2.png" alt="" width="182" height="76" /></a></p>
<p>Cached: verwendeter Speicher um Seiten zu cachen</p>
<p>Stolen: Speicher der &#8220;gestohlen&#8221; wird um Ausführungspläne zu cachen</p>
<p>Das Verhältnis wird in den meisten Szenarien vernachlässigbar sein. Ich kann mir allerdings einige Umgebungen vorstellen in denen das Ganze zum Problem werden könnte.</p>
<p>Wie dem auch sei. Je mehr Speicher zur Verfügung steht um Seiten zu cachen umso besser <img src='http://codehauerei-schwarz.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Die Lösung des Ganzen ist aktuell leider etwas umständlich. Man kann das Ganze umgehen indem man den Datentyp der entsprechenden Datenbankspalte angibt.</p>
<p>Leider ist das Ganze extrem lästig da es aktuell keine brauchbare Überladung gibt (Man kann sich natürlich eine schnitzen)&#8230;</p>
<pre class="brush:[c#]">using (var conn = new SqlConnection(@"ConnectionString zensiert"))
{
     conn.Open();

     string sql = "Select LastName FROM TestTable WHERE LastName = @l";

     var cmd = new SqlCommand(sql, conn);

     SqlParameter p = new SqlParameter("@l", System.Data.SqlDbType.VarChar, 1000);
     p.Value = "Huber";

     cmd.Parameters.Add(p);

     object res = cmd.ExecuteScalar();
}</pre>
<p> </p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_3.png"><img class="alignnone size-full wp-image-218" title="SqlParameter_AddWithValue_3" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_3.png" alt="" width="522" height="58" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2010/09/21/sqlparameter-add-vs-addwithvalue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hierarchische Gruppierungen mit Rank()</title>
		<link>http://codehauerei-schwarz.de/2010/05/23/hierarchische-gruppierungen-mit-rank/</link>
		<comments>http://codehauerei-schwarz.de/2010/05/23/hierarchische-gruppierungen-mit-rank/#comments</comments>
		<pubDate>Sun, 23 May 2010 14:16:49 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=184</guid>
		<description><![CDATA[Wie ermittelt man die Torschützenkönige der Bundesliga aus einer Liste aller Torschützen der jeweiligen Saison ? Das Ganze wäre prinzipiell mit Hilfe einiger Subqueries machbar. Optimaler läßt sich das Ganze mit Hilfe der Funktion Rank() lösen die ab SQL-Server 2005 zur Verfügung steht. SELECT Spieler, Verein, Tore, Saison, RANK() OVER (PARTITION BY Saison ORDER BY [...]]]></description>
			<content:encoded><![CDATA[<p>Wie ermittelt man die Torschützenkönige der Bundesliga aus einer Liste aller Torschützen der jeweiligen Saison ?</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/05/Liste_Torschuetzen.png"><img class="alignnone size-full wp-image-185" title="Liste_Torschuetzen" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/05/Liste_Torschuetzen.png" alt="" width="342" height="186" /></a></p>
<p>Das Ganze wäre prinzipiell mit Hilfe einiger Subqueries machbar.</p>
<p>Optimaler läßt sich das Ganze mit Hilfe der Funktion Rank() lösen die ab SQL-Server 2005 zur Verfügung steht.</p>
<pre class="brush:[sql]">SELECT
	Spieler,
	Verein,
	Tore,
	Saison,
	RANK() OVER (PARTITION BY Saison ORDER BY Tore DESC) AS Platz
FROM
	#ErzielteTreffer</pre>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/05/Liste_RankingProSaison.png"><img class="alignnone size-full wp-image-186" title="Liste_RankingProSaison" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/05/Liste_RankingProSaison.png" alt="" width="380" height="187" /></a></p>
<pre class="brush:[sql]">SELECT Spieler,Verein,Tore,Saison FROM
	(
	SELECT
		Spieler,
		Verein,
		Tore,
		Saison,
		RANK() OVER (PARTITION BY Saison ORDER BY Tore DESC) AS Platz
	FROM
	#ErzielteTreffer
	) AS Rangfolge
WHERE Platz = 1</pre>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/05/Liste_RankingErgebnis.png"><img class="alignnone size-full wp-image-188" title="Liste_RankingErgebnis" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/05/Liste_RankingErgebnis.png" alt="" width="301" height="76" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2010/05/23/hierarchische-gruppierungen-mit-rank/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom WCF Username/Password Validator mit wsHttpBinding</title>
		<link>http://codehauerei-schwarz.de/2010/04/16/custom-wcf-usernamepassword-validator-mit-wshttpbinding/</link>
		<comments>http://codehauerei-schwarz.de/2010/04/16/custom-wcf-usernamepassword-validator-mit-wshttpbinding/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 12:53:41 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=175</guid>
		<description><![CDATA[... namespace WCFTestService.Auth { public class CustomUserNamePasswordValidator : UserNamePasswordValidator { public override void Validate(string userName, string password) { // check credentials here... ... Config: ... ... ... ...]]></description>
			<content:encoded><![CDATA[<pre class="brush:[c#]">
...
namespace WCFTestService.Auth
{
    public class CustomUserNamePasswordValidator : UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
               // check credentials here...
...
</pre>
<p>Config:</p>
<pre class="brush:[xml]">
<system.serviceModel>
...
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpWithMessageSecurity">
          ...
          <security mode="Message">
<transport clientCredentialType="Basic">
              <extendedProtectionPolicy policyEnforcement="Never" />
            </transport>
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CustomSecurityTest">
          <serviceCredentials>
            <serviceCertificate findValue="zensiert"
              storeLocation="zensiert" storeName="zensiert" x509FindType="FindBySerialNumber" />
            <userNameAuthentication userNamePasswordValidationMode="Custom"
              customUserNamePasswordValidatorType="WCFTestService.Auth.CustomUserNamePasswordValidator, WCFTestService" />
          </serviceCredentials>
          ...
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="CustomSecurityTest" name="ServiceTestConfig">
        <endpoint address="zensiert"
          binding="wsHttpBinding"
          bindingConfiguration="wsHttpWithMessageSecurity" name="wstHttpCustomSecurityTest"
          contract="WCFTestService.ITest" />
      </service>
    </services>
    ...
</system.serviceModel>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2010/04/16/custom-wcf-usernamepassword-validator-mit-wshttpbinding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom WCF MSMQ-Tracer</title>
		<link>http://codehauerei-schwarz.de/2009/11/30/custom-wcf-msmq-tracer/</link>
		<comments>http://codehauerei-schwarz.de/2009/11/30/custom-wcf-msmq-tracer/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 20:56:26 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[MSMQ]]></category>
		<category><![CDATA[Trace]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=160</guid>
		<description><![CDATA[WCF Custom MSMQ Tracer &#8211; Sample Das Standard-Traceing im WCF Framework ist erstaunlich einfach anzuwenden und zu konfigurieren. Auch das im Framework enthaltene Analysetool ist ganz brauchbar. So viel Luxus ist man gar nicht gewohnt wenn man vorher hauptsächlich mit dem WSE-Framework zu tun hatte&#8230; Leider ist Microsoft den Weg nicht komplett zu Ende gegangen. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/WCF-Custom-MSMQ-Tracer.rar">WCF Custom MSMQ Tracer &#8211; Sample</a></p>
<p>Das Standard-Traceing im WCF Framework ist erstaunlich einfach anzuwenden und zu konfigurieren. Auch das im Framework enthaltene Analysetool ist ganz brauchbar.</p>
<p>So viel Luxus ist man gar nicht gewohnt wenn man vorher hauptsächlich mit dem WSE-Framework zu tun hatte&#8230;</p>
<p>Leider ist Microsoft den Weg nicht komplett zu Ende gegangen. Gibt man sich nicht mit der Erzeugung von Logdateien zufrieden, sondern will das Ganze in eine Datenbank  bzw. Message Queue persistieren darf man wieder selbst tätig werden.</p>
<p>Ich würde davon abraten das komplette Traceing direkt synchron aufzusetzen. Es hat sich bewährt die Nachrichten zuerst einmal zwischenzulagern und die Verarbeitung dann asynchron auszuführen.</p>
<pre class="brush:[c#]">public class MsmqTracer : TraceListener
{
   public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
   {
   if (!string.IsNullOrEmpty(traceQueue))
   {
      try
      {
      MessageQueue msmq = new MessageQueue(traceQueue);
      MessageQueueTransaction trans = new MessageQueueTransaction();

      trans.Begin();
      Message msg = new Message(data.ToString(), new XmlMessageFormatter());

      msmq.Send(msg, trans);
      trans.Commit();
      }

      catch (Exception msmqEx)
      {
         Debug.WriteLine(string.Format("Error while persisting trace: {0}", msmqEx.ToString()));
      }
   }
   else
   {
      Debug.WriteLine("Missing MSMQ Trace");
   }
}

public override void Write(string message) {}

public override void WriteLine(string message) {}</pre>
<pre class="brush:[xml]"><!--l version="1.0" encoding="utf-8"-->

  <!-- Perfmon -->

 <!-- Trace Queue --></pre>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2009/11/30/custom-wcf-msmq-tracer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WCF Performance Counter</title>
		<link>http://codehauerei-schwarz.de/2009/11/30/wcf-performance-counter/</link>
		<comments>http://codehauerei-schwarz.de/2009/11/30/wcf-performance-counter/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 20:00:39 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=150</guid>
		<description><![CDATA[Das WCF-Framework stellt eine Unzahl an Meßwerten zur Verfügung. Leider ist das Ganze kaum dokumentiert&#8230; Die Aktivierung der Counter ist denkbar einfach (wenn man mal rausgefunden hat dass es sowas überhaupt gibt&#8230;) und erfolgt durch einen Eintrag in der App.Config des Hosts Die entsprechenden Werte lassen sich dann direkt mit perfmon anzeigen und auswerten.]]></description>
			<content:encoded><![CDATA[<p>Das WCF-Framework stellt eine Unzahl an Meßwerten zur Verfügung.</p>
<p>Leider ist das Ganze kaum dokumentiert&#8230;</p>
<p>Die Aktivierung der Counter ist denkbar einfach (wenn man mal rausgefunden hat dass es sowas überhaupt gibt&#8230;) und erfolgt durch einen Eintrag in der App.Config des Hosts</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/PerfCountersConfig.png"><img class="alignnone size-full wp-image-151" title="PerfCountersConfig" src="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/PerfCountersConfig.png" alt="PerfCountersConfig" width="362" height="49" /></a></p>
<p>Die entsprechenden Werte lassen sich dann direkt mit perfmon anzeigen und auswerten.</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon1.png"><img class="alignnone size-full wp-image-152" title="perfmon1" src="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon1.png" alt="perfmon1" width="584" height="386" /></a></p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon2.png"><img class="alignnone size-full wp-image-154" title="perfmon2" src="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon2.png" alt="perfmon2" width="461" height="532" /></a><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon2.png"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2009/11/30/wcf-performance-counter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Excel Dateien mit SQL auswerten</title>
		<link>http://codehauerei-schwarz.de/2009/11/11/excel-dateien-mit-sql-auswerten/</link>
		<comments>http://codehauerei-schwarz.de/2009/11/11/excel-dateien-mit-sql-auswerten/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 09:10:52 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[OPENDATASOURCE]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=125</guid>
		<description><![CDATA[Excel Query Excel 97 &#8211; 2003 SELECT      [ID], -- Excel Spalte 1      [Text] -- Excel Spalte 2 FROM      OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',      'Data Source=C:\test.xls;Extended Properties=Excel 8.0')      ...[Tabelle1$] -- Tabellenblatt ORDER BY [ID] DESC Excel 2007: Um die Funktionalität auch bei .xslx-Dateien nutzen zu können, muß folgende Komponente auf dem System installiert sein: 2007 Office [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/Excel-Query.rar">Excel Query</a></p>
<p><strong>Excel 97 &#8211; 2003</strong></p>
<pre class="brush:[sql]">SELECT

     [ID], -- Excel Spalte 1
     [Text] -- Excel Spalte 2

FROM

     OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
     'Data Source=C:\test.xls;Extended Properties=Excel 8.0')
     ...[Tabelle1$] -- Tabellenblatt

ORDER BY

[ID] DESC</pre>
<p><strong>Excel 2007:</strong></p>
<p>Um die Funktionalität auch bei .xslx-Dateien nutzen zu können, muß folgende Komponente auf dem System installiert sein:<br />
<a href="http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&amp;displaylang=en">2007 Office System Driver: Data Connectivity Components</a><br />
 </p>
<pre class="brush:[sql]">SELECT
	*
FROM
	OPENDATASOURCE(
		'Microsoft.ACE.OLEDB.12.0',
		'Data Source=C:\test.xlsx;Extended Properties=Excel 12.0')
		...[Tabelle1$]</pre>
<p>Leider funktioniert das Ganze aktuell nur auf 32-Bit Systemen, da die entsprechenden Provider auf 64-Bit Systemen derzeit nicht zur Verfügung gestellt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2009/11/11/excel-dateien-mit-sql-auswerten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>X-Server SQL Query Template mit OPENROWSET</title>
		<link>http://codehauerei-schwarz.de/2009/11/04/x-server-sql-query-template-mit-openrowset/</link>
		<comments>http://codehauerei-schwarz.de/2009/11/04/x-server-sql-query-template-mit-openrowset/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 14:38:40 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[OPENROWSET]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=113</guid>
		<description><![CDATA[SELECT * FROM OPENROWSET ('MSDASQL', 'DRIVER={SQL Server};SERVER=zensiert;UID=zensiert;PWD=zensiert, Testdatenbank.Schema.TestTabelle) WHERE ... Um dieses Feature nutzen zu können muss folgendes Setting aktiviert sein EXEC sp_configure 'Ad Hoc Distributed Queries', '1' RECONFIGURE http://technet.microsoft.com/de-de/library/ms187569.aspx]]></description>
			<content:encoded><![CDATA[<pre class="brush:[sql]">SELECT * FROM OPENROWSET
      ('MSDASQL', 'DRIVER={SQL Server};SERVER=zensiert;UID=zensiert;PWD=zensiert,
      Testdatenbank.Schema.TestTabelle) 

      WHERE ...</pre>
<p>Um dieses Feature nutzen zu können muss folgendes Setting aktiviert sein</p>
<pre class="brush:[sql]">EXEC sp_configure 'Ad Hoc Distributed Queries', '1' RECONFIGURE</pre>
<p>http://technet.microsoft.com/de-de/library/ms187569.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2009/11/04/x-server-sql-query-template-mit-openrowset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Cursor Template</title>
		<link>http://codehauerei-schwarz.de/2009/11/04/sql-cursor-template/</link>
		<comments>http://codehauerei-schwarz.de/2009/11/04/sql-cursor-template/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 14:14:41 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Cursor]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=109</guid>
		<description><![CDATA[DECLARE @lastname varchar(100) DECLARE @firstname varchar(100) DECLARE query_cursor CURSOR FOR SELECT LastName, FirstName FROM T_AddressData ORDER BY PK_AddressData OPEN query_cursor FETCH NEXT FROM query_cursor INTO @lastname, @firstname PRINT '---------- Results ----------' WHILE @@FETCH_STATUS = 0 BEGIN PRINT (@lastname + ' ' + @firstname) FETCH NEXT FROM query_cursor INTO @lastname, @firstname END CLOSE query_cursor DEALLOCATE query_cursor]]></description>
			<content:encoded><![CDATA[<pre class="brush:[sql]">DECLARE @lastname varchar(100)
DECLARE @firstname varchar(100)

DECLARE query_cursor CURSOR FOR

	SELECT
		LastName,
		FirstName
	FROM
		T_AddressData
	ORDER BY
		PK_AddressData

OPEN query_cursor

FETCH NEXT FROM query_cursor
INTO @lastname, @firstname

PRINT '---------- Results ----------'

WHILE @@FETCH_STATUS = 0
BEGIN
	PRINT (@lastname + ' ' + @firstname)

	FETCH NEXT FROM query_cursor
	INTO @lastname, @firstname
END

CLOSE query_cursor
DEALLOCATE query_cursor</pre>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2009/11/04/sql-cursor-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rekursive SQL Queries &#8211; Common Table Expression</title>
		<link>http://codehauerei-schwarz.de/2009/11/02/rekursive-sql-queries-common-table-expression/</link>
		<comments>http://codehauerei-schwarz.de/2009/11/02/rekursive-sql-queries-common-table-expression/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 16:03:24 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[CTE]]></category>
		<category><![CDATA[Rekursion]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=89</guid>
		<description><![CDATA[CTE Rekursion &#8211; Sample   WITH TEMP (Pk, Parent_Pk, Title, Name, Iteration) AS (   SELECT Pk_JobStruct, Fk_Parent, Title, Name, 0   FROM T_JobStruct   WHERE PK_JobStruct = 1 -- el cheffe  UNION ALL   SELECT sub.Pk_Jobstruct, sub.Fk_Parent, sub.Title, sub.Name, (t.Iteration + 1)   FROM T_JobStruct AS sub, temp AS t   WHERE t.Pk = sub.Fk_Parent ) SELECT * FROM Temp]]></description>
			<content:encoded><![CDATA[<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/CTE-Rekursion.txt">CTE Rekursion &#8211; Sample</a><br />
 <br />
<a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/rec_result.png"><img class="alignnone size-full wp-image-96" title="rec_result" src="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/rec_result.png" alt="rec_result" width="378" height="205" /></a></p>
<pre class="brush:[sql]">WITH TEMP (Pk, Parent_Pk, Title, Name, Iteration) AS
(
  SELECT Pk_JobStruct, Fk_Parent, Title, Name, 0
  FROM T_JobStruct
  WHERE PK_JobStruct = 1 -- el cheffe

 UNION ALL

  SELECT sub.Pk_Jobstruct, sub.Fk_Parent, sub.Title, sub.Name, (t.Iteration + 1)
  FROM T_JobStruct AS sub, temp AS t
  WHERE t.Pk = sub.Fk_Parent

)

SELECT * FROM Temp</pre>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/rec_cte_queryresult.png"><img class="alignnone size-full wp-image-101" title="rec_cte_queryresult" src="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/rec_cte_queryresult.png" alt="rec_cte_queryresult" width="359" height="197" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2009/11/02/rekursive-sql-queries-common-table-expression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webservice Traces mit WSE 2.0</title>
		<link>http://codehauerei-schwarz.de/2009/10/30/webservice-traces-mit-wse-2-0/</link>
		<comments>http://codehauerei-schwarz.de/2009/10/30/webservice-traces-mit-wse-2-0/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 12:53:58 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[WebService]]></category>
		<category><![CDATA[WSE]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=42</guid>
		<description><![CDATA[WSE 2.0 Trace Sample Auch wenn in der Webservice-Entwicklung mittlerweile größtenteils das WCF-Framework eingesetzt wird, haben wir alle bestimmt noch die eine oder andere &#8220;ältere&#8221; Anwendung zu betreuen. Tritt ein Bug auf, schadet es nie zuerst einen Blick auf die entsprechenden Daten zu werfen. Während das Ganze im WCF-Framework mit einigen Mausklicks erledigt ist oder [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/10/WSE-2.0-Trace-Sample.rar">WSE 2.0 Trace Sample</a></p>
<p>Auch wenn in der Webservice-Entwicklung mittlerweile größtenteils das WCF-Framework eingesetzt wird, haben wir alle bestimmt noch die eine oder andere &#8220;ältere&#8221; Anwendung zu betreuen.</p>
<p>Tritt ein Bug auf, schadet es nie zuerst einen Blick auf die entsprechenden Daten zu werfen. Während das Ganze im WCF-Framework mit einigen Mausklicks erledigt ist oder man nicht sowieso ein asychrones Traceing aufgesetzt hat ist bei den Web Service Enhancements ein wenig mehr zu tun.</p>
<p><strong>Das Ganze ist allerdings mit Vorsicht zu genießen und sollte auf Produktiv-Systemen relativ zügig wieder deaktiviert werden da die entsprechenden Dateien relativ schnell anwachsen&#8230;</strong></p>
<p>- Referenz auf die entsprechende WSE Assembly einfügen</p>
<p>- Die Vererbung der generierten Client-Klasse anpassen</p>
<p>Reference.cs</p>
<pre class="brush:[c#]">public partial class GlobalWeather : Microsoft.Web.Services2.WebServicesClientProtocol</pre>
<p> - App.config der Anwendung erweitern</p>
<pre class="brush:[xml]">&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;configuration&gt;
    &lt;configSections&gt;
 ...
      &lt;section name="microsoft.web.services2" type="Microsoft.Web.Services2.Configuration.WebServicesConfiguration, Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /&gt;
    &lt;/configSections&gt;
 ...
  &lt;microsoft.web.services2&gt;
    &lt;diagnostics&gt;
      &lt;trace enabled="true"
        input="inputTrace.webinfo"
        output="outputTrace.webinfo"/&gt;
    &lt;/diagnostics&gt;
  &lt;/microsoft.web.services2&gt;
&lt;/configuration&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2009/10/30/webservice-traces-mit-wse-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

