HowTo: SQL Tabellen in Visual Studio umbenennen

imageDie Integration von SQL Servern im Visual Studio ist sehr nett, nur selten nutze ich direkt das SQL Management Studio. Eine Sache nervt allerdings: SQL Tabellen umbenennen scheint nicht vorgesehen zu sein – über einen kleinen kleinen Trick geht jedoch auch das direkt aus Visual Studio heraus.

Weiterlesen »

HowTo: SQL Tabellen Beziehungen erstellen per Drag´n´Drop

imageDurch die Verknüpfung von Primär- und Fremdschüsseln in Datenbanken bekommt man viele Vorteile. Der Größte ist sicherlich die Datenintegrität, aber auch etwas abseits der Datenbank-Welt können z.B. O/R Mapper diese "Beziehungen" zwischen Tabellen nutzen und so bereits ein strukturierteres Datenmodell generieren. 
Solche Verknüpfungen zwischen Tabellen kann man auch im SQL Server schnell erstellen, ohne sich durch X-Dialoge zu klicken – ganz einfach per Drag´n´Drop

Weiterlesen »

SQL Injection

Exploits of a Mom

From xkcd

:D

HowTo: Beispieldatenbank "AdventureWorks" und "Northwind" auf SQL Server 2005/2008 installieren

Da man immer mal wieder Beispeildatensätze und eine komplexere Beispieldatenbank braucht, bietet Microsoft 2 Beispiele an:

Warum Northwind und AdventureWorks installieren?

Microsoft gibt häufig irgendwelche Hands on labs heraus, welche Schritt für Schritt ein bestimmtes Thema erklären. Hierbei wird manchmal die AdventureWorks DB genommen, aber auch noch die alte Northwind – wie z.B. bei Linq to SQL

Benötigte Software

Neben den Beispieldatenbanken benötigen wir min. den SQL Server 2005 in der Express Edition sowie das SQL Server Management Studio Express.
Das Management Studio sollte möglichst im Administratormodus laufen.

Installieren von AdventureWorks

Nachdem man die “AdventureWorksDB.msi” heruntergeladen hat und installiert hat, ist der Standardinstallationspfad folgender:

“C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data”

Da der Pfad geschützt ist, sollten folgende 2 Datein auf den Desktop oder woanders kopiert werden:

  • AdventureWorks_Data.mdf
  • AdventureWorks_Log.ldf

Danach öffnet man das Management Studio und verbindet sich zum Server. Hier fügt man nun die AdventureWorks_Data an:

image

In dem Menü wählt man die Datei und klickt anschließend auf “ok”.

image

Installieren von Northwind (und pubs)

Die Northwind DB ist eigentlich nicht für SQL Server 2005/2008 gedacht, läuft aber trotzdem ohne Probleme.

Der Installationspfad ist folgender:

“C:\SQL Server 2000 Sample Databases”

Im Management Studio wählt man die “NORTHWND.MDF” sowie die “PUBS.MDF” und fügt diese wie die AdventureWorks DB ein.

Ergebnis

Das Ergebnis davon ist, dass man nun 3 Beispieldatenbanken hat:

image

Damit hat man genügend Demobeispielsätze für die nächste Zeit ;)

Ein paar Microsofts CTPs welche man im Auge behalten sollte: Sync Framework, Astoria, SQL Server 2008…

Microsoft bringt von vielen seiner Produkte CTPs – Community Technology Previews – heraus, welche Konzeptionen aufzeigen und somit eine Art “Richtung” anzeigen, wohin sich Microsoft bewegen kann.
Das CTPs natürlich auch komplett “eingestampft” werden, war z.B. bei dem “Acropolis” Projekt zu sehen. Allerdings ist das Wort “einstampfen” in dem Zusammenhang falsch, da die Entwicklungen anderweitig in das .NET Framework einfliessen.

Da es aber doch einige CTPs gibt, die eigentlich unbekannt sind, hier mal eine kleine Auflistung von Sachen, welche ich mir persönlich mal anschauen möchte:

Microsoft Sync Framework

Um “online” Daten mit “offline” Daten zu synchronisieren, hat Microsoft nun das Sync Framework in Angriff genommen:

Mircosoft SQL Server 2008

Sandcastle

Um Codedokumentationen automatisch zu erstellen gibt es von Microsoft dieses hier (Jan Welker hat ebenfalls in der Weihnachtsausgabe des dot.net magazines drüber geschrieben):

Parallel Extensions for .NET FX

Eine kleine Beschreibung worum es geht und wie sowas aussehen kann und jetzt direkt zur CTP:

