Freigeben über



Juni 2017

Band 32, Nummer 6

Data Points – Visual Studio Code: Erstellen einer Datenbank-IDE mit der MSSQL-Erweiterung

Von Julie Lerman | Juni 2017

Julie LermanAuch wenn Visual Studio noch immer meine Standard-IDE für komplexe .NET-Entwicklung ist, war ich von Visual Studio Code (VS Code) sofort angetan, und zwar unabhängig davon, ob ich in C#, JavaScript oder Node bzw. unter Windows oder macOS arbeite. Natürlich werden noch viele andere Sprachen und Frameworks von VS Code und seinen unzähligen Erweiterungen unterstützt, aber dies sind meine aktuellen Tools. Mit meiner Begeisterung für VS Code stehe ich nicht allein da. Bei der Einführung von Visual Studio 2017 im März 2017 hat Microsoft bekanntgegeben, dass VS Code von 1,3 Millionen aktiven Benutzern im Monat verwendet wird. Es ist wirklich großartig, dass jedes Mitglied Ihres Teams sein Lieblingsbetriebssystem (wie bei jedem plattformübergreifenden Tool) auswählen kann und trotzdem alle Mitglieder die gleichen Codierungstools verwenden können.

Und es geht um Daten. Es geht immer um Daten. Jahrelang habe ich nur mit SQL Server gearbeitet und Windows-Anwendungen codiert. In den letzten Jahren habe ich aber meinen Horizont erweitert, und zwar nicht nur durch eine neue IDE (VS Code), sondern auch durch neue Datenbanken und neue Plattformen (ich schreibe diesen Artikel z. B. auf meinem MacBook Pro).

Mein Ausflug in VS Code begann als Teil meiner Untersuchungen von Node.js, an denen Sie in dieser Kolumne teilnehmen konnten. Das geschah ursprünglich unter Windows. Da VS Code jedoch plattformübergreifend ist (mit Electron erstellt), führte dies für mich irgendwann zu einem Hin und Her beim Arbeiten am gleichen Code. Manchmal unter Windows, manchmal unter macOS mit GitHub als Bindeglied. Dank der C#-Erweiterung und der plattformübergreifenden Natur von .NET Core wagte ich mich schließlich über Node.js hinaus, um .NET Core-Apps mit EF Core in beiden Umgebungen zu schreiben. Wenn ich in Visual Studio arbeite, verlasse ich mich größtenteils auf die integrierten SQL Server Data Tools und die SQL CE-/SQLite-Toolboxerweiterung, um die meisten Daten zu untersuchen, die meine Apps erstellen. Mit VS Code benötige ich jedoch eine externe Komponente zum Untersuchen der Daten. Bei der Arbeit mit Windows und dem extrem schlanken VS Code fühlte es sich nie richtig an, SQL Server Management Studio zu öffnen, das alles andere als „schlank“ ist. Für andere Datenbanken habe ich auf meinen Windows- oder Mac-Computern auch DataGrip von JetBrains (jetbrains.com/datagrip) verwendet, ein plattformübergreifendes Datenbanktool, das eine breite Palette von Datenbanken unterstützt.

Durch die Ausdehnung des Universums der Erweiterungen für VS Code (knapp unter 3.000, während ich dies Ende April 2017 schreibe), sind jedoch zahlreiche Erweiterungen für die Interaktion mit Datenspeichern verfügbar geworden. Zwei dieser Erweiterungen, mit denen ich bereits gearbeitet habe, sind die MSSQL-Erweiterung (bit.ly/2gb2ICf) vom SQL Server-Team und die vscode-database-Erweiterung für SQLite und PostgreSQL (bit.ly/2mh8nYF). Diese Erweiterungen ermöglichen das Schreiben und Ausführen von SQL-Code für Ihre Datenbanken. Sie können Demos beider Erweiterungen in meinem Pluralsight-Kurs „Entity Framework Core: Erste Schritte“ sehen. Es sind noch weitere datenbezogene Erweiterungen verfügbar, z. B. für die Interaktion mit Azure Data Lake- (ebenfalls von Microsoft), Redis- und SalesForce-Daten. Einige dieser Erweiterungen befinden sich noch in der Previewphase. Dies gilt auch für die MSSQL-Erweiterung.

