MySQL unter VB .NET
24. May 2010 13:05 (bearbeiten)
Um MySQL unter VB .NET zu verwenden genügt es eigentlich, sich den Quellcode des MySQL Connectors von MySQL.de herunterzuladen, das ganze zu kompilieren und anschließend die kompilierte DLL ins gewünschte Projekt als Referenz einzubinden.
Anschließend kann man wie unter ADO.NET mit Connections, Commands und DataReadern arbeiten:
(angenommen, wir hätten eine Tabelle namens Users, mit einer Spalte Username, die einige Benutzernamen enthält)
Module modMain Sub Main() Using con As New MySql.Data.MySqlClient.MySqlConnection("Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword") Try con.Open() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) End Try Using cmd As New MySql.Data.MySqlClient.MySqlCommand("SELECT * FROM Users", con) Using dr As MySql.Data.MySqlClient.MySqlDataReader = cmd.ExecuteReader Do While dr.Read MsgBox(dr.Item("Username")) Loop End Using End Using End Using End Sub End Module
Assert failure in ENABLEAGENT in Lotus Notes 8
18. Feb 2010 8:09 (bearbeiten)
Ja, wenn Lotus Notes dem Benutzer beim Deaktivieren des Abwesenheitsassistenten (oder dem Out of Office Agent) diese Meldung an den Kopf wirft, dann liegt das daran, dass der Benutzer keine Agenten ausführen kann.
Nach einer Änderung des Zugriffstyps auf die eigene Mailschablone von Editor auf Manager hat es dann geklappt.
Mit NLog unter .NET protokollieren
08. Nov 2009 14:58 (bearbeiten)

Wer kennt das nicht? Mal eben ein kleines Programm geschrieben, an die Anwender verteilt und auf irgendeinem Rechner läuft das Programm nicht wie es soll.
Nun ist guter Rat teuer, denn welcher Programmierer gibt sich schon die Mühe in kleinere Tools eine ausgefeilte Protokoll-Funktion zu implementieren um dem Fehler gegebenenfalls schnell auf die Schliche zu kommen?
Mit NLog ist das anders. NLog ist ein Framework fürs Protokollieren unter .NET. Ist der Verweis zu NLog im Projekt erst einmal eingebunden, kann man mit einer Zeile wie
Me.Logger.Warn(ex.Message)
eine Exception inklusive aufrufender Methode und kompletter Exception-Fehlerausgabe protokollieren.
Auf der NLog Webseite ist zwar relativ einfach beschrieben, wie man das Framework in das eigene Projekt einbaut, was ich hier im folgenden allerdings beschreibe, ist noch etwas kürzer, da ausschließlich für VB .NET.
Verweis einbinden
Bevor man das NLog Framework verwenden kann, muss man als Verweis die NLog.dll zum Projekt hinzufügen. Hierzu lädt man auf der Codeplex Projekteseite von NLog am einfachsten die vorkompilierte DLL herunter (man kann sich natürlich auch den Quellcode schnappen und selbst kompilieren :-).
Konfigurationsdatei erstellen
Es gibt zwar viele Varianten, wie NLog nach einer Konfigurationsdatei sucht, aber die einfachste ist, eine Datei namens "nlog.config" im Programmverzeichnis zu erstellen.
Als Inhalt dieser Datei empfehle ich für Anfänger folgendes:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" layout="${longdate} ${logger} ${callsite} ${message} ${exception:Format=tostring} ${newline}" fileName="${basedir}/${windows-identity:domain=false}.log"/> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file"/> </rules> </nlog>
In der Konfigurationsdatei wird mit dem Tag "Target" bestimmt, wohin der Protokolleintrag wandern soll.
Das Target vom Typ "file" beispielsweise schreibt alle Einträge in eine Datei. Außer der Möglichkeit Protokolleinträge in Dateien zu schreiben, bietet NLog dem Benutzer auch eine Mail, ein Textcontrol, ein Netzwerk, das Windows Ereignisprotokoll einen Webservice und eine per ADO.NET ansprechbare Datenbank als Ziel an. Darüberhinaus ist es auch noch möglich, sich eigene Targets, wie beispielsweise einen FTP-Server, zu schreiben. Und natürlich kann man auch mehrere Targets gleichzeitig befüllen.
Im obigen Beispiel wir als Ziel eine Datei verwendet, deren Dateiname aus dem Windows-Benutzername besteht. Die Datei wird dabei automatisch in Unterordnern gelagert, deren Name aus dem aktuellen Datum generiert wird.
Der Tag "Layout" beschreibt dabei, wie die Protokolleinträge formatiert bzw. ergänzt werden.
Der Platzhalter "${longdate}" wird durch das Datum, der Platzhalter "${logger}" durch den Namen der Logging-Klasse, "${callsite}" durch die aufrufende Methode und schließlich "${message}" als die eigentliche Protokollmeldung ersetzt.
Der Zusatz "${exception:Format=tostring}" regelt, dass Exceptions inklusive der Detailmeldungen erfasst werden. Der Platzhalter "${newline}" schließlich, fügt einen Zeilenumbruch am Ende der Meldung ein.
Verwendung
Im Programm selbst, greift man auf NLog beispielsweise so zu:
Public Logger as NLog.Logger = NLog.LogManager.GetCurrentClassLogger ... Me.Logger.Info("Dies ist ein Test") Me.Logger.Warn(ex.Message)
Transaktionslog einer SQL Server Datenbank verkleinern
11. Aug 2009 13:41 (bearbeiten)
Um das Transaktionslog einer SQL Datenbank zu verkleinern, führt man folgendes Script per OSQL aus.
Die entscheidende Arbeit übernimmt dabei der Befehl dbcc ShrinkFile welcher als Parameter den Namen der Log-Datenbank und die spätere Größe der Log-Datei in Megabyte mitgeteilt bekommt.
Die Befehle um die Datenbank in den Single User Modus und später in den Multi User Modus zu schalten sind dafür da, dass wir exklusiven Zugriff auf die Datenbank bekommen.
USE Datenbankname go BACKUP LOG Datenbankname WITH TRUNCATE_ONLY go ALTER DATABASE Datenbankname SET SINGLE_USER go DBCC Shrinkfile(Datenbankname_Log, 2) go ALTER DATABASE Datenbankname SET Multi_User go
Tethering auf dem iPhone 3G OS 3.0 aktivieren
11. Jul 2009 16:23 (bearbeiten)
Um das von Apple integrierte Tethering im iPhone OS 3.0 zu aktivieren, geht man einfach auf die folgende Seite mit dem Safari Browser auf dem iPhone:
Anschließend scrollt nach unten bis man zu "Mobileconfigs" und "Download" kommt. Dann klickt man auf Download, wählt sein Profil aus (hier in Deutschland T-Mobile mit altem oder neuem Vertrag) und installiert es.
Nach einem Reboot kann man im iPhone unter "Einstellungen / Allgemein / Tethering" Tethering aktivieren.