Visual Studio 2008

ADO.NET

“Astoria”

“Jasper”

HowTo: Datenbankverbindungen – .NET & MySQL

In diesem HowTo ging es um die Datenverbindung zwischen .NET und MS SQL. Natürlich bietet .NET von Haus aus einen MS SQL Provider, aber wie sieht es mit MySQL aus? Wie kann man mit .NET auf eine MySQL Datenbank zugreifen?

Daher geht es um dieses Thema:

Heute: .NET und MySQL

Das Testprojekt wird ähnlich wie das MS SQL Beispiel sein.

  • Benötigte Software:

Die Datenbank Software MySQL – aus Einfachheitsgründen nehmen wir einfach ein vorgefertigtes Paket, welches unter PHP Entwicklern wohl bekannt ist: XAMPP – Apache, PHP, MySQL etc. im Bundel. Wer bereits einen MySQL Server hat braucht das natürlich nicht.
Um mit .NET darauf zuzugreifen benötigen wir noch den MySQL Daten Provider – MySQL Connector .NET 5.0.
(und natürlich VS – siehe erstes HowTo).

  • Test Datenbank erstellen (MySQL mit XAMPP)

Sobald XAMPP erfolgreich auf dem System installiert wurde, öffnet man das Control Panel und startet den Apachen sowie den MySQL Server.

image

Bei Vista (und wahrscheinlich auch bei XP SP2) meckert die Firewall – die beiden Sachen nicht blocken.

Unter der Webadresse http://localhost/xampp/index.php findet man nun das Administrationspanel. Im Menü auf der linken Seite befindet sich der für uns wichtigste Punkt:

image

Über phpMyAdmin legen wir unser Datenbank an (”dotnet“) und dann unsere Tabelle “test“ mit Spalte “id” als “autoincrement int” und “value” als “varchar” für unseren Text.

image

Danach auf “Speichern” und fertig ist unser DB.

Wichtig: Den MySQL Server die ganze Zeit über anlassen – den brauchen wir bis zuletzt ;)

  • MySQL Connector installieren

Damit wir einen MySQL Datenprovider bekommen, müssen wir nun den Connector installieren.

  • Konsolenprogramm erstellen

In unserem Konsolenprogramm fügen wir nun noch die Referenz zu der MySQL.Data DLL hinzu, sodass wir den Namespace später verwenden können:

image

Unter dem Punkt “MySQL.Data” finden wir dann unseren Connector:

image

Dadurch steht uns jetzt die Namespaces MySql.Data & MySql.Data.MySqlClient zur verfügen welche wir einbinden:

using MySql.Data;
using MySql.Data.MySqlClient;

Teil 1: DB Verbindung öffnen

Der Namespace MySqlClient enthält alles was wir generell brauchen und ist ähnlich sturkturiert wie SqlClient für MS SQL. Anstatt einer SqlConnection Klasse gibt es halt eine MySqlConnection Klasse.

            MySqlConnection connection = new MySqlConnection(@"Server=127.0.0.1;Uid=root;Pwd=;Database=dotnet;");
            connection.Open();

Wichtig: Der Connectionsstring ist etwas anders – MySQL stellt allerdings ein kleines Tutorial bereit, sowie bei speziellen Fragen auch ein Forum.
Achtung: DB Verbindung wird am Ende unseres Beispieles wieder geschlossen.

Teil 2: Werte in die DB schreiben

Hier sieht man ebenfalls die Anlehnung an die SqlCommand Klasse – es gibt eine MySqlCommand Klasse, welche alle (bzw. die “wichtigsten”) Methoden ebenso enthält:

            MySqlCommand insertCommand = new MySqlCommand("INSERT INTO test (value) VALUES ('Test')", connection);
            int i = insertCommand.ExecuteNonQuery();

Teil 3: Werte aus der DB lesen

Für das befüllen eines Datasets oder einer Datatable gibt es den MySqlDataAdapter mit der “Fill(…)” Methode (gleiches System wie bei MS SQL, nur mal mit MySql davor ;) ).

            MySqlCommand readCommand = new MySqlCommand("SELECT * FROM test", connection);
            MySqlDataAdapter adapter = new MySqlDataAdapter(readCommand);
            DataTable datatable = new DataTable();  

            adapter.Fill(datatable);
            for (int x = 0; x < datatable.Rows.Count; x++)
            {
                object[] values = datatable.Rows[x].ItemArray;
            }

Teil 4: Daten in der DB ändern

