Biggle's Blog

Web- und Software Development

by Mario Priebe

C Programmieren für Anfänger

In diesem Artikel geht es mal “Back to the Roots”. C#, C++ und Konsorten sind  ja für eine fortgeschrittene Programmierung super aber was ist mit den Leuten, die beim Programmieren Lernen von NULL anfangen? Da ist eine elementare Programmiersprache wie C wohl verständlicher, um sich danach auf eine komplexere Sprache zu konzentrieren – wenn man nicht bei der C Programmierung im Linux- oder Hardwarebereich bleiben möchte.

C ist trotz seines Alters immer noch eine der meist genutzten Programmiersprachen, das darf man nicht vergessen. Viele höhere Sprachen, wie z.B. auch C#, nutzen den C-Style bei der Syntax. Eine Sprache mit dem gleichen Schreibstil zu lernen ist natürlich wesentlich einfacher. Für alle Programmier-Anfänger, die nun das C Programmieren lernen möchten, empfehle ich das C-HowTo.

Das ist ein kostenloses C Handbuch im Internet. Das Buch lehrt das Programmieren anhand der Sprache C. Nach meinem ersten Einblick zu urteilen, ist der Schreibstil alles andere als theorielastig und trocken, macht fasst schon Spaß zu lesen – aber schaut es euch selbst an
C-HowTo – Das C Handbuch für Anfänger

Für den ersten Geschmack gibt es das erste Kapitel als Webcast

YouTube Preview Image

Kapitel 2 und vielleicht später sogar mehr, findet man im Channel von C-HowTo

Schreibt man eine Rezension über das Online Buch, kann dieser an einer Verlosung teilnehmen, in der man das Buch in gedruckter Form gewinnen kann.

Achso, bevor ich das vergesse, ich hab hier noch 3 Gutscheincodes auftreiben können, die sind jeweils nur einmal auf der C Handbuch-Bestellseite einlösbar und haben einen Wert von 5,00 Euro.

Gutscheincodes:

  • CPROGRAMMIEREN38
  • CPROGRAMMIEREN91
  • CPROGRAMMIEREN17


Also, wer zuerst kommt, malt also zuerst : )

by Mario Priebe

.Net Quicky – Linq2Ef Videorial

In diesem (mein erstes btw) Videorial zeige ich unter 5 Minuten, wie man Customer-Daten aus der BeispielDatenbank Northwind via Entity Framework an eine ComboBox bindet.

Ich empfehle gleich nach dem Start auf HD umzustellen, das schärft die Schriften.

YouTube Preview Image

Viel Spass beim entwickeln : )


by Mario Priebe

Aufzählungen speichern – C# Quicky

Um Aufzählungen konfigurierbar in einer Applikation zu speichern, kann man dazu die UserSettings benutzen.

Dazu definiert man unter Properties/Settings.settings eine Varibale vom Type “System.Collection.Spezialized.Collection” und gibt dem die entsprechenden Werte. Wenn diese gespeichert sind, wird die app.config um diese erweitert:


1
2
3
4
5
6
7
8
9
10
<setting name="Entities" serializeAs="Xml">
    <value>
        <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <string>Customer</string>
            <string>Employee</string>
            <string>Agent</string>
        </ArrayOfString>
    </value>
</setting>

dann erstelle ich eine editierbare Combobox (XAML Beispiel) und füge die entsprechenden Werte aus der StringCollection hinzu:


1
<ComboBox Grid.Row="0" Grid.Column="0" Name="cbEntiaet" IsEditable="True" />
1
2
3
4
5
6
7
8
StringCollection entities = Properties.Settings.Default.Entities;
 
if (entities != null)
    foreach (var entity in entities)
    {
        //der combobox die items aus der StringCollection hinzufuegen
        cbEntiaet.Items.Add(entity);
    }

Soweit so gut. Nun kann man dem Anwender auch ermöglichen, in der Laufzeit eigene Werte hinzuzufügen. Diese sollen ihm auch nach einem Neustart der Anwendung wieder zur verfügung stehen.

Hier speichere ich, in einem Event, Buttonclick o.ä., den neuen Wert. Dazu steht mir auch die soeben erstellte Variable zur Verfügung:


1
2
3
4
5
if (!Properties.Settings.Default.Entities.Contains(cbEntiaet.Text) && !string.IsNullOrEmpty(cbEntiaet.Text))
{
    cbEntiaet.Items.Add(cbEntiaet.Text);
    Properties.Settings.Default.Entities.Add(cbEntiaet.Text);
}

Natürlich darf man nicht vergessen diesen noch zu speichern:

1
Properties.Settings.Default.Save();

Um einen Wert aus der Liste zu löschen:

1
Properties.Settings.Default.Entities.Remove(cbEntiaet.Text);

und speichern nicht vergessen ; )

Nun, nun stellte sich mir die Frage, wo werden diese neuen Werte denn gespeichert? Diese Frage stellte auch mein Kollege auf StackOverflow, wo als Antwort steht, das die lokal beim User abgespeichert werden. Bei XP z.B findet man diese dann unter


1
C:\Dokumente und Einstellungen\[USER]\Lokale Einstellungen\Anwendungsdaten\[PROJECTNAME]\[APPLICATION].ResourceXWr_Url_syjydbfqftg1ii2x4tk44y4cakdgnvzz\1.0.0.0

