Schlagwort-Archive: Softwareentwicklung

SQLite 3 mit Visual Studio und Entity Framework

Einleitung

SQLite ist eine eingebettete Einzeldateidatenbank. SQLite eignet sich ideal für Desktopanwendungen
und Projekte. Die zum Beispiel einzige Client- bzw. Benutzer-seitige-Datenbank benötigen,
um Anwendungsdaten zu speichern.

Das Entity Framework 6 vereinfacht die Arbeit mit Datenbanken erheblich und konvertiert das Datenbankschema in Klassen, die Tabellen repräsentieren.

Es ist jedoch ein etwas kniffeliger Weg, um SQLite mit dem Entity Framework 6 (EF6)
zum laufe zu bekommen.

Grundlegendes – Installation der Vorraussetzungen

Als Grundlage für diesen Artikel arbeite ich mit einer SQLite3 Datenbank, welche ich zuvor mit
SQLite Studio v3.2.1 erstellt habe. Welches man sich hier kostenlos herunterladen kann:

https://sqlitestudio.pl/index.rvt?act=download

Für diesen Beitrag nutze ich Visual Studio 2017 Community Edition.

Nachdem wir eine Datenbank haben, brauchen wir noch eine entsprechende Runtime: System.Data.SQLite
Diese können wir hier herunterladen: https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Hier gibt es einige Versionen zu finden, unabhängig, ob ihr eine x86 oder x64
DotNet installiert habt, brauchen wir die x86 Version eurer installierten .NET Version.
In meinem Fall war es die sqlite-netFx46-setup-bundle-x86-2015-1.0.110.0 Datei, welche bei mir gut funktioniert.
( https://system.data.sqlite.org/downloads/1.0.110.0/sqlite-netFx46-setup-bundle-x86-2015-1.0.110.0.exe )

Bevor ihr die Installation startet müsst ihr Visual Studio einmal schließen.
Startet die Installation mit folgenden Installationsparametern:

SQLIte Installation
Installation

SQL Server Compact Toolbox installieren

Nun benötigen wir noch eine Visual Studio Erweiterung SQLite/SQL Server Compact Toolbox
Diese können wir hier heruntergeladen und anschließend mit einem Doppelklick installieren:
https://marketplace.visualstudio.com/items?itemName=ErikEJ.SQLServerCompactSQLiteToolbox

SQLite Server Compact Toolbox
SQLite Server Compact Toolbox
Visual Studio Erweiterung Installation

Ist auch die Erweiterung erfolgreich installiert, haben wir alle Voraussetzungen erfüllt,
sodass wir mit Visual Studio und dem Entity Framework 6 arbeiten können.

Entity Model erstellen

Nachdem wir nun soweit alles haben, können wir Visual Studio wieder starten und ein neues Projekt erstellen oder bestehendes verwenden. Ich habe hierzu ein neues Konsolenprojekt erstellt.
Damit wir mit dem Entity Framework arbeiten können,
müssen wir unserem Projekt ein Nuget-Package hinzufügen.

Installiert euch das Nuget-Package:
System-Data.SQLite
(ich habe die last-stable: 1.0.110 verwendet)

SQLite Nuget Package
SQLite Nuget Package

Weitere Informationen zu dem Nuget-Package kann man hier finden:
https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

In meinem Projektmappenexplorer erstelle ich ein neues Verzeichnis “Database”
und füge ein neues Element hinzu, wähle hierbei ein Element vom Typ ADO.NET Entity Data Model.
Einen Schritt weiter wählen wir EF Designer aus Datenbank, aus.

Wir wählen EF Designer aus Datenbank aus.


Mit dem Klick auf “Neue Verbindung” solltet ihr nun einen neuen Eintrag zur Auswahl haben:

SQLite EF Provider
SQLite Provider

Hier wählen wir SQLiteProvider aus. Im folgendem Dialog können wir nun unsere Datenbank auswählen. Hier tragen wir einfach den kompletten Pfad der Datei ein.

Unter Data Source geben wir den Pfad der Datenbank an
Unter Data Source geben wir den Pfad der Datenbank an

Wir können hier noch mit einem Klick auf “Verbindung Testen”. Ihr solltet hier,
solange ihr alles richtig gemacht habt eine positive Nachricht bekommen.

Im nächsten Schritt, könnt ihr dann die Tabellen auswählen, von denen das Schema übernommen werden soll.
(In meinem Fall übernehme ich alle)
Ist dies abgeschlossen, wird eine edmx Datei generiert, dass kann je nach Umfang der Datenbank ein bisschen dauern.

SQLite edmx Mpdell

Optionaler Workaround

Falls ihr nun im Code eine LINQ Abfrage und eine Exception wie hier erhaltet:

Exception bei einer Linq Abfrage mit SQLite


System.InvalidOperationException: “Für den ADO.NET-Anbieter mit dem invarianten Namen ‘System.Data.SQLLite’ wurde kein Entity Framework-Anbieter gefunden. Stellen Sie sicher, dass der Anbieter im Abschnitt ‘entityFramework’ der Anwendungskonfigurationsdatei registriert ist. Weitere Informationen finden Sie unter ‘http://go.microsoft.com/fwlink/?LinkId=260882’.

Gibt es einen kleinen Workaround. Dazu öffnen, wir die App.config.
Welche sich im Projektverzeichnis befindet und fügen zwischen Zeile 18 und 19 eine weitere
hinzu:

So das unser Providerselement so aussieht:

    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
    </providers>
SQLite3 Provider hinzufügen.
SQLite3 Provider hinzufügen.

Wir speichern das ganze nun ab und starten unsere Konsolenanwendung neu.

Beispiel wie wir Daten ausleesn könnten.
Beispiel wie wir Daten ausleesn könnten.

Wenn ich ein Breakpoint in die linq query setze, läuft die Anwendung so durch und
ich kann Daten auslesen, ohne eine Fehlermeldung.

Fazit

Mit SQLite kann ich modern und mit dem Entity Framework bequem
Daten auslesen, schreiben und bearbeiten.
Ist man eine Entwicklungsumgebung mit MSSQL und dem EF6 gewohnt,
ist erfreulich mit einem kostenlosen RDBMS zu arbeiten.
Halten sich die Datenmengen in einem übersichtlichen Rahmen,
dürfte das DB-System eine gute Wahl sein. Auch wenn der Start mit der Einrichtung
etwas tricky und fummelig ist.

Weiterführende Informationen

Möchten ihr in diesem Bereich euch noch tiefergehend informieren kann ich euch eine Lektüre empfehlen, welche mir schon in vielen Bereichen zu dem Thema geholfen hatm dass Buch Sqlite 3 – Einstieg in die Datenbankwelt , beinhaltet viele nützliche Informationen, die uns auch in der ganzen SQL Welt weiterhelfen, zu einem günstigen Preis

Blogger Weiterleitung

Blogger Weiterleitung / Blogger forwarding

blogger-forwarding, Weiterleitung

blogger-forwarding

Betreibt man auf der Google Tochterfirma Blogger com einen Blog und möchte diesen Blog
auf einer anderen Seite weiterleiten zum Beispiel wie in meinem Fall, einem WordPress Umzug,
kann man in dem Blog eine Weiterleitung bzw. ein “Forwarding” auf Blogger.com erstellen.

Dazu gehen wir wie folgt vor:
Step 1)
Wir gehen auf:

