Ich hatte gerade das Problem, dass in einem Feld in der Datenbank Einträge wie z.B. "Thomas, Schissler" standen und ich die in "Schissler, Thomas" ändern wollte. Hier hilft folgendes kleines Skript: select CASE LEN(ResponsibleName)
WHEN 0 THEN ResponsibleName
ELSE SUBSTRING(ResponsibleName, charindex ( ',', ResponsibleName )+2, len(ResponsibleName))
+ ', '
+ SUBSTRING(ResponsibleName, 1, charindex ( ',', ResponsibleName )-1)
END
from data
In einem früheren Beitrag habe ich beschrieben, wie man kleinere Listen mit LINQ effizien speichern kann. Hierzu verwende ich einfach ein XML-Feld in der entsprechenden Tabelle und lege die Liste dann dort als XML-Serialisierung ab. Nun stand ich vor der Herausforderung, dass ich direkt auf der Datenbank dieses Feld abfragen wollte. Glücklicherweise beitet T-SQL eine sehr gute XML-Unterstützung, unglücklicherweise gibt es eine vielzahl von Techniken dies zu tun und die Treffer meiner Internetrecherche waren sehr unübersichtlich. Deshalb hier nochmals kurz zusammengefasst, wie ich das gelöst habe. Ich habe in einem Feld folgenden XML-Inhalt der ein Dictionary mit 5 Einträgen repräsentiert: <Root>
<item>
<key>
<int>1</int>
</key>
<value>
<decimal>17.00</decimal>
</value>
</item>
<item>
<key>
<int>2</int>
</key>
<value>
<decimal>17.81</decimal>
</value>
</item>
<item>
<key>
<int>3</int>
</key>
<value>
<decimal>18.62</decimal>
</value>
</item>
<item>
<key>
<int>4</int>
</key>
<value>
<decimal>19.43</decimal>
</value>
</item>
<item>
<key>
<int>5</int>
</key>
<value>
<decimal>20.24</decimal>
</value>
</item>
</Root>
Die Struktur der XML-Daten ist bei allen Datensätzen gleich. Nun wollte ich diese Werte in 5 separaten Spalten ausgeben um diese einfachin Excel weiterverarbeiten zu können. Das macht folgendes Skript:
SELECT PackSIzeID, Units,
u1.l.value('decimal[1]','Decimal(18,2)') AS UnitsYear1,
u1.l.value('decimal[1]','Decimal(18,2)') AS UnitsYear2,
u1.l.value('decimal[1]','Decimal(18,2)') AS UnitsYear3,
u1.l.value('decimal[1]','Decimal(18,2)') AS UnitsYear4,
u1.l.value('decimal[1]','Decimal(18,2)') AS UnitsYear5
FROM data_PackSizes
CROSS APPLY Units.nodes('//Root/item[1]/value') u1(l)
CROSS APPLY Units.nodes('//Root/item[2]/value') u2(l)
CROSS APPLY Units.nodes('//Root/item[3]/value') u3(l)
CROSS APPLY Units.nodes('//Root/item[4]/value') u4(l)
CROSS APPLY Units.nodes('//Root/item[5]/value') u5(l)
Hier kann ich die 5 values als separate Nodes adressieren und dann in der Feldliste entsprechend auswählen. Das Ergebnis sieht dann so aus:
Vielleicht geht das auch noch eleganter, aber für mich hat's erst mal funktioniert und deshalb habe ich hier erst mal nicht mehr Zeit investiert.
Weitere Infos zum Thema: SQL XML-Workshop von Jacob Sebastian
Technet-Whitepapaer: XML Best Practices for Microsoft SQL Server 2005
Die nächste Version der TFS Power-Tools werden ein paar richtig coole Features enthalten sein. Z.B. ein neuer Knoten "Team Members" im Team Explorer über den man mit allen Team-Mitglieder kommunizieren kann und worüber man auch z.B. schnell die Pending Changes oder die Shelfsets einzelner Mitglieder findet etc.   Zusätzlich lassen sich damit Komponenten wie z.B. Checkin-Policies oder Workitem-Controls einfach distributieren.  Und von vielen heiß ersehnt, es gibt jetzt eine Windows Explorer Integration zur Quellcode-verwaltung.   Darüber hinaus ist noch der Power-Shell Support Bestandteil der neuen Power-Tools Weitere Details unter Brian Harrys Blog bharry's WebLog : Preview of the next TFS Power Tools release
 Ok, OK, ich weiß, ich bin spät dran, aber ich möchte dennoch nicht versäumen, einen kurzen Rückblick auf den Herbstcampus zu tun und meine Folien zu veröffentlichen. Interessant war für mich an der Veranstaltung, dass es Tracks sowohl für JAVA als auch .Net gab. Ich selbst hatte zwei Talks: Qualitätsmanagement mit VSTS und TFS In dieser Session habe ich zunächst einmal beleuchtet, warum Entwickler QM nicht unbedingt mögen. Einer der Gründe liegt in der mangelnden Integration von QM in den Entwicklungsprozess. Gerade hier bietet VSTS und TFS einige Verbesserungen. Wichtig ist, dass QM nicht erst mit dem Testing beginnt, sondern bereits früh im Prozess ansetzen muss. Ohne ein gutes Requirement-Management wird kein gutes Qualitäts-Management möglich sein. Im Vortrag habe ich demonstriert, welche Methoden mit diesem Toolset über die verschiedenen Prozessphasen zur Verfügung stehen um in Software-Projekten wirklich mehr Qualität zu erzielen. Agile Development Process - Ein Architektur-basierter Entwicklungsprozess Architektur und Prozesse werden meist getrennt betrachtet. Dass aber gerade eine gemeinsame Betrachtung dieser beiden Themen viele Vorteile bringt, habe ich versucht in dieser Session zu vermitteln. Im Kern ging es darum, dass verschiedene Prozesse wie z.B. das UI Driven Development erst durch eine passende Architektur ermöglicht wird. Sehr gut fand ich auch die Diskussion am Ende meines Vortrags. Das versprochene Whitepaper zu diesem Vortrag wird noch nachgereicht.