In diesem Artikel zeige ich Ihnen einige Grundlagen der Verwendung der MSSQL-Erweiterung. Ursprünglich hatte ich geplant, über MSSQL und vscode-database zu schreiben. MSSQL besitzt jedoch so viele Features, dass ich mit deren Erforschung viel Spaß hatte und die Längenvorgabe für diese Kolumne schnell erreicht war. Für die Verwendung von MSSQL ist es egal, ob Sie unter Windows, macOS oder Linux arbeiten.

Mithilfe der MSSQL-Erweiterung können Sie mit einer Vielzahl von SQL Server-Datenbanken interagieren: mit Microsoft SQL Server, der Azure SQL-Datenbank und SQL Data Warehouse. Da ich zurzeit vor einem MacBook sitze, stelle ich eine Verbindung mit einer externen SQL Server-Datenbank her. Vielleicht wissen Sie schon, dass SQL Server jetzt auch unter Linux ausgeführt werden kann. Ist das nicht fantastisch? Es bedeutet, dass Sie einen Docker-Container erstellen können, der SQL Server ausführt. Ich werden in diesem Artikel nicht so vorgehen, aber ich habe einen Blogbeitrag zu diesem Thema geschrieben, den Sie unter bit.ly/2qaev9r lesen können. Ich werde aber eine Verbindung mit einer Azure SQL Server-Datenbank in der Cloud herstellen. Dies zeigt eindrucksvoll, dass Sie kein Windows-Entwickler oder -Administrator oder C#-Entwickler sein müssen, um die Vorteile von SQL Server nutzen zu können. Sie können die Datenbank im Azure-Portal verwalten und mit jedem beliebigen App-Typ eine Verbindung mit ihr herstellen. Also: Angenommen, Ihre App ist eine PHP-App, Sie verwenden die PHP-Erweiterung für VS Code und kommunizieren mit einer SQL Server-Datenbank unter Azure. 

Ich habe das kostenlose Azure-Konto und die Vorteile genutzt, die sich aus einem Visual Studio-Abonnement ergeben, um eine Azure SQL-Datenbank zu erstellen, die auf dem AdventureWorks-Beispiel basiert. Die Dokumentation zur Vorgehensweise finden Sie unter bit.ly/2o2IDTy.

Zurück in VS Code können Sie die MSSQL-Erweiterung installieren, indem Sie in der Aktivitätsleiste von VS Code auf das Erweiterungssymbol klicken, auf „mssql“ filtern und dann auf die Schaltfläche „Install“ klicken. Sie werden aufgefordert, VS Code erneut zu laden, wenn die Anwendung bereit ist. Denken Sie jedoch daran, dass die Installation eines Teils der Erweiterung erst stattfindet, wenn Sie einen ihrer Befehle verwenden. Beachten Sie, dass für macOS OpenSSL installiert werden muss. Details finden Sie im Link zur MSSQL-Dokumentation (weiter oben in diesem Artikel).

MSSQL installiert nicht nur das Abfrageausführungsmodul, sondern auch zahlreiche Befehle in der Befehlspalette von VS Code. Es ist sinnvoll, zuerst eine Verbindung mit Ihrer Datenbank herzustellen. Andere Funktionen fordern Sie aber auch auf, eine Verbindung herzustellen, wenn dies noch nicht geschehen ist.

Öffnen Sie die Palette mit F1 (oder mit STRG oder BEFEHL+UMSCHALT+P, wenn Sie eine dieser komischen Tastaturen ohne Funktionstasten verwenden), und geben Sie dann „MS SQL“ ein, um auf alle MSSQL-Befehle zu filtern. Wenn Sie keine anderen Erweiterungen verwenden, die Befehle mit dem Schlüsselwort „SQL“ bereitstellen, reicht „SQL“ allein aus. Es gefällt mir sehr gut, dass ich selbst Hilfedateien mit dem Befehl „Getting Started Guide“ abrufen kann. Sie können auch verschiedene Verbindungen speichern und dann auf einfache Weise mit dem Feature „Manage Connection Profiles“ eine Verbindung herstellen.