Blogger draft home.
Wählen den Blog aus, auf dem wir eine Weiterleitung erstellen möchten

Step 2)
Wir wählen in der Navigation “Vorlage”, “HTML bearbeiten“. Hier empfehle ich euch dringend ein Backup von der HTML zu machen!

Step 3)
In Zeile vier solltet ihr den Beginn des <head>-Bereichs haben.
In unter diesem tragen wir nach eurem Bedürfnissen folgendes Skript ein:

<script>// <![CDATA[ if(window.location.href == &#39;http://EureBogSeite.blogspot.de/&#39;) { window.location=&quot;http://www.EureNeueSeite.TLD&quot;; } // ]]></script>

Wie es bei mir aussieht solltet ihr im Screenshot erkennen können:

Blogger forwarding, skript, blogger Weiterleitung

Blogger forwarding

Das war es eigentlich auch schon der Besucher wird nach dem Speichern der Änderungen auf eurer neuen Seite automatisch weitergeleitet.
Da immer mal etwas schief gehen kann, solltet ihr natürlich von eurer Vorlage ein Backup vorher anlegen.

AngularJS in Visual Studio

AngularJS mit Visual Studio

Vielleicht hast du ein Projekt oder eine Idee und möchtest diese mit AngularJS
umsetzen. Normalerweise reicht dazu ein normaler Editor, jedoch mag es der ein oder andere
gerne über Visual Studio entwickeln, in diesem Beitrag möchte ich euch erläutern, wie ihr das
Angular JS Framework in ein Visual Studio Projekt einbindet und damit auch arbeitet.

Als Minimum Vorraussetzung, benötigen wir das Visual Studio Community (kostenlos)
https://www.visualstudio.com/en-us/products/visual-studio-community-vs
Zusätzlich solltet ihr es auf die letzten Versionen updaten und euch die letzte Version die
Visual Studio Web Essentials installieren. http://vswebessentials.com/