Wie auf der Einstellungsseite beschrieben, muss man dann nur noch das iPhone mit einem Gerät koppeln (bei mir beispielsweise mein Mac mini) und kann surfen.
Einen etwas ausführlicher beschrieben Artikel mit Bildern auf Englisch findet man hier:
Dateizugriffe aufheben
18. Jun 2009 19:37 (bearbeiten)
Wir hatten gestern im Büro erneut das Problem, dass eine Excel-Arbeitsmappe, die über das Netzwerk zur Bearbeitung durch mehrere Benutzer gleichzeitg freigegeben ist, einen Schreibzugriff meldete, obwohl niemand die Datei mehr geöffnet hatte. Und nun ließ sich die Datei natürlich nicht mehr abspeichern...
Wie es dazu kam, konnten wir noch nicht klären, allerdings wie man den Dateizugriff im Netzwerk wieder aufhebt.
Und zwar kann man auf dem Dateiserver (Windows 2000 Server) unter "Systemsteuerung / Verwaltung / Computerverwaltung" im Untermenü "System / Freigegebene Ordner / Geöffnete Dateien" den Zugriff für diese einzelne Datei via Rechtsklick gezielt wieder aufheben.
VB .NET: MSI Pakete automatisch installieren
09. Jun 2009 6:41 (bearbeiten)
Dieses kleine Modul installiert alle MSI-Pakete, die im aktuellen Programmverzeichnis gefunden werden im "Quiet"-Modus, d. h. ohne irgendwelche Nachfragen.
Module modMain Sub Main() Console.WriteLine("Installiere MSI Pakete...") Try RunAll() Catch ex As Exception Console.WriteLine("Fehler: " & ex.Message) Console.WriteLine("Bitte drücken Sie eine beliebige Taste zum Beenden.") Console.ReadLine() End Try Console.WriteLine("Installation abgeschlossen.") End Sub ''' <summary> ''' Nach MSI-Paketen im aktuellen Verzeichnis (dieser EXE) suchen und alle MSI-Pakete ''' nacheinander ausführen. ''' </summary> ''' <remarks></remarks> Public Sub RunAll() Dim lstFiles As Collections.ObjectModel.ReadOnlyCollection(Of String) = _ My.Computer.FileSystem.GetFiles(Environment.CurrentDirectory, FileIO.SearchOption.SearchTopLevelOnly, "*.MSI") For Each fn As String In lstFiles ExecuteAndWait(fn, "/quiet") Next End Sub ''' <summary> ''' Einen Prozess starten und auf dessen Ende warten ''' </summary> ''' <param name="ProcessPath">Name der Datei die ausgeführt werden soll</param> ''' <param name="Arguments">Optionale Parameter</param> ''' <remarks></remarks> Public Sub ExecuteAndWait(ByVal ProcessPath As String, Optional ByVal Arguments As String = "") Dim proc As System.Diagnostics.Process Try proc = New System.Diagnostics.Process() proc.StartInfo.FileName = ProcessPath proc.StartInfo.Arguments = Arguments proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal proc.Start() proc.WaitForExit() proc.Close() Catch ex As Exception MsgBox(String.Format("Prozess {0} konnte nicht gestartet werden. Fehler: {1}.", ProcessPath, ex.Message)) End Try End Sub End Module
