To parse T-SQL from C#, add a reference to the following libraries (listed under Extensions, not under Framework): Microsoft.Data.Schema.ScriptDom Microsoft.Data.Schema.ScriptDom.Sql My examples imports the following namespaces: using System; using System.Collections.Generic; using System.Linq; using Microsoft.Data.Schema.ScriptDom; using Microsoft.Data.Schema.ScriptDom.Sql; using System.IO; This code shows how to parse a boolean expression: //Parse var p = new TSql100Parser(false); IList<ParseError> err; var sql = “(a > 10) and (i < 10)”; var exp = p.ParseBooleanExpression(new StringReader(sql), out err); //Errors? Empty if none. Console.WriteLine($”{err.Count} errors.”); err.ToList().ForEach(x => Console.WriteLine( $”Error \”{x.Message}\” at line {x.Line}.”)); //Result. Null if errors. if (!(exp == null)) exp.ScriptTokenStream.ToList().ForEach(x => Console.WriteLine( $”Token type: {x.TokenType}, source: {x.Text}”)); If you want to parse a complete Transact SQL program, call the ParseStatementList function instead of the ParseBooleanExpression[…]

For this example, I am using Visual Studio 2015 Community edition to create a console application.  Make sure that you are using .NET Framework 4.6 or later. Let’s say that you have a .cs file with constants that looks something like this: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MySystem { public class Settings { public const int Iterations = 56; public const string TargetFilename = @”C:\Output\log.txt”; public const int Length = 128; public const bool Repeat = true; } } You want to know the names and values in this file. Let’s start from the beginning. In my console application, I want a reference to the CodeSearchTree – I accept your complements for my choice of[…]

Jag fick en fråga om att räkna ut snittvärden. Det finns olika sätt att lösa det på, där det enklaste kanske är att använda Excel för att göra ett enkelt datablad. Jag tänkte visa hur man kan göra i C# för att få en start till ett registerprogram. För detta använder jag Visual Studio 2015 Community Edition som kan laddas hem gratis här. Välj att skapa ett nytt projekt. Jag kör mot .NET Framework 4.5.2 (1) och har valt kategorin Windows under C# (2) och projekttypen Console Application (3). Se till att välja ett lämpligt projektnamn och en lämplig plats att spara projektet på (4). Sen är det bara att börja skriva. Här har vi den grundläggande principen: //Några flyttal[…]

SignalR är ett ramverk som låter webbklienter prata direkt med webbservern via sockets, och som låter webbservern prata direkt med klienterna på samma sätt. Tack vare SignalR kan du göra funktionsanrop direkt till de användare som för tillfället råkar surfa på din hemsida. SignalR bygger ovanpå ramverket OWIN för ASP.NET. I detta exempel arbetar jag i Visual Studio 2013 med ett projekt av typen ASP.NET MVC, så jag utgår alltså ifrån Microsofts exempelprogram som levereras som mall i Visual Studio 2013. För att komma igång ska vi: Installera paketet SignalR i projektet. Läsa in JavaScript-filen för SignalR. Koppla SignalR-hubbarna till OWIN. Skapa en hubb. Därefter är det fritt fram att börja kommunicera! För att installera SignalR, skriv följade i Package[…]

Det finns tre olika typer av aktörer i Akka .NET. Nedan använder jag en ReceiveActor som utmärker sig genom att den använder funktionen Receive för att ta emot ett meddelande. Exemplen som följer förutsätter att namnrymden Akka.Actor är inläst. Alla aktörer har en sökväg som är oberoende av vilken CLR-klass som beskriver dem. Givet att system är ett initierat aktörssystem med namnet MittSystem och att vi har två aktörer… public class EnRootActor : ReceiveActor { } public class EnAnnanActor : ReceiveActor { } …så kommer denna kod att fallera eftersom båda aktörerna, trots sina olika klasser, gör anspråk på samma sökväg: var a = system.ActorOf<EnRootActor>(“MinRoot”); Console.WriteLine(a.Path); var b = system.ActorOf<EnAnnanActor>(“MinRoot”); Console.WriteLine(b.Path); Jag använder Akka .NET lokalt, vilket syns på sökvägen[…]

Denna gång tänker jag använda en Windows Forms Application för att visa schemaläggaren i Akka .NET. Som vanligt, för att komma åt Akka .NET i ditt projekt, växla till fönstret Package Manager Console och skriv Install-Package Akka. Om du inte ser Package Manager Console, klicka på rullgardinsmenyn Tools, välj Library Package Manager och Package Manager Console. Programmet består av följande meddelandeklass: public class TimedMessage { public string Message { get; private set; } public TimedMessage(string message) { this.Message = message; } } …och följande aktör: public class Listen : ReceiveActor { public Listen() { this.Receive<TimedMessage>(x => { System.Diagnostics.Debug.WriteLine(x.Message); }); } } Huvudfönstret har läst in namnrymden Akka.Actor för att några extension methods ska vara tillgängliga… using Akka.Actor; …och innehåller en[…]

Jag har tidigare visat hur man skickar enkla meddelanden med Akka .NET Remote. Exemplet bestod av tre projekt, en server, ett datalager och en klient. Här tänkte jag visa hur man använder Akka .NET Remote för att både skicka och ta emot meddelanden. I detta exempel återanvänder jag servern BioServer och datalagret BioData från det förra exemplet. Tanken är alltså att programmet är ett enkelt bokningssystem för en liten biograf med tre sittplatser. Denna gång tänker jag utöka datalagret med lite nya meddelanden och servern med kapaciteten att svara på inkommande anrop. Dessutom bygger jag en ny grafisk klient. Datalagret I den förra versionen hade vi bara ett enda definierat meddelande i datalagret, klassen Bokningsmeddelande. Detta meddelande finns kvar, men nu kompletterar[…]

Akka .NET Remote låter aktörerna i Akka .NET skicka meddelanden till andra processer genom Windows Sockets. Det innebär att ett system kan distribueras över flera processer oavsett om de ligger på samma fysiska maskin eller på en annan maskin i nätverket. Arkitekturen i Akka .NET Remote är serverfri – varje peer kan kontakta och kommunicera med vilken annan peer som helst, givet att namn och port är känt. Det innebär att om du bygger en server, kan den utan problem förmedla direktkontakt mellan sina klienter. Detta exempel visar ett mycket enkelt bokningssystem av en biosalong med tre stolar. Systemet består av tre stycken projekt, en server, ett datalager och en klient. Servern och klienten är Console Applications (C#) och datalagret[…]

Historiskt sett har det varit ganska komplicerat att bygga multitrådade applikationer i .NET. Rent tekniskt var det enkelt att sjösätta en tråd med hjälp av klassen System.Threading.Thread, men om mycket skulle göras började koden ganska snabbt likna spaghetti. För att minska ner koden kan man använda multitrådade delegater istället för objekt av typen Thread, men det löste inte problemet med spaghettikod. Nyckelorden asynk och await löste både komplexiteten med hopp och returvärde, men var ganska hårt knutet till modellen TAP. Om jag väljer att jobba med Akka .NET blir trådningen ännu mer hanterad, fast kring en mycket friare modell än TAP, nämligen Actor Model. (I alla nedanstående exempel jobbar jag i Visual Studio 2013.) Tänk dig att jobbar i Windows[…]