Schlagwörter: SQL Server Kommentarverlauf ein-/ausschalten | Tastaturkürzel

  • Christian

    Christian 09:00 am 10. April 2009 permalink | Antwort
    Tags: , linq, SQL Server   

    LINQ mit dem .NET Framework 2.0 nutzen 

    LINQ ist ein neues Feature von C# 3.0 und VB 9, das mit dem .NET Framework 3.5 Einzug erhält.

    Klar, dass .NET Anwendungen, die LINQ verwenden, dann auch ein installiertes .NET Framework 3.5 erfordern? Nicht ganz!

    Schaut man sich .NET 3.5 genauer an, stellt man fest, dass die CLR sich nicht geändert hat, also die Laufzeitumgebung immernoch die des Frameworks 2.0 ist. Auch der C# 3.0 bzw. VB9 Compiler generiert MSIL, die 100% kompatibel zu .NET 2.0 ist.

    Und genau dadurch wird es möglich, Anwendungen, die lokale Linq Queries (also Linq-to Objects) einsetzten, auch auf dem .NET Framework 2.0 auszuführen. Möglich macht dies das Multi Targeting feature von Visual Studio 2008 und eine nur 60kb große Assembly LinqBridge, die vom LinqPad Author zur freien Verfügung gestellt wird.

    Wie das genau funktioniert, wird in diesem Artikel beschrieben:
    http://www.albahari.com/nutshell/linqbridge.aspx

     
  • Christian

    Christian 22:38 am 25. November 2008 permalink | Antwort
    Tags: DelayValidation, Excel, ExcelFilePath, FileAttachments, SQL Server, SSIS   

    SSIS Paket – Dynamisches Excel Ziel erzeugen 

    Ich stand vor einigen Tagen wieder einmal vor einem „kleinerem“ Problem:

    SQL Server Integration Services (SSIS)
    Mit diesem Dienste lassen sich einfach und schnelle Abfolgen von Prozessen eines SQL Servers abbilden, ein Beispiel- Statemant auf eine Datenquelle ausgeführt wird (select * from Tabelle) diese Ausgbae lässt sich einwandfrei im Designer eintragen. Hier ein kleiner Screenshot.

     

    Das Problem ist, dass das Ergebnis der Abfrage immer in die gleiche Excel-Datei geschrieben wird und diese somit für eine bsp. monatliche neue Auswertung unnütz ist. Somit habe ich folgende Lösung entwickelt um für jeden Monat eine Datei bereitzustellen.

    1. Task ‚SQL‘ erstellen, dieser baut die Struktur der Excel Datei auf und zwar mit folgendem Script:

    CREATE TABLE `auswertung` (
    `QuartalsID` Long,
    `QBegin` DateTime,
    `QEnde` DateTime
    )

    Zu beachten ist hier der ConnectionType der muss auf EXCEL stehen und das SQLStatement s. oben, dieser Task ist nun dafür verantwortlich das bei jedem neuen Durchlauf eine neue Excel-Datei mit den zu füllenden Spalten erstellt wird.

     

    2. Nun hängen wir noch einen Datenfluss-Objekt darunter dieser holt die eigentlichen Daten vom Server und schiebt diese in das Excel-Ziel. Um eine Connection anzugeben muss man einen Excel-Verbindungsmanager anlegen, Ihr werdet euch wahrscheinlich wundern, das dieser Manager sehr zwanghaft an eine Excel-Datei halten möchte, gebt Ihm diese am Anfang mit, ansonst könnt Ihr keinen Manager erstellen, im Nachgang ist es wichtig folgende Eigenschaften richitg auszuwählen:

    2. a) „Rechtsklick“ –> Eingenschaften eures ConncectionManagers und stellt dort ersteinmal die Expression auf dass Attribute „ExcelFilePath“ so ein(E: ist mein LW Pfad, Ihr könnt euch gern auch eine Variable deklarieren, und diese angeben):

    „E:\auswertung_“ +  (DT_WSTR,30)( DAY( GETDATE()))  + „_“ +  (DT_WSTR,30)(MONTH( GETDATE())) + „_“ + (DT_WSTR,30)(YEAR(GETDATE())) +  „.xls“

    Dieses Command lautet wie folgt: name_DAY_MONTH_YEAR

     

    Nicht zu vergessen beim Excel-Ziel muss der gerade neu angelegte Excel-Verbindungsmanager angeben werden und das CREATE TABLE Statement auf diese Verbindung ausgeführt werden, nun wird der Name der Tabelle = Arbeitsmappen.Name vergeben und die Spalten, nur wenn das passiert kann eine Zuweisung der Daten aus der Datenbankquelle in die Excel Datei automatisch stattfinden, achtet darauf das die Spaltennamen immer gleich sind, habt Ihr Probleme mit Konvertierungen der Datentypen, dann nutzt bitte einen Datenkonvertierungs-Objekt, dieses erläutere ich später einmal in einem gesonderten Blog.

    So erster größer Schritt ist getan, nun geht es weiter…

    Hier der Datenfluss-Task als Bild (OLDB-Connection muss je nach euren Server/User/PW konfiguriert werden):

     

    3. Nun gehen wir zur Ablaufsteuerung zurück, hier konfigurieren wir nun unser Mail Task, der Mail Task hat die gängigen Eigenschaften eines Mail-Objektes nur weis das liebe Mail-Objekt nicht das wir jeden Monat einen anderen Datinamen haben der hinzugefügt werden muss, kein Problem dies lässt sich ganz einfach lösen:

    Aufruf Einstellungen dann auf Ausdrücke und dort fügen wir 2 Expressions hinzu:

    • DelayValidation = True (gibt an, ob die Überprüfung des auszuführenden Objektes zur Lauzeit verzögert wird)
    • FileAttachments = „E:\auswertung_“ +  (DT_WSTR,30)( DAY( GETDATE()))  + „_“ +  (DT_WSTR,30)(MONTH( GETDATE())) + „_“ + (DT_WSTR,30)(YEAR(GETDATE())) +  „.xls“

    Das Mail-Objekt schaut nun bei jedem neuen Durchgang, wie diese Excel Datei heist und kann sie ganz Artig dem Mail-Objekt beifügen.

    So das wars, somit könnte man dieses Package an einen SQL Server Agent hängen und einen neuen Auftrag hinzufügen, der nun im am ersten des Monats eine Auswertung per Email versenden und die Excel Datei befügt.

    Schick oder 🙂

     
    • Hans Furmann 10:05 am 18. November 2009 permalink | Antwort

      Hallo, schöne Lösung.
      Ich habe ein ähnliches Problem:
      Monatlich bekomme ich eine Excel-Liste, deren erstes Tabellenblatt (der Name lässt sich aus dem Namen der EXCEL-Datei ermitteln) ich auslesen und weiter verarbeiten muss.
      Zum einen muss ich die Daten in eine SQL-Server-Tabelle kopieren, was bisher in einer Data_Flow-Task passiert, zum anderen muss ich den Inhalt des Tabellenblatts in eine Textdatei kopieren, deren Name lässt sich ebenfalls aus dem Namen des Tabellenblatts ableiten.
      Leider habe ich keine Idee, wie ich das meinem SSIS-Paket beibringen kann. Das SSIS-Paket meldet mir einen Fehler, wenn in der EXCEL-Source vor dem Start des Scripts, das den Namen der EXCEL-Datei ändert, ein unbekanntes Tabellenblatt angegeben ist.
      Das ist dann auch das nächste Problem: Wie kann ich in der EXCEL-Source bei Start des Paketes den Namen des Tabellenblatts anpassen?
      Und alles wie gesagt, ohne dass das Paket mir einen Fehler meldet.

      Gruß

      cheapy

c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
Shift + Esc
cancel