Mehrere Stored Procedures im SQL Server Management Studio selektieren

7. Januar 2010

Für die Verwaltung und die Entwicklung auf SQL Server stellt Microsoft SQL Server Management Studio zur Verfügung. Ein Problem, das ich schon öfter hatte, ist das Selektieren von mehreren Objekten im Object Explorer, um z.B. mehrere Stored Procedures auf einmal zu löschen. Das geht leider nicht.

Wesley Brown hat mir hierzu einen Tipp gegeben: Object Explorer Details. Dieser kann über View -> Object Explorer Details bzw. F7 erreicht werden.

Damit können dann auch mehrere Stored Procedures auf einmal gelöscht werden.

 

Development

Kommunikation mit UserControls über eine MasterPage in ASP.NET

4. April 2007
Die in ASP.NET 2.0 eingeführte MasterPage erfreut sich zunehmender Beliebtheit. Denn mittels dieser lassen sich Elemente, die auf allen Seiten einer Anwendung gleich sein sollen, einmalig erstellen und verwenden. Damit ist die MasterPage ein Pflichtelement für jede ASP.NET Webanwendung.
Nun stellt sich aber die Frage, wie Controls, die in der MasterPage liegen mit anderen Controls bzw. UserControls auf der jeweiligen Seite (bzw. im ContentPlaceHolder) kommunizieren sollen? Die MasterPage weiss ja noch gar nicht, welche Controls in der Seite enthalten sind. Eine mögliche Lösung möchte ich hier skizzieren:
Bei diesem Beispiel enthält die MasterPage einen Button und eine TextBox. Sobald auf den Button geklickt wird, soll der Text an die UserControls geschickt werden, die sich für diesen Text interessieren. Das Interesse an einem Text lässt sich recht gut über ein Interface definieren:

public interface ITextConsumer
{
    void HandleTextEvent(object sender, TextEventArgs e);
}


Die Nutzinformation, also der Text wird mittels eines Event Arguments übermittelt:

public class TextEventArgs : EventArgs
{
    private string text;

    public string Text
    {
        get { return text; }
        set { text = value; }
    }
}


Die UserControls, die sich nun für den Text interessieren müssen einfach das Interface ITextCosumer implementieren:

public partial class WebControls_DataControl : System.Web.UI.UserControl, ITextConsumer
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    #region ITextConsumer Member
    public void HandleTextEvent(object sender, TextEventArgs e)
    {
        ' Process the Text. E.g. search in the database etc.
    }
    #endregion
}


In der MasterPage muss nun im Click Ereignis des Buttons die Controls Collections des ContentPlaceHolders durchlaufen werden. Dabei wird jedes Controls auf das Interface ITextCosnumer gecastet. Klappt der Cast, wird der Text über die im Interface definierten Methode übermittelt.

protected void Button1_Click(object sender, EventArgs e)
{
    TextEventArgs text = new TextEventArgs();
    text.Text = this.TextBox1.Text;
       
    foreach (Control cntl in this.ContentPlaceHolder1.Controls)
    {
        ITextConsumer eventConsumer = cntl as ITextConsumer;
        if (eventConsumer != null)
        {
            eventConsumer.HandleTextEvent(this.Page, text);
        }
    }
}


Das war's! Diese Lösung funktionert recht gut mit direkt in den Seiten implementierten UserControls. Enthalten die UserControls selbst noch weitere Controls, die sich für den Text interessieren, muss diese Information evtl. weitergereicht werden (hier auch wieder die Controls Collection durchlaufen).


Development, .NET, ASP.NET

Howto debug Javascript in Visual Studio

13. März 2007

In Zeiten, in denen immer mehr Javascript in ASP.NET Webanwendungen Einzug hält, ist das Debuggen von Javascript unumgänglich. Mit folgenden Handgriffen wird das Debuggen in Visual Studio ermöglicht:

1. JavaScript Debugging im Internet Explorer einschalten (durch deaktivieren der Skriptdebuggingeinträge):


2. Im Javascript Code die Zeile

debugger;

hinzufügen. Das Debugging wird dann genau an dieser Stelle bei in Visual Studio gestarteten Anwendungen aktiviert.

 

ASP.NET, Development

Lokalisierung in ASP.NET 2.0