Auswahl einer Web Vorlage

Angular Js in Visualstudio
Angular JS in Visual Studio, Empty ASP.NET Projekt

In diesem Eintrag nehme ich als Beispiel ein leeres Web, ASP.NET Web Application Projekt.

Lassen wir das Projekt nun mit F5 loslaufen, erhalten wir den Fehler 403 Forbidden.

Index.html anlegen

Jetzt fügen wir eine Datei mit dem Namen: index.html, in das Wurzelverzeichnis hinzu.
In dieser können wir im <body> Bereich “Hallo Welt” reinschreiben.
Lassen wir das Projekt nun nochmal erstellen und laufen, sollte sich die Ausgabe geändert haben:

AngularJS Index.html
AngularJS Index.html

Angular JS Framework in das Projekt einbinden
Möchte man eine AngularJs Applikation schreiben, müssen wir dazu das nötige
AngularJS Framework einbinden. Dies geschieht am besten über NuGet.

NuGet Package installieren

NuGet Package Angular JS Core in dem Projekt hinzufügen
NuGet Package Angular JS Core in dem Projekt hinzufügen

Dazu klicken wir wie im Bild oben schon zu erahnen ist auf “Manage NuGet Packages…”.

Anschließend klicken wir auf Browse und suchen dort nach “angularjs”.
Hier wählen wir die AngularJS.Core aus und installieren diese.

Unsere Projektmappe erweitert sich um das Angular JS Framework:

Jetzt sollten wir in unserer index.html das Framework referenzieren mit dieser Zeile:

<script src=”Scripts/angular.min.js”></script>

Grundlegende Angular App Struktur erstellen
Als erstes erstellen wir uns in der Solution ein Ordner Namens: “app”.
In diesem Verzeichnis erstellen wir zwei JavaScript Dateien:
app.module.js und main.js

Solution Explorer nach Angular JS Installation
Solution Explorer nach Angular JS Installation

app.module.js bearbeiten

Die app.module.js beinhaltet ein “Single-level” Modul. In diesem Beispiel, die Applikation hat ein
Application-Level Modul, welches weitere Module aus dem Projekt lädt. Die Datei app.module.js
verfolgt das Konzept, der Module, Controllers, Services, Direktive und Views.
Die o.g. Datei sollte als Grundlage folgenden Inhalt haben:

(function() {
‘use strict’;

angular.module(‘app’, []);

})();