Ebenso implementieren wie das schreiben von Daten, nur anderes SQL Statement & wieder benutzen wir MySqlCommand dafür.

            MySqlCommand updateCommand = new MySqlCommand("UPDATE test SET value = 'UpdatedTest'", connection);
            int updatedReturnValue = updateCommand.ExecuteNonQuery();

Teil 5: Daten aus der DB löschen

Ebenso wie oben beschrieben & gleiches Prinzip wie bei unserem MS SQL Beispiel.

                MySqlCommand deleteCommand = new MySqlCommand("DELETE FROM test", connection);
                int deleteReturnValue = deleteCommand.ExecuteNonQuery();
 image

Abschließende Bemerkung

Der .NET Connector von MySQL erlaubt es auf sehr einfache Art und Weise auf eine MySQL DB zuzugreifen – wer bereits mit MS SQL und .NET zutun hatte, kann ebenso “leicht” mit MySQL arbeiten. Die tiefergehenden Sachen sollten dann direkt bei MySql nachgeschaut werden, wie z.B. der Zugriff auf gespeicherte Prozeduren oder BLOB Daten verarbeiten.
Wie auch bei dem MS SQL Beispiel gilt auch hier: Der Code soll nur demonstrieren, wie man ganz primitiv auf die DB zugreift. Es gibt bestimmt bessere Methoden, allerdings soll dies nur eine Einführung sein und zeigt schon ganz gut, das man .NET und MySQL auch sehr gut zusammen nutzen kann.

Infos für den Source Code:

Die Tabelle sollte “test” heißen und die Spalten “id” und “value”. Die Datenbank sollte “dotnet” heißen oder der Connectionstring sollte geändert werden. Falls man eine bereits eingerichtete MySql DB nutzt, muss man natürlich die Zugangsdaten entsprechend anpassen.

[ Download Source Code ]

HowTo: Datenbankverbindungen – .NET & MS SQL 2005

Datenbanken sind immer ein zentrales Thema, aber als Einsteiger in das Thema hatte ich damals keinen guten Überblick, wie man das ganze mit .NET zum Laufen bekommt. Daher hier eine kleine “Einführung” zum Thema Datenbankverbindungen – Datenbank X mit .NET.

Heute: .NET und Microsoft SQL 2005

Das Testprojekt ist sehr sehr simpel gehalten – das Thema ADO.NET ist sehr groß, daher wollte ich nur auf primitivste Art und Weise zeigen, wie man sich zu einer DB verbinden und dort Aktionen ausführen kann. Typisierte Datasets oder O/R Mapper wie Linq to SQL oder Subsonic etc. können ebenfalls genutzt werdne. Insbesondere mit Linq werde ich mich auch noch zuwenden, aber vorher mal zu den “Basics” ;)

  • Benötigte Software:

Die Datenbank-Software – SQL Server 2005 Express Edition - gibts hier zum Runderladen.
Die Management Software – SQL Server Management Studio Express – gibts hier zum Runderladen.
Visual Studio 2005 Express Edition gibts hier zum Runterladen.

  • Test Datenbank erstellen:

Sobald unter den Windows Dienster der “SQL Server (SQLEXPRESS)” gestartet ist (nach der Installation ist dies standardmäßig automatisch der Fall), können wir über das SQL Management Studio Express unsere Testdatenbank anlegen.

image

Das anlegen einer Testdatenbank wurde ebenfalls bereits bei den Software Factories behandelt, sodass ich jetzt am Ende diese Testdatenbank habe:

image

  • Konsolenprojekt erstellen

Wir erstellen einfach ein kleines Konsolenprojekt und wollen einfach ein paar Eintragungen vornehmen, ein Eintrag abändern, die Daten auslesen und wieder löschen. Das selbe werden wir zudem später mit Oracle und MySQL versuchen.

image

Im “Server Explorer” fügen wir unsere Datenbankverbindung hinzu:

image

Als Datenquelle geben wir “Microsoft SQL Server” an und als Datenanbieter “.NET Framework-Datenanbieter für SQL”:

image

Sobald man sich mit der jeweiligen Datenbank verbunden hat, sieht man in den Eigenschaften den “ConnectionString”:

image

Ansonsten brauchen wir diese Verbindung im VS eigentlich nicht. Es gibt aber Steuerelemente die darauf zugreifen können – in unserem sehr einfachen Beispiel benötigen wir das aber nicht.

Eine gute Auflistung von den ConnectionsStrings und ihrer Zusammensetzungen findet man hier: www.connectionsstrings.com

Die Demoanwendung ist sehr einfach und kann weiter unten runtergeladen werden.

Teil 1: DB Verbindung öffnen