15. Februar 2007
Die Lokalisierungsmöglichkeiten von ASP.NET 2.0 sind schon recht cool, aber immer wieder muss ich nach der genauen Schreibweise zur Verwendung von Resourcedateien in aspx oder ascx Seiten bei Goolge forschen. Daher

<%$ Resources:Resource,TextInResourceDatei %>

Hierbei wird die Resource TextInResourceDatei aus dem Resourcefile Resource.resx verwendet.

Development, ASP.NET

Kommentarheader für ASP.NET Seiten mit Subversion Keywords

9. Februar 2007
Subversion unterstützt das Ersetzen von Keywords im Sourcecode. Hierzu müssen für die jeweiligen Dateien die entscheidenen Properties gesetzt werden. Beispiel: HeadURL LastChangedBy LastChangedRevision LastChangedDate

In C# Dateien sieht dann ein Kommentarheader folgendermaßen aus:

//===============================================================================
// $HeadURL$
// $LastChangedBy$
// $LastChangedRevision$
// $LastChangedDate$
// Copyright   : 2006-2007, ITDevCon Germany
// Autor       : Sven Soennichsen
// Beschreibung: Ausführliche Beschreibung
//===============================================================================


In ASPX Dateien empfiehlt sich folgendes Format:

<%--
  //===============================================================================
  // $HeadURL$
  // $LastChangedBy$
  // $LastChangedRevision$
  // $LastChangedDate$
  // Copyright   : 2006-2007, ITDevCon Germany
  // Autor       : Sven Soennichsen
  // Beschreibung: Ausführliche Beschreibung

  //===============================================================================
--%>

Subversion ersetzt dann beim Commit die Keywords mit den tatsächlichen Tatbeständen.

Development, Subversion

Nachtrag zum .NET Usergroup Treffen in HH

9. Februar 2007
Hier ein kleiner Nachtrag zum .NET Usergroup Treffen in Hamburg, das jeden ersten Mittwoch im Montag im Irish Pub im Fischhafen stattfindet:

Thema war die Windows Workflow Foundation (WF), welche Bestandteil von .NET 3.0 ist. Da das Thema sich nicht gleich vollständig bei einem Gläschen Bier erschließt, hier einige Links, die weiterführende Infos enthalten:

  1. Die Powerpoint Folien zum Vortrag von Sebastian Weber gibt es hier.
  2. Super kleine Webcasts zum Thema WF gibt es unter wf.netfx3.com. Einfach unter Samples/Information/Screencasts die entsprechenden Dateien runterladen. Jeder Webcast dauert zwischen 10 und 15 Minuten und führt ideal in die Windows Workflow Foundation ein.
  3. Das Windows SDK for Vista and .NET 3.0 enthält viele Samples und die Dokumentation zu WF.
  4. Zur Entwicklung von Workflows braucht man den graphischen Designer als Visual Studio Extension.

Viel Spaß in der neuen Welt der Workflows!

Übrigens, beim nächsten Usertreffen am 7.3.2007 werden wir nochmals das Thema Workflow Foundation behandeln. Vielleicht bringen ja mal einige Sharepoint Entwickler Ihr Notebook mit und erzählen von Ihren Erfahrungen...

Development, .NET, Veranstaltungen, Vista

.NET 3.0 ist da!

8. November 2006
Nach vielen CTP's und 2 Betas ist die Version Nummer 3 des .NET Frameworks released worden. Allerdings hat sich bei den bestehenden .NET Komponenten nichts geändert, sondern es sind lediglich neue aber sehr interessante Komponenten hinzugekommen:
  • Windows Presentation Foundation
  • Windows Communication Foundation
  • Windows Workflow Foundation
Insofern wäre die Versionsnummer 2.5 für das Framework eigentlich eher angebracht gewesen, denn bei den Sprachelementen bleibt alles wie gehabt.

Mehr Infos und Links zum Download

Development, .NET

Kommunikation zwischen eigenen User Controls in ASP.NET