Dieses Beispiel nutzt eine IIFE (Immediately-invoked function expression um den Code auszuführen.
(http://en.wikipedia.org/wiki/Immediately-invoked_function_expression)
Dieses “Pattern” wird von der Struktur von jedem Modul genutzt.
Man beachte die zweite Zeile: ‘use strict’;
Dies triggert neuere Browser dazu an, JavaScript im StrictMode auszuführen.

‘use strict’; ist optional, jedoch empfehlenswert für eine saubere Programmierung.

 

main.js bearbeiten

In der main.js Datei erstellen wir ein Controller, um auch später bei umfangreicheren Projekten,
konsistent zu bleiben, empfehle ich in dem Dateinamen, den Begriff “Controller” nicht zu verwenden.
Erklärt wird dies in einem Post von John Papa
http://www.johnpapa.net/angular-app-structuring-guidelines/
Wo wir gerade bei der Namensnennung sind, lege ich euch diese
Naming Guideline an Herz:
https://github.com/johnpapa/angular-styleguide#naming
Nun zum Inhalt des Controllers zurück; wir fügen folgendes in unserer main.js:

(function () {
‘use strict’;
angular        .module(‘app’)
.controller(‘Main’, main);
function main() {
var vm = this;
vm.welt = ‘welt’;
}
})();

Die function main, ist der Controller.
Nun benötigen wir noch eine View in der wir alles anzeigen können.

Index.html bearbeiten

Wir füllen unsere zuvor angelegte index.html mit folgenden HTML-Code:

<!DOCTYPE html> <html ng-app=”app”><head>    <title></title></head><body ng-controller=”Main as vm”>     <input type=”text” ng-model=”vm.food” placeholder=”Enter Welt.” />     <p>Hallo {{vm.food}}!</p>     <script src=”Scripts/angular.min.js”></script>    <script src=”app/app.module.js”></script>    <script src=”app/main.js”></script> </body></html>

Projekt starten

Speichern wir nun das Projekt und lassen es mit F5 erstellen.
sollte sich der Browser öffnen und folgendes anzeigen (Nach der Eingabe, des Wortes “Welt” in dem Textfeld.

Hallo Welt, AngularJS mit Visual Studio
Hallo Welt, AngularJS mit Visual Studio

 

Im <body>-Kontext seht ihr nun die Benutzung der Controller-Syntax  in der View.

Das VM im Quelltext ist dabei unsere Sogenannte Scope.

Das kleine Beispiel Projekt könnt ihr euch auch hier herunterladen, um das ganze ggf. besser nach zu vollziehen. Möchte man mit Javascript bisschen rum probieren ohne gleich Dateien auf dem PC erstellen zu müssen, so habt ihr die Möglichkeit im Browser mit JSFiddle ein wenig zu experimentieren.

C# Get directory size using LINQ, c# GetDirectorySize

C# Get directory size using LINQ, DirectorySize

Sometimes you need or must know the folder DirectorySize or frin more directories in C#.
In this case you can use this method, which get the folder size in c#, the output size is in bytes.

public static long DirectorySize(string parentDirectory)
{
return new DirectoryInfo(parentDirectory).GetFiles(searchPattern: "*", searchOption: SearchOption.AllDirectories).Sum(file =&gt; file.Length);
}

In this linq method you can also set an search pattern and choose if only TopDirectories or AllDirectories will be run through.

Generische Aufzählungen

Generische Aufzählungen

Das .NET Framework stellt uns im Namensraum „System.Collections.Generics“ generische Aufzählungen zur Verfügung. Generische Aufzählungen haben den Vorteil, dass sie sicherer und effizienter sind, da schon bei der Deklaration der Datentyp festgelegt wird.
In diesem Artikel erläutere ich neun generischen Aufzählungen:

Arrays (Felder)
• List
• LinkedList
• BindingList (Namensraum: „System.ComponentModel“)
• Dictionary<TKey, TValue>
• SortedList<TKey, TValue>
• SortedDictionary(TKey, TValue>
• Queue
• Stack

Arrays
Aufzählungen aus der Klasse „System.Array“ bietet die Möglichkeit große Datenmengen eines vorher festgelegten Datentyps und Feldgröße zu speichern. Die Werte eines Arrays werden über einen Index (z. B. MyArray[3]) angesprochen. Des Weiteren ist es möglich, mehrdimensionale Arrays zu verarbeiten. Um effizient mit Arrays zu arbeiten ist es notwendig die Größe der zu speichernden Feldern bereits bei der Deklaration festzulegen.

List
List arbeitet ähnlich wie das oben beschriebene Array. Der Zugriff eines Eintrags kann wie bei einem Arrays mit der Angabe eines Index aufgerufen werden. Es ist möglich die Aufzählung mit der Methode „Sort“ zu sortieren. Der entscheidende Vorteil dieser Aufzählung ist, das bei der Deklaration nicht feststehen muss, welche Größe die Aufzählung besitzt. List ändert beim hinzufügen (Methode „Add“) oder beim entfernen (Methode „Remove“) von Einträgen automatisch die Feldgröße.

LinkedList
Für manche Algorithmen und weiteren Anwendungsfällen ist es notwendig eine LinkedList-Aufzählung zu nutzen. Diese arbeitet ähnlich wie List, und bildet alle Elemente in die „LinkedListNode Klasse ab. Attribute wie Previous und Next verweisen auf Voränger und Nachfolgende Elemente.

BindingList
BindingList kann dazu verwendet werden, wenn Sie vorhaben eine Aufzählung direkt an einem Datenbanksteuerelement zu binden.

Dictionary<TKey, TValue>
In einer Dictionary Aufzählung kann statt eines numerischen Integer Indexes ein beliebiges Objekt verwendet werden wie zum Beispiel eine Zeichenkette (vom Typ „String“). Die Elemente der Aufzählung werden mit einem hash-Wert gespeichert, so kann man sicherstellen, dass nicht gleichnamige Objektnamen zu einer Dateninkonsistenz führen (Methoden dafür z.B. „GetHashCode“ und „ContainsKey“). Wie bei der List ist es möglich neue Elemente in die Dictionary<TKey, TValue> Aufählung einzufügen. In dieser Aufzählung kann nicht sortiert oder auf einzelne Elemente mit Hilfe eines (Integer) Indexes zugegriffen werden.
SortedList<TKey, TValue>
Die SortedList Aufzählung beinhaltet ähnlich Funktionen wie die Dictionary Aufzählung. Im Vergleich zur „SortedDictionary“ –Aufzählung unterscheidet sie sich mit dem Zugriff auf ein Element, auf dieses kann mit Angabe eines Indexes zugegriffen werden. Wenn bereits sortierte Elemente eingefügt werden wird von dieser Aufzählung weniger Speicher benötigt als eine „SortedDictionary“.

SortedDictionary(TKey, TValue)
Diese Aufzählung ähnelt dem Dictionary mit dem Unterschied das die Elemente automatisch sortiert werden. Der Vorteil dieser Aufzählung ist die schnellere Einfüge- und Löschaktionen von Elementen im Vergleich zu SortedList<TKey, TValue>.

Queue
Queue wird verwendet wenn die Elemente in der Reihenfolge genutzt werden soll, in der sie eingefügt wurde. Diese Klasse ist für eine komplexere Verwaltung funktionell eingeschränkter als z.B. die List oder Dictionary Klassen.

Stack
Dies Aufzählung Stack arbeitet wie Queue mit dem Unterschied das die umgekehrte Reihenfolge genutzt wird. Auch hier ist die weitere Verarbeitung und Verwaltung der Elemente eingeschränkter als die List und Dictionary Klasse.

Fazit
Mit dem .NET Framework haben wir eine mannigfaltige Möglichkeit eine für unseren Anwendungsfall passende, generische Aufzählung auszuwählen. Ist man sich jedoch noch nicht ganz sicher für welche man sich entscheiden soll kann man sich dazu entschließen das Thema noch weiter zu vertiefen, sich die einzelnen Möglichkeiten in Testprojekten genauer zu betrachten oder man nutzt auf Grund der vielfältigen, flexiblen Nutzungsmöglichkeiten die List oder Dictionary<TKey, TKValue> Klasse. Damit ist man für den Anfang gut beraten.

C# oder Visual Basic.NET?

C# oder Visual Basic?

Im .NET Framework stehen mehrere Programmiersprachen zur Auswahl, die wichtigsten sind C# (C Sharp) und Visual Basic.NET.
Im Großen und ganzem sind die Sprachen komplett gleichwertig. In beiden Sprachen gibt es Unterschiede, auf denen ich gleich näher eingehen möchte.

Wesentliche Vorteile von Visual Basic.NET
• Die Einschränkung in Visual Basic.NET, dass keine Pointer zur Verfügung stehen, ist prinzipiell auch als Vorteil anzusehen.
Es wird das Risiko verhindert „unsafe code“ zu entwickeln und somit die Robustheit und Integrität von Anwendungen / Daten zu beeinflussen.
• Wenn Quelltext von fremden eingesehen oder bearbeitet wird, ist es leichter den Quelltext zu verstehen und zu bearbeiten, da die Syntax lesbarer ist.
Wesentliche Vorteile von C#
• Viele Experten setzen auf C#, somit finden mehr Beispiele im Internet
• Wer bereits mit Sprachen wie PHP, Java, C(++) in Erfahrungen gesammelt hat, fällt dem Einstieg in C# leichter.
Unterschiede
• In C# ist es möglich „unsafe code“ zu programmieren. Dies wird benötigt um direkten Zugriff auf den Speicher zu erhalten (etwa durch Pointer).
• Java, PHP oder C(++)- Entwickler werden sich schnell an die Syntax von C# gewöhnen, während die Syntax von VB.NET vergleichbar mit der von VB6 oder VB-Skript ist.
• In VB.NET kann man auf ein Objekt mit der „With“ und „End With“ Struktur
• VB.NET lässt die Verwendung von Enums (Aufzählungen) in Interfaces (Schnittstellen) zu
• C# ermöglicht in einer „for“ –Schleife mehrere Bedingungen
• In C# sind Operatoren kürzer (UND-Operator: „&&“, VB.NET UND-Operator: „AndAlso“)
• C# ist Case-sensitive (Abhängig von Groß- und Kleinschreibung)

Letztendlich ist es eine Geschmackssache, ob Sie sich für C# oder VB.NET entscheiden. Beide Sprachen werden bei der Kompilierung in den IL (Intermediate Language) übersetzt, welche auf die gleichen .NET Libraries zugreift.
Es mag noch viele geben, die über die nicht vorhandene Portierbarkeit von .NET entwickelten Applikationen schimpfen, hier gibt es jedoch schon alternativen wie „Mono“, welches ermöglicht in C# oder Visual Basic .NET geschriebene Anwendungen auf einem z.B.: Linux System auszuführen. Schauen Sie am besten in beiden Sprachen mal rein und entscheiden Sie nach Ihrem Gefühl, welches Ihnen einfacher erscheint.

Vielleicht ist bei der Entscheidung in Betracht zu ziehen, ob Sie in Zukunft vielleicht noch Vorhaben in VB Skript, PHP oder in Java zu programmieren.