Über die Klasse “SqlConnection” öffnen wir eine Verbindung zur Datenbank.
Achtung: Die DB Verbindung sollte unbedingt wieder am Ende geschlossen werden – man kann dies auch über das “using-Statement” erreichen

            SqlConnection connection = new SqlConnection(@"Data Source=REMAN-NOTEBOOK\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True"); 

            connection.Open();

Teil 2: Werte in die DB schreiben

Einen SQL Befehl an die DB schicken geht ganz einfach über die Klasse “SqlCommand“, wo wir noch unsere Verbindung als Parameter mitgeben und diese Ausführen. Der Rückgabewerte entspricht der Anzahl an Zeilen, welche durch den SqlBefehl angepasst werden mussten.

SqlCommand insertCommand = new SqlCommand("INSERT INTO [Test].[dbo].[Test] ([value]) VALUES ('Test')", connection); 

            int i = insertCommand.ExecuteNonQuery();

Teil 3: Daten aus der Datenbank holen

Um auf die Werte aus der Datenbank zuzugreifen wird es ein klein wenig komplizierter. Unser SqlCommand (Select * From…) wird einem SqlDataAdapter übergeben, welcher eine DataTable füllt. Diese DataTable enthält dann unsere gesamte Tabelle samt den Werten. Eine andere Vorgehensweise ist sicherlich auch möglich (Datasets/typisierte Datasets…) wurde hier aber aus den oben genannten Gründen nicht gemacht.

            SqlCommand readCommand = new SqlCommand("SELECT * FROM [Test].[dbo].[Test]", connection); 

            SqlDataAdapter adapter = new SqlDataAdapter(readCommand); 

            DataTable datatable = new DataTable();            adapter.Fill(datatable); 

            for (int x = 0; x < datatable.Rows.Count; x++) 

            { 

                object[] values = datatable.Rows[x].ItemArray; 

            }

In values[0] sind die Werte enthalten die in der Spalte “ID” stehen und in values[1] die in der Spalte “values”. Diese kann man nun in andere Objekte casten usw.

Teil 4: Daten aus der Datenbank ändern

Entspricht der Vorgehensweise wie beim Werteschreiben, nur halt mit einem anderen Sql Befehl:

            SqlCommand updateCommand = new SqlCommand("UPDATE [Test].[dbo].[Test] SET value = 'UpdatedTest'", connection); 

            int updatedReturnValue = updateCommand.ExecuteNonQuery();

Teil 5: Daten aus der Datenbank löschen

Ebenfalls so wie oben beschrieben:

SqlCommand deleteCommand = new SqlCommand("DELETE FROM [Test].[dbo].[Test]", connection); 

                int deleteReturnValue = deleteCommand.ExecuteNonQuery();
 

Abschließende Bemerkung

In der praxis würde ich eher typisierte Datasets oder andere O/R Mapper einsetzen. Die Software Factories (siehe Service Factory)bringen zudem ebenfalls einen “O/R” Mapper mit, welcher “zusammen klickbar” ist und daher die lästige Schreibarbeit für die CRUD Befehle erspart.
LINQ to SQL oder Subsonic gehen ebenfalls in die Richtung O/R Mapper und sind ebenfalls sehr interessant, sodass dieser Post nur mal die “basics” vermitteln sollte.

Achtung: Zum Ausführen des Democodes muss natürlich der ConnectionString und die DB so erstellt sein, wie oben beschrieben. Auserdem sollte Visual Studio im Administrator-Modus laufen, ansonsten gibts leider einen Fehler.

[ Download Democode ]

Buchempfehlung: Das SQL Server 2005 Entwicklerbuch

Das der SQL Server 2005 fein Datenspeichern kann, sollte jeder soweit wissen – aber da muss es doch noch mehr geben, oder? Was kann der SQL Server 2005 – auch wenn es demnächst 2008 gibt ;) – den sonst so besonders? Wie passt das ganze in das .NET Konzept rein?

Genau darum geht es in diesem umfangreichen Buch – für 15 Euro (Gebraucht kaufen samt Versand) über 1000 Seite ist ein sehr gutes Verhältnis.
Das Buch umfasst u.a. folgende Themen:

- Sicherheit im SQL Server 2005
- .NET Assemblys im Server? Was sie bringen und was sie können…
- Neuerungen in T-SQL
- Neue Datentypen (und eigene Datentypen mit .NET erschaffen)
- ADO / ADO.NET mit SQL Server 2005
- Service Broker
- SQL Server Management
- XML in der Datenbank
- …

