C# Code
Nachdem ich bei Klaus gelesen hatte, wie er es gelöst hat, eine App nur einmal zu starten, musste ich nochmal extrem nachdenken, bei welchem Projekt und wie ich das gelöst hatte.
Das mir das nicht nochmal passiert, habe ich hier mal den Code verewigt.
Ursprünglich von Codeproject in c#.
1 Imports System
2 Imports System.Windows.Forms
3 Imports System.Runtime.InteropServices
4 Imports System.Text
5 Imports System.Diagnostics
6 Imports System.Threading
7 Imports System.Reflection
8 Imports System.IO
9
10 Namespace SingleInstance
11 ''' <summary>
12 ''' Summary description for SingleApp.
13 ''' </summary>
14 Public Class SingleApplication
15
16 Public Sub New()
17 End Sub
18 ''' <summary>
19 ''' Imports
20 ...
Leider gibt es noch keinen Weg, in LinqToSQL oder Entity Framework den neuen Datentyp HierarchyID in MSSQL-Server 2008 zu nutzen. (Microsoft am 12.5.2009)
Da der Datentyp sehr praktisch, schnell und immer wieder Hierarchien bei Kommentaren, Menüstrukturen usw. auftreten, will ich ihn natürlich trotzdem nutzen.
Hierfür erstelle ich erst einmal eine Tabelle, die eine ContentID enthät, welche die Integer-ID meines Contents enthält, die HierarchyID natürlich und eine assoziationTypeID, da ich diese Tabelle für unterschiedlichen Content nutzen möchte.
CREATE TABLE [dbo].[t_C_ContentHierarchy](
[d_C_ContentHierarchyID] [int] IDENTITY(1,1) NOT NULL,
[d_ContentID] [int] NOT NULL,
[d_hierarchyID] [hierarchyid] NOT NULL,
[d_I_assoziationTypeID] [int] NOT NULL,
CONSTRAINT [PK_t_C_UserContentHirarchy] PRIMARY KEY CLUSTERED
(
[d_C_ContentHierarchyID] ASC
)WITH (PAD_INDEX = OFF,...
Jeder kennt es, ab und zu muß man dann doch HTML-Code im ´Hintergrund (z.B. für einen Email-Body) generieren und sückelt sich zu unübersichtlich zu Tode.
Mit dem XElement ist das kein Problem.
Man schreibt den HTML-Code wie im Markup-Editor und kann sogar Variablen wie im markup einbinden:
<%=meineVariable%>
Kein hantieren mit Anführungszeichen usw..
Mit Visual Studio 2008 wurden auch die Assemblies des ADO.NET Sync Services installiert.
Mit Hilfe dieser API lassen sich (z.B. mobile) Anwendungen die nicht ständig mit der Datenbank verbunden sind einfach mit dem Server syncronisieren.
Mit Hilfe eines Assistenten kann man innerhalb weniger Minuten alle notwendigen Routinen und Trigger zur Aktualisierung der ClientDatenbank und der ServerDatenbank erstellen.
Auf Channel9 ist ein 18 Minuten Video von Daniel Moth für den Schnelleinstig mit dem Microsoft Sync Framework erschienen.
Den Assistenten kann man aufrufen in dem man ein neues Element "Local Database Cache" hinzufügt.
Im Code wird dann nur noch ein "syncAgent.Synchronize();" benötigt um die Synchronisierung durchzuführen.
Mit Hilfe von System Reflection kann man Enumwerte auslesen und entsprechend weiter verarbeiten.
using System.Reflection;
private enum Fruits
{
Orange = 1,
Apple = 2,
Pear=3
}
static void Main()
{
Type dataType = Enum.GetUnderlyingType(typeof(Fruits));
foreach (FieldInfo field in typeof(Fruits).GetFields(
BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public))
{
object value = field.GetValue(null);
Console.WriteLine("{0}={1}", field.Name, Convert.ChangeType(value, dataType));
} Console.ReadLine();
}
EDIT:
Oder eben einfach mit
Enum.GetValues(Fruits);
Enum.GetNames(Fruits);
(Danke Dani für den Kommentar!)
Eine der Neuerungen in .NET 3.5 sind die Extension Methods.
Mit Hilfer der Extension Methods lassen sich alle nicht static Classes um eigene Methoden erweitern.
Ob die Basisklassen im Projekt oder als Referenz eingebunden sind ist egal.
Hier ein Beispiel:
FileInfo soll um eine Methode erweitert werden, die in der Console FileInfo.Exists ausgibt und eine Benutzerreaktion abwartet.
Hierfür fügen wir dem Projekt eine statische Methode mit entsprechedem Syntax hinzu:
public static class myExtensionMethods
{
public static string ExistsMessage(this FileInfo f )
{
Console.WriteLine("FileInfo.Exists={0}", f.Exists);
Console.ReadLine();
return f.Exists.ToString();
}
}
Dannach ist jedes Object vom Typ Fileinfo um diese statische Methode erweitert(und zwar inklusive Intellisense)
Siehe auch: New...
nach dem ich in letzter Zeit fast nur noch in c# entwickle, stört es mich auch mehr und mehr das die ständig benötigten Klammern auf der deutschen Tastatur relativ kompliziert zu erreichen sind.
Die Lösung ist, sich ein neues Macro-Project anzulegen und in den Options von Visual Studio die entsprechenden Methoden mit einem Keycode zu versehen. (Die Methoden der Macros erscheinen dort unter Macros.ModulProjectName.ModulName.MethodName)
Bei mir ist ab sofort:
Ctrl + ö => {
Ctrl + ä => }
Ctrl + Shift + ö =>[
Ctrl + Shift + ä =>]
und hier der Code für das Macro
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module Module1
Sub...
Thomas Beckert hatte heute auf glengamoi.com das Problem, dass er bereits im Page_Load(ASP.NET) ein DataBind eines Repeaters durchführen musste.
Die Frage kam auf, ob dies dazu führt, dass die SQL-Abfrage evtl. mehrmals zum MSSQL geschickt wird.
Das wollte ich nun genau wissen.
In den Leistungstools des SQL-Servers gibt es den SQL Server Profiler mit dessen Hilfe man alle Aktivitäten und Abfragen auf dem SQLServer überwachen kann.
Die Antwort ist:
Beim einem Standard Aufruf macht dies keinen Unterschied. D.h. auch wenn im Page_Load ein Gridview1.DataBind() aufgerufen wird, wird nur eine Abfrage zum SQL-Server gesendet.
Die Abfrage wird unmittelbar vor dem...
In Scott Guthrie's Blog habe ich in den Jan 4th Links einenen Hinweis auf ein Script#-Update gefunden.
Aber was ist Script#?
Der Script#-Compiler von Nikhil Kothari erlaubt es Code in C# zu entwickeln und Javascript als Ergebmis zu erhalten.
Sicher interessant für jeden der firm in C# ist und mehr und mehr eigene Ajax-Funktionalitäten benötigt.
Ein weiterer Vorteil ist sicherlich das C# Intellisense von VisualStudio
Beispiel:
using System;
using ScriptFX;
using ScriptFX.UI;
namespace HelloWorld {
public class HelloWorldScriptlet : IScriptlet {
private Button _okButton;
private TextBox _nameTextBox;
private Label _helloLabel;
private XMLHttpRequest _request;
public void Start() {
_okButton = new Button(Document.GetElementById("okButton"));
_nameTextBox = new TextBox(Document.GetElementById("nameTextBox"));
_helloLabel = new Label(Document.GetElementById("helloLabel"));
_okButton.Click...