Das einfachste Verfahren zum Interagieren mit MSSQL besteht darin, eine Datei für die Bearbeitung geöffnet zu haben und sicherzustellen, dass VS Code informiert ist, dass Sie SQL bearbeiten. Dank des Befehls „New Query“ ist dies möglich, wenn Sie einen Ordner oder ein Projekt geöffnet haben. Es wird eine Datei „SQLQuery.sql“ erstellt, und die SQL-Erweiterung bewirkt, dass VS Code in den MSSQL-Editor wechselt. Der aktuelle Editor wird in der unteren rechten Ecke von VS Code angezeigt und ändert sich basierend auf Dateierweiterungen, um Ihnen die richtigen IntelliSense- und anderen relevanten Features bereitzustellen, die von der Erweiterung zur Verfügung gestellt werden. Sie können auf die angezeigte Angabe klicken, um sie bei Bedarf zu ändern. Der MSSQL-Editor unterstützt Sie nicht nur beim Schreiben von TSQL, sondern weiß auch, wie Abfragen und andere durch die Erweiterung definierte Tasks ausgeführt werden.

Wählen Sie „MS SQL“ aus, während eine SQL-Datei im Editor geöffnet ist: „Connect“ aus der Befehlspalette zeigt eine Liste der vorhandenen Verbindungsprofile an, die Sie bereits erstellt haben, und ermöglicht das Erstellen eines neuen Profils. Wählen Sie „Create Connection Profile“ aus. Sie werden dann zur Eingabe jedes Schlüsselelements der Verbindungszeichenfolge aufgefordert. Die erste Eingabeaufforderung fragt z. B. nach dem Servernamen. Abbildung 1 zeigt dies. Meine SQL Azure-Datenbank befindet sich auf einem Server namens „thedatafarmsqlerver.database.windows.net“. Diese Angabe gebe ich daher ein.

Herstellen einer Verbindung mit einer SQL-Datenbank mit der MSSQL-Erweiterung
Abbildung 1: Herstellen einer Verbindung mit einer SQL-Datenbank mit der MSSQL-Erweiterung

Im nächsten Schritt werden Sie zur Eingabe des Datenbanknamens, Ihrer Anmeldeinformationen und Ihres Passworts sowie eines optionalen Profilnamens aufgefordert. Übrigens können Sie auch über „Manage Connection Profiles“ an diesen Punkt gelangen, weil dort eine Menüoption „Create“ verfügbar ist.

Sobald Sie die Verbindungsinformationen eingegeben haben und die Verbindung erfolgreich hergestellt wurde, wird das Profil in der Datei mit den Einstellungen von VS Code gespeichert. Wenn ein Verbindungsfehler auftritt, wird das Profil in Version 0.3 nicht gespeichert. Dieses Verhalten wird sich jedoch bald ändern. Sie können das gespeicherte Profil anzeigen, indem Sie aus dem VS Code-Menü oder über die Tastenkombination STRG oder BEFEHL+, (Komma) zu „Preferences and Settings“ navigieren. Das folgende Beispiel zeigt ein Verbindungsprofil:

"mssql.connections": [
  {
    "authenticationType": "SqlLogin",
    "server": "thedatafarmsqlserver.database.windows.net",
    "database": "AdventureWorksSample",
    "user": "me",
    "password": "mypassword",
    "savePassword": true,
    "profileName": "AzureAWSample"}
  }
]

Da die Profile in den Einstellungen gespeichert werden, besteht die Option, „AzureAWSample“ oder andere gespeicherte Profile auszuwählen, wenn Sie eine Verbindung herstellen möchten.

Nachdem die Verbindung hergestellt wurde, können Sie mit dem Schreiben und Ausführen von TSQL beginnen. Die einfachste Möglichkeit besteht darin, eine Datei mit der Erweiterung „SQL“ im Editor geöffnet zu haben. Wie ich bereits erwähnt habe, erzwingt dies die Anwendung der Features des SQL-Editors. Ein bemerkenswertes Feature sind die integrierten TSQL-Codeausschnitte.

Beginnen Sie, indem Sie „sql“ im Editor-Fenster eingeben. IntelliSense zeigt dann die Liste der integrierten Codeausschnitte an. Abbildung 2 zeigt dies.

Von der MSSQL-Erweiterung bereitgestellte TSQL-Codeausschnitte
Abbildung 2: Von der MSSQL-Erweiterung bereitgestellte TSQL-Codeausschnitte