oder einfach nach *user.config* innerhalb des WindowsUser suchen ; )

Gespeichert werden hier NUR die Eingaben die durch dem Anwender hinzugefügt werden. Die Informationen in der app.exe.config bleiben davon unberührt.

Viel Spaß beim entwickeln ; )

by Mario Priebe

XAML Markup Kompatibilität ignorieren

Den einen Tag habe ich noch geschrieben, wie man schöne Namespaces im XAML generiert, an einem anderen Tag funktioniert es  “aus unergründlichen Tiefen” nicht mehr.

Intellisense ist da und er zeigt mir auch alle verfügbaren Klassen in diesem Namespace, aber der Kompiler sieht es einfach nicht ein und wehrt sich davor mir eine DLL zu bauen.

Jedoch gibt es hier eine Möglichkeit diesen “auszutricksen”. Man nehme sich den Namespace markup-compability

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

und setzt seinen Namenspace

xmlns:local="http://schema.biggle.de/Core/Controls"

auf ignorable

mc:Ignorable="local"

Nun zieht der Kompiler auch durch und alles ist im Lot : )


Viel Spass beim entwickeln

by Mario Priebe

Basta! 2009… ich bin dabei

Von Dienstag den 22.09.2009 bis zum Donnerstag den 24.09.2009 werd ich auf der Basta, in der Rheingoldhalle Mainz sein.

basta

Das coole ist, es gibt mehrere Konferenzen gleichzeitig in einem Paket. Zu der Basta Hauptkonferenz kommen VBDays, C#Days, die SQLCON und die ShareConnect dazu. Wobei für mich die VBDays und die ShareConnect kein Schwerpunkt bilden.

Wenn ich so in den Sessions “schmöker”, werde ich voraussichtich an folgenden Terminen teilnehmen:

Dienstag 22.09.

08:30 Eröffnung

09:30-10:45 WCF Tipps und Tricks

11:15-12:30 Test-driven Development ()

12:30-15:15 Mittag

14:00-15:15 Baumschule Expression Trees in C#, CLR und DLR

15:30-16:45 Understanding C# 3.0 and 4.0 oder Presentation Zen

17:15-18:30 .NET Service Bus: Grenzenlose Kommunikation oder Design for Testability in C#

18:45-19:30 Light up the Web / Silverlight Session (Line of Business)

Mittwoch 23.09.

08:30-09:45  Visual Studio 2010 und das .NET Framework 4.0 (Teil 1) oder Pragmatic C# Patterns

10:15-11:30 Oh der Tag wird schwer sich zu entscheiden -.- Visual Studio 2010 und das .NET Framework 4.0 (Teil 2) oder Design und Realisierung von sicheren Add-in-Modellen oder Codequalität mittels Code Contracts (.NET 4) und PEX oder NHibernate – Ein Einstieg

11:45-12:30 Keynote

12:30-14:00 Mittag

14:00-15:15 Neues in Silverlight 3 oder Generics, Lambdas and Extension Methods – Beyond List

15:45-17:00 Silverlight 3 Enterprise Development

17:15-18:30 Parallelisierung mit funktionalen Ansätzen in C#

18:45-19:30 Windows Live Framework and Mesh

19:30-20:45

20:45-22:00 Kostenlos.NET

Donnerstag 24.09.

08:30-09:45 Interaktionen in der "Office-Welt" mit .NET

10:15-11:30 Windows 7 APIs für .NET-Entwickler oder Dynamische Verbindungen mit WPF Data Binding

11:45-12:30 Keynote

12:30-14:00 Mittag

14:00-15:15 WPF Controls im Eigenbau

15:45-17:00 WPF-Anwendungsarchitektur (CAL/MVVM)

17:15-18:30 .NET Gems – Small Pieces of Code that make your Day oder Beyond Relational – Geografische und multimediale Daten in SQL Server

Alles in allen werden das wohl wieder drei anstrengende Tage, aber was solls.. von nix kommt nix : )

by Mario Priebe

LINQ2SQL Datensatz hinzufügen, ändern + löschen

Folgendes Beispiel zeigt das Hinzufügen, das Ändern und das Löschen eines Datensatzes während der Laufzeit mit LINQ2SQL

Hinzufügen eines Datensatzes:

1
2
3
4
5
6
7
8
9
10
11
12
using (var dbc = new DataBaseDataContext())
{
    var customer = new Customer()
                       {
                           Company = "Biggle",
                           Country = "Germany",
                           ContactName = "Priebe",
                           CustomerID = "1"
                       };
    dbc.Customer.InsertOnSubmit(customer);
    dbc.SubmitChanges();
}

Datensatz ändern:

1
2
3
4
5
var customer = (from c in dbc.Customer
                where c.CustomerID == "1"
                select c).First();
customer.Company = "Biggles Blog";
dbc.SubmitChanges();

Löschen mit Bedingung:

1
2
3
4
5
6
7
8
var qry = from c in dbc.Customer
          where c.ContactName=="priebe"
          select c;
foreach (var item in qry)
{
    dbc.Customer.DeleteOnSubmit(item);
    dbc.SubmitChanges();
}

Ausgeführten SQL Query in der Konsole mit ausgeben:

dbc.Log = Console.Out;