SharePoint veröffentlicht die Dokumentbibliotheken per WebDAV, d.h. man kann über \\<Servername>\sites\<ProjektName> beispielsweise auf die Dokumente eines TFS-Projektes zugreifen. Das funktioniert standardmäßig aber nicht von einem Windows 2003 Server aus. Hier muss der WebDAV Client zuerst aktiviert werden. Hierzu muss der Dienst "WebClient" gestartet werden. 
Ab dem 01.10.2008 werden Besitzer einer Visual Studio 2008 Team System Development Edition auch eine Visual Studio 2008 Team System Database Edition erhalten und umgekehrt. In Visual Studio 2010 werden diese beiden Produkte wohl zu einem verschmolzen. Weitere Informationen unter Visual Studio 2010 and .NET Framework 4.0 Overview im Kapitel "Better Together – Visual Studio Team System Development Edition and Database Edition"
Am 08.10.2008 haben wir Stefan Lieser zu Gast bei der .Net Developer-Group Ulm. Er wird in seinem Vortrag einige "Software Design Principles" vorstellen und erläutern wie diese helfen, Software wartbarer wird. Mitglieder und Gäste sind herzlich eingeladen. Weitere Infos unter http://www.dotnet-ulm.de/Treffen.aspx
Eine neue User-Group die sich speziell mit Team System beschäftigt wurde vor kurzem gegründet. Dabei handelt es sich um eine virtuelle usergroup, das heißt die Treffen finden in Second Life und über Office Live Meeting statt. Ich bin schon mal gespannt auf das nächste Treffen. Team System User Group - Virtual Edition
In inzwischen über 47 Videos werden in dieser Serie HowTos rund um das Thema Visual Studio Team System präsentiert. Kurz und verständlich bekommt man hier viele BestPractices und Tips. "How Do I?" Videos for Team System
Es ist wohl noch eine weile hin, bis wir Rosario wirklich nutzen dürfen. Brian Harry hat aber schon mal vorab veröffentlicht, welche Systemvoraussetzungen und Abhängigkeiten Rosario haben wird. So werden wohl unter anderem auch SQL 2005 und Office 2003 nicht mehr unterstützt. Dies gibt jetzt bereits die Möglichkeit, rechtzeitig zu planen und sich auf die Anforderungen ggf. entsprechend vorzubereiten. bharry's WebLog : Charting a course for TFS "Rosario"
Der Team Foundation Server bietet die flexible Möglichkeit ProcessTemplates individuell anzupassen. Diese ProcessTemplates enthalten die Definition der Workitemtypes (welche gibt es und welche Felder haben diese), die Workflows (was passiert wenn ich bei einem bestimmten Workitem eine bestimmte Aktion auslöse), und vieles mehr wie Standarddokumente etc. Dieses ProcessTemplate kann man nicht nur im Vorfeld definieren, sondern auch für laufende Projekte noch anpassen, was in der Praxis eine enorme Hilfe ist. Wie's genau geht beschreibt Christian Binder in einem zweiteiligen Blog-Beitrag. Teil 1 Teil 2
Richard Hundhausen hat eine Liste mit Tools und nützlichen Helferlein rund um Team Foundation Server veröffentlicht. Team System Widgets
am 08.09.2008 findet bei der .Net Developergroup Ulm ein 'Cool Tipps' Wettbewerb statt. Idee hinter diesem Wettbrewerb ist, einen stärkeren Austausch innerhalb der Community zu erreichen. Mit diesem besonderen Event wollen wir auch das 2-jähriges Bestehen unserer Usergroup und hoffentlich auch das 200. Mitglied feiern. Jeder Entwickler hat seine kleinen Tricks um bestimmte Aufgaben schnell, effizient und elegant zu erledigen. Unser Ziel ist ein Austausch dieses Wissens. Aus diesem Grunde wollen wir am 08. September einen ganz besonderen Wettbewerb veranstalten. Die Mitglieder der .net Developergroup Ulm sind aufgerufen, ihr Knoff-Hoff in einer Kurzpräsentation vorzustellen. Das vorgestellte Thema kann aus einem weiten Bereich gewählt werden. Egal ob es sich um ein Code-Snippet handelt, um ein Tool, eine spezielle Methode oder ein Designpattern. Alles was mit der .Net Programmierung zu tun hat ist von Interesse. Und jeder Teilnehmer kann wertvolle Sachpreise gewinnen. Mitmachen lohnt sich! Hier die Rahmenbedingungen für den Wettbewerb: - Teilnahmeberechtigt sind alle Mitglieder der .net Developergroup Ulm
- Jeder Teilnehmer erhält 10 Min. für seinen Beitrag
- Alle Beiträge müssen in einem Zusammenhang mit der Programmierung unter .Net stehen.
- Die Besucher der Veranstaltung wählen am Ende die besten Beiträge, die mit wertvollen Sachpreisen belohnt werden.
- Themenvorschläge sind bis spätestens 31.08. per E-Mail einzureichen unter info@dotnet-ulm.de
Sachpreise: - 1 Enterprise Studio-Lizenz (Wert 1100$) von
| | - 2 RadControl-Lizenzen (Wert je 1299$) von
| | - 1 ReSharper-Lizenz (Wert 140€) von
| | - 3 Jahres Abos (Wert je 76,50€)von
| | - 5 Buchgutscheine (a 60 €) von
| | Bereits angemeldet Themen: - Lokalisiertes Property-Grid
- Vista Gadgets programmieren
- Broadcast Messages mit Controls
- Zeitspar-Tools für TFS
- Object Cloner
- Data Sets per WCF übertragen
- PDF- und Excel-Export aus ASP.Net mit Bordmitteln
- Generische Fehlerklasse
- Beliebige Datenformate per Serialisierung erzeugen und lesen
Wer noch Interesse hat, am Wettbewerb teilzunehmen, kann gerne noch einen Vortrag an info@dotnet-ulm.de einrichen. Und natürlich sind alle interessierten gerne als Zuhörer willkommen. Und vielleicht schaffen wir es ja doch noch bis zum 08.09 die fehlenden 7 Mitglieder zu gewinnen, um die 200 voll zumachen.
Bei der Neuinstallation eines Entwicklungsrechners dauert es immer ewig, bis man sich die ganzen nützlichen Helferlein zusammengesucht hat, die man im Laufe der Zeit zu schätzen gelernt hat. Deshalb habe ich mir gedacht, ich schreibe mir mal eine Liste, die ich dann immer wieder ergänzen kann. Und vielleicht ist für den einen oder anderen da auch noch was interessantes dabei. Also so könnte ein Entwicklungsrechner aussehen:
Betriebsystem / Standardanwendungen:
- Windows Vista Ultimate
- Office 2007
- SQL-Server 2005 Express
- SQL-Server 2005 Management Studio
Entwicklungsumgebung:
Tools
Stand 30.10.2008 To be continued...
Über das Erscheinen des .Net Framework 3.5 SP1 haben ja bereits genügen Leute berichtet, da muss ich jetzt nicht noch einen draufsetzen. Wer möchte, kann sich den recht ausführlichen Blog-Beitrag von Dariusz anschauen. Ich habe natürlich auch sofort das SP installiert. Die letzten 3 Std. habe ich damit zugebrach einen Fehler zu finden. Und was soll ich sagen, das Problem liegt am SP. Folgende Situation. Ich arbeite an einem Projekt, das intensiv ASP.Net AJAX nutzt. Dort habe ich an verschiedenen Stellen die Übergabe von Daten aus dem CodeBehind an Javascript. Diese löse ich, indem ich im Code behind folgenden Code verwende: ScriptManager scriptManager = ScriptManager.GetCurrent(Page);
scriptManager.RegisterDataItem(this, "StringToTransfer");
In Javascript kann ich dann auf diese Werte zugreifen:
function EndRequestHandler(sender, args) {
if (sender._dataItems != null) {
if (sender._dataItems.__Page != null) {
if (sender._dataItems.__Page == 'StringToTransfer') {
fnShowSizedPopup('../../Web/Search/CopyProducts.aspx', 500, 400);
}
}
}
}
Das hat bisher problemlos funktioniert. Nach der Installation des SP1 war allerdings sender._dataItems immer null. Nachdem ich das SP1 deinstalliert habe, funktioniert es wieder wunderbar. Na ich werde jetzt wohl erst mal ohne SP1 leben und mir bei Gelegenheit mal anschauen, wie ich das Problem umgehe. Oder hat vielleicht jemand eine Idee, woran das liegen könnte?
Nachtrag:
Dank Hannes habe ich eine Lösung gefunden. Im obigen Beispiel muss man sender._dataItems mit args.get_dataItems() ersetzen, dann klappt's auch mit dem SP1
 Zusammen mit Christian Binder habe ich nun einen MSDN Webcast aufgenommen der sich mit dem Thema UI Events und Record & Play für UI Testing beschäftigt. Dieser Webcast ist als Fortsetzung zum Thema UI Testing mit dem UI Automation Framework aufgebaut. Der Webcast selbst wird als Download ab dem 08.08.08 (cooles Datum) verfügbar sein. Den Demo_Code zum Webcast kann man ab sofort hier runterladen. Kurz hier der Inhalt des Webcasts zusammengefasst. Über das UI Automation Framework kann man Events aus einer Anwendung abfangen. Diese Events kann man zunächst am besten mit dem UISpy untersuchen. Nun kann man einen kleinen Recorder erstellen, der diese Events nutzt, um Benutzereingaben in einer Anwendung zu erkennen und automatisiert Code erstellt, der diese Benutzereingaben simuliert. Dieser Code kann nun in einem Unit-Test genutzt werden um automatisiert im Rahmen eines Testdurchlaufes die Benutzerinteraktion zu wiederholen. Der Clou dabei ist, dass sogar die Asserts für die erwarteten Ergebnisse automatisiert aufgezeichnet werden können. Download Demo-Code Download Webcast
| |