Sie können erkennen, dass nicht nur vorhandene Daten abgefragt werden können: MSSQL führt jedes (gültige und zulässige) TSQL aus. Ich liste gerne die Datenbanken oder Tabellen und Ansichten aus einer ausgewählten Datenbank auf, um sicherzustellen, dass ich eine Verbindung mit der richtigen Datenbank hergestellt habe. Der ListTablesAndViews-Codeausschnitt ist für diesen Zweck hervorragend geeignet. Normalerweise muss ich Dr. GoogleBing um Unterstützung bei derartigem TSQL bitten. Daher bin ich für diesen Codeausschnitt besonders dankbar.

Durch Drücken von STRG oder BEFEHL+UMSCHALT+E wird der Befehl ausgeführt. Sie können den Text auch auswählen und dann mit der rechten Maustaste klicken, um das Kontextmenü anzuzeigen, das eine Option „Execute“ enthält.

Es wird ein Ergebnisbereich mit einer Antwort geöffnet, die Abbildung 3 ähnelt.

Ergebnisse einer Schemaabfrage
Abbildung 3: Ergebnisse einer Schemaabfrage

Beachten Sie die beiden kleinen Symbole oben rechts. Mit dem ersten Symbol können Sie die Ergebnisse als CSV-Textdatei speichern. Das zweite Symbol dient zum Speichern der Ergebnisse als JSON. Erstellen wir also eine Abfrage, die Kundendaten abruft, sehen wir uns deren Ergebnisse an und speichern sie als JSON. Da ich die Liste der Tabellen vor mir sehe, kann ich mit der Eingabe meiner Abfrage beginnen. Wie Abbildung 4 zeigt, unterstützt mich IntelliSense dabei anhand von Informationen zum Datenbankschema.

IntelliSense liest das Schema und unterstützt das Erstellen von TSQL
Abbildung 4: IntelliSense liest das Schema und unterstützt das Erstellen von TSQL

Ich habe meine select-Anweisung geändert, um drei Spalten aus „Sales­LT.Customer“ abzurufen. Anschließend konnte ich die Anweisung markieren und die Tastenkombination STRG oder BEFEHL+UMSCHALT+E erneut verwenden, um nur diese Abfrage auszuführen. Wie in SQL Server Management Studio kann ich eine Anweisung oder mehrere Anweisungen ausführen und als Reaktion mindestens ein Resultset anzeigen.

Die Ergebnisse werden in einem Raster dargestellt. Abbildung 5 zeigt dies. Sie können mindestens eine Zeilen- und Spaltenkombination markieren und dann auf die Symbole „CSV“ oder „JSON“ klicken. Sie werden anschließend aufgefordert, einen Dateinamen zum Speichern einzugeben. Sie können auf einfache Weise alle Daten aus einem Kontextmenü auswählen, indem Sie mit der rechten Maustaste auf das Raster klicken.

Ergebnisse einer Kundendatenabfrage
Abbildung 5: Ergebnisse einer Kundendatenabfrage

Die Eingabeaufforderung für den Dateinamen zeigt den aktuellen Ordnerpfad an. Wenn Sie die Datei dort speichern möchten, müssen Sie den Pfad nicht erneut eingeben. Geben Sie nur den Namen der Datei ein. Sie wird dann in diesem Ordner gespeichert. Anfangs war mir das nicht klar. Aber Sie können ja aus meinen Fehlern lernen.

Ich habe nur die erste Zeile der Kundendaten ausgewählt, die meine Abfrage projiziert hat, und dann das Symbol zum Speichern als JSON verwendet und einen Dateinamen angegeben. Der folgende JSON-Code wurde in meine Datei ausgegeben:

[
  {
    "CustomerID": "1",
    "FirstName": "Orlando",
    "LastName": "Gee"
  }
]