Meiner Meinung nach sehr gut geschrieben und auch alles mit Beispielen und Democode gezeigt – auch wenn man es nicht direkt in der täglichen Arbeit braucht, lohnt sich ein Blick um mal zu sehen, was man sonst alles mit einer Datenbank anfangen kann.

[Hier der Link zum Amazon Artikel]

Artikel

Amazon Web Service:
HowTo: Produktsuche mit den Amazon Web Services

eBay API:
HowTo: eBay API (Grundvoraussetzungen)
HowTo: eBay API (Suchen mit eBay…)
HowTo: eBay API (Aktuelle Suchbegriffe…)

Google Maps API:
HowTo: Google Maps API (Grundvoraussetzungen)

HTML / Javascript:
HowTo: Webanwendung debuggen (Javascript & HTML debuggen mit den entsprechenden Tools)
HowTo: Mauseingaben & Javascript (Wie bastelt man ein Paint mit Javascript?)
HowTo: Xml mit Javascript Parsen (Zugriff auf Nodes & Attribute)
HowTo: Objektorientierte Programmierung / OOP in Javascript (Eine einfache Klasse erstellen)
HowTo: Javascript Event “onscroll” nutzen
HowTo: Javascript Mouse Over – Mousepositionen für Details

Microsoft ASP.NET:
HowTo: Microsoft ASP.NET AJAX (Grundlagen)
HowTo: Microsoft ASP.NET AJAX (Praktischer Anfang)
HowTo: Microsoft ASP.NET AJAX (Clientseitiger Aufruf von Webmethoden)
HowTo: Microsoft ASP.NET AJAX (PageMethods – Webmethoden aufrufen ohne ASMX Datein)
HowTo: Json-Services erstellen (…oder wie erstell ich dynamisch Javascript?…oder Web 2.0 ohne AJAX?)
HowTo: Dynamische vCards als Link zum Importieren anbieten
HowTo: Microsoft AJAX Client API nutzen

Microsoft .NET:
HowTo: Datein per FTP über mit .NET runterladen und speichern
HowTo: Interfaces/Schnittstellen verstehen – mal auf simple Art und Weise
HowTo: XML erstellen mit XmlAttributes
HowTo: PDF’s erstellen unter .NET mit NFop

Microsoft Silverlight:
HowTo: Microsoft Silverlight 1.0 (Grundlagen)
HowTo: Microsoft Silverlight 1.0 (Praktischer Anfang)
HowTo: Microsoft Silverlight 1.0 (Spiegeleffekte erzeugen)
HowTo: Microsoft Silverlight 1.0 (dynamische Spiegeleffekte)
HowTo: Microsoft Silverlight 1.0 (Bilder “kippen” samt Spiegeleffekt)
HowTo: Microsoft Silverlight 1.0 (Webanwendungen mit dynamischen SilverlightHosts verschönern)
HowTo: Erstellen eines Silverlight 1.0 Videoplayers mal auf einfache Weise
HowTo: Silverlight mit dem “object” Tag als embedded HTML anbieten

Microsoft Patterns&Practices Software Factories:
HowTo: Microsoft Patterns&Practices Software Factories verstehen
HowTo: Microsoft Patterns&Practices – Web Service Factory / Service Factory (Teil 1: Grundlagen & ASMX Variante)
HowTo: Microsoft Patterns&Practices – Web Service Factory / Service Factory (Teil 2: WCF Variante)
HowTo: Microsoft Patterns&Parctices – Web Service Factory / Service Factory (Teil 3: Praktisches “Hello World”)

Microsoft Office SharePoint 2007:
HowTo: Automatisierte Backups mit dem Microsoft Office SharePoint 2007

Microsoft Visual Studio:
HowTo: Visual Studio 2005 für .NET 3.0 (WPF, WCF, WF) rüsten

AJAX:
HowTo: AJAX
HowTo: AJAX und ASP.NET Webservices (und die Sache mit dem GET)

Windows Live ID:
HowTo: Windows Live ID Web Authenticaton (Grundlage & Installation)

Microsoft Virtual Earth:
HowTo: Microsoft Virtual Earth (Praktischer Einstieg)

XML:
Guide: XML (Einführung)
Guide: XML (Basiswissen)
Guide: XML (DocumentType Definitions DTDs)
Guide: XML (XML Schema – Teil 1)
Guide: XML (XML Schema – Teil 2)
Guide: XML (XML Schema – Teil 3)

.NET & Datenbankverbindungen:
HowTo: Datenbankverbindungen – .NET & MS SQL 2005
HowTo: Datenbankverbindungen – .NET & MySQL

Oracle:
HowTo: Oracle 10g und die Oracle Developer Tools unter Vista