8. November 2006
Als ein ganz wichtiges Mittel zur Kapselung von immer wiederkehrenden Bestandteilen bei ASP.NET Webanwendugen existieren User Controls. Im Gegensatz zu Custom Controls lassen sich User Controls recht schnell und einfach innerhalb einer Anwendung erstellen, können aber nicht wie Custom Controls in anderen Anwendungen weiterverwendet werden.
Prinzipiell sollte man User Controls immer als eigenständige Einheit ohne Abhängkeiten zu anderen Controls oder Seiten entwickeln. Was aber, wenn man einem anderen User Control ein Ereignis senden will bzw. eine Methode aufrufen will? Beispiel: ein User Control für eine Statuszeile. Andere User Controls sollen dem Statuszeilencontrol den aktuellen Zustand mitteilen. Beispielsweise, daß Daten erfolgreich geladen oder aktualisert worden sind. Diese Infos gehören eigentlich zum guten Stil, denn in Zeiten von Ajax kann der User nicht mehr anhand des fehlenden Flackerns beim Postback erkennen, ob eine Aktion nun ausgeführt worden ist oder nicht.

Zum Senden einer Nachricht an so ein Statuszeilecontrol bedarf es erst einmal einer Klasse zur Aufnahme der Argumente:

public class StatusMessageEventArgs : EventArgs{
  private string _message;
  private int _type;

  public enum Types {
    Info,
    Error
  }

  public String Message {
    get {
            return _message;
         }
    set {
            _message = value;
         }
  }

  public Types Type {
    get {
            return (Types)_type;
         }
    set {
            _type = (int)value;
         }
    }
}


Hier wird einerseits eine Message als String übergeben, als auch der Typ der Message: Info oder Error.
Als nächstes benötigen wir eine öffentliche Methode in dem Statuszeilencontrol, dass die Nachricht empfangen und verarbeiten soll:

public void HandleStatusMessageEvent(object sender, StatusMessageEventArgs e) {
  if (e.Type == StatusMessageEventArgs.Types.Info) {
    this.TextInfo = e.Message;
  }
  else {
    this.TextError = e.Message;
  }
}


This.TextInfo und this.TextError sind nur weitere private Properties, die die Statuszeile entsprechend aktualiseren.
Im User Control, daß eine Nachricht an das Statuszeilencontrol senden will, muß ein Eventhandler definiert werden:

public event EventHandler OnSendStatusMessage;

Dieser Eventhandler kann dann entsprechend im User Control aufgerufen werden:

if (OnSendStatusMessage != null) {
  StatusMessageEventArgs message = new StatusMessageEventArgs();
  message.Type = StatusMessageEventArgs.Types.Info;
  message.Message = "Daten sind aktualisert worden";
  OnSendStatusMessage(this, message);
}

Letztendlich muss dann auf der Seite, die die beiden User Controls enthält eine Verknüpfung zwischen Eventhandler und der Methode hergestellt werden:

this.MyUserControl.OnSendStatusMessage += new
EventHandler (this.StatusControl.HandleStatusMessageEvent);

Das war's! Durch diese recht lose Kopplung können User Controls miteinander kommunizieren. Die Aufgabe der Verknüpfung der Controls übernimmt dann immer die Seite, in die die User Controls aufgenommen werden.

Development, ASP.NET

Visual Studio 2005 Performance Probleme bei ASP.NET Projekten

17. Oktober 2006
Wenn's mal wieder länger dauert beim Build: Prüfen, ob Verweise bzw. eingebundene Assemblies mit einer Refresh Datei (wie Assembly.dll.refresh) versehen sind. Diese Datei sorgt bei jedem Build dafür, dass geprüft wird, ob einen neue Version der Assembly vorliegt und das kann den Buildprozess extrem ausbremsen. In einem Projekt von mir benötigte ein Build mit einer Vielzahl von Refresh Dateien so ca. 2 Minuten, nach dem Löschen der Refresh Dateien waren es nur noch 10 Sekunden.
Das Löschen ist recht gefahrlos. Man muss dann nur selbst dafür sorgen, dass die Assemblies immer aktuell sind.

Development, .NET, ASP.NET

Windows Workflow Foundation

25. Juli 2006
Auf der Suche nach Tipps und Tricks zu der Windows Workfow Foundation bin ich auf folgende Blogs gestossen:

Advanced Workflow: Enabling Tricky Scenarios:

blogs.msdn.com/sonalic/

Paul Andrew

Development, .NET