Denken Sie daran, dass Sie VS Code auf einfache Weise eigene Codeausschnitte hinzufügen können. Erstellen wir also einen Codeausschnitt zum Auflisten gespeicherter Prozeduren und Funktionen. Navigieren Sie zu „Preferences“ und „User Snippets“. Sie erkennen, dass die MSSQL-Erweiterung eine Vorlage für SQL-Codeausschnitte hinzugefügt hat. Wählen Sie diese aus. Die leere Vorlage wird geöffnet. Wenn Sie weitere Codeausschnitte hinzufügen, arbeiten Sie weiterhin in dieser Datei. Weil es sich um eine Open Source-Erweiterung handelt, können Sie zu github.com/Microsoft/vscode-mssql navigieren, wenn Sie Codeausschnitte erstellt haben, die Sie mit anderen Benutzern teilen möchten (oder auch einen Fehler gefunden bzw. einen anderen Vorschlag für MSSQL haben), um Ihren Beitrag zu veröffentlichen und Pull Requests zu übermitteln bzw. Probleme zu melden.

Nach einer langen Sitzung mit Dr. GoogleBing und dem Testen verschiedener Ideen sehen Sie hier den Codeausschnitt, den ich zum Auflisten aller gespeicherten Prozeduren und Funktionen in der Zieldatenbank erstellt habe:

"List Stored Procedures": {
  "prefix": "sqlListStoredProcedures",
  "body": [
    "SELECT [Name],[Type_Desc] " ,
    "FROM [sys].[all_objects] " ,
    "WHERE ([Type] = 'P' OR [Type]='FN' OR [Type]='TF' OR [Type]='IF') ",
    "AND [Is_MS_Shipped] = 0"
  ],
  "description": "List Stored Procedures"
}

Wenn ich nun „sql“ im Editor-Fenster eingebe, findet sich „sqlListStoreProcedures“ unter den Optionen. Das Ausführen dieses Befehls für meine Datenbank führt zu den folgenden Ergebnissen:

Name                         Type_Desc
uspPrintError                SQL_STORED_PROCEDURE
uspLogError                  SQL_STORED_PROCEDURE
ufnGetAllCategories          SQL_TABLE_VALUED_FUNCTION
ufnGetSalesOrderStatusText   SQL_SCALAR_FUNCTION
ufnGetCustomerInformation    SQL_INLINE_TABLE_VALUED_FUNCTION

Ich war in der Lage, diese Ausgabe zu teilen, indem ich mit der rechten Maustaste auf das Ergebnisraster geklickt und dann die Option „Copy with Headers“ ausgewählt habe.

Wie heißt es bei Verkaufsveranstaltungen in der nächtlichen Fernsehwerbung immer so schön: „Und Achtung! Das ist noch lange nicht alles!“ Auch das Editor-Fenster verfügt über ein Kontextmenü (siehe Abbildung 6).

Kontextmenü des Editor-Fensters
Abbildung 6: Kontextmenü des Editor-Fensters

Die interessantesten Elemente darin sind (meiner Meinung nach) die Optionen „Go to Definition“ und „Peek Definition“. Wenn Sie einen Tabellennamen im Editor-Fenster auswählen (z. B. „Customer“ im Befehl, den Abbildung 5 zeigt), zeigen Ihnen diese Befehle das CREATE-Skript für die Kundentabelle.

Die MSSQL-Erweiterung wird fortwährend weiterentwickelt, und ich freue mich schon auf baldige Updates. Die Version, die ich hier verwendet habe, liegt noch als Preview vor (Version 0.3.0). Wenn Sie diese Version in Visual Studio Code installiert haben, werden Sie bei Updates benachrichtigt. Wenn Sie die Entwicklung von MSSQL beobachten und an ihr teilnehmen möchten, besuchen Sie die GitHub-Website unter aka.ms/mssql-marketplace.


Julie Lerman ist Microsoft Regional Director, Microsoft MVP, Mentorin für das Softwareteam und Unternehmensberaterin. Sie lebt in den Bergen von Vermont. Sie hält bei User Groups und Konferenzen in der ganzen Welt Vorträge zum Thema Datenzugriff und zu anderen Themen. Julie Lerman führt unter thedatafarm.com/blog einen Blog. Sie ist die Autorin von „Programming Entity Framework“ sowie der Ausgaben „Code First“ und „DbContext“ (alle bei O’Reilly Media erschienen). Folgen Sie ihr auf Twitter: @julielerman, und sehen Sie sich ihre Pluralsight-Kurse unter juliel.me/PS-Videos an.

Unser Dank gilt den folgenden technischen Experten von Microsoft für die Durchsicht dieses Artikels: Kevin Cunnane, Eric Kang und Sanjay Nagamangalam