Einträge mit Tag “howto”

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)

  1. Module modMain
  2.  
  3. Sub Main()
  4.  
  5. Using con As New MySql.Data.MySqlClient.MySqlConnection("Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword")
  6.  
  7. Try
  8. con.Open()
  9. Catch ex As Exception
  10. MsgBox(ex.Message, MsgBoxStyle.Critical)
  11. End Try
  12.  
  13. Using cmd As New MySql.Data.MySqlClient.MySqlCommand("SELECT * FROM Users", con)
  14.  
  15. Using dr As MySql.Data.MySqlClient.MySqlDataReader = cmd.ExecuteReader
  16.  
  17. Do While dr.Read
  18. MsgBox(dr.Item("Username"))
  19. Loop
  20.  
  21. End Using
  22.  
  23. End Using
  24.  
  25. End Using
  26.  
  27. End Sub
  28.  
  29. 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

  1. 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:

  1. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  3. <targets>
  4. <target name="file" xsi:type="File"
  5. layout="${longdate} ${logger} ${callsite} ${message} ${exception:Format=tostring} ${newline}"
  6. fileName="${basedir}/${windows-identity:domain=false}.log"/>
  7. </targets>
  8. <rules>
  9. <logger name="*" minlevel="Debug" writeTo="file"/>
  10. </rules>
  11. </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:

  1. Public Logger as NLog.Logger = NLog.LogManager.GetCurrentClassLogger
  2. ...
  3. Me.Logger.Info("Dies ist ein Test")
  4. 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.

  1. USE Datenbankname
  2. go
  3.  
  4. BACKUP LOG Datenbankname WITH TRUNCATE_ONLY
  5. go
  6.  
  7. ALTER DATABASE Datenbankname SET SINGLE_USER
  8. go
  9.  
  10. DBCC Shrinkfile(Datenbankname_Log, 2)
  11. go
  12.  
  13. ALTER DATABASE Datenbankname SET Multi_User
  14. 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:

http://tr.im/oS1h

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:

iSmash Magazine

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.

  1. Module modMain
  2.  
  3. Sub Main()
  4. Console.WriteLine("Installiere MSI Pakete...")
  5. Try
  6. RunAll()
  7. Catch ex As Exception
  8. Console.WriteLine("Fehler: " & ex.Message)
  9. Console.WriteLine("Bitte drücken Sie eine beliebige Taste zum Beenden.")
  10. Console.ReadLine()
  11. End Try
  12. Console.WriteLine("Installation abgeschlossen.")
  13. End Sub
  14.  
  15. ''' <summary>
  16. ''' Nach MSI-Paketen im aktuellen Verzeichnis (dieser EXE) suchen und alle MSI-Pakete
  17. ''' nacheinander ausführen.
  18. ''' </summary>
  19. ''' <remarks></remarks>
  20. Public Sub RunAll()
  21.  
  22. Dim lstFiles As Collections.ObjectModel.ReadOnlyCollection(Of String) = _
  23. My.Computer.FileSystem.GetFiles(Environment.CurrentDirectory, FileIO.SearchOption.SearchTopLevelOnly, "*.MSI")
  24.  
  25. For Each fn As String In lstFiles
  26. ExecuteAndWait(fn, "/quiet")
  27. Next
  28.  
  29. End Sub
  30.  
  31. ''' <summary>
  32. ''' Einen Prozess starten und auf dessen Ende warten
  33. ''' </summary>
  34. ''' <param name="ProcessPath">Name der Datei die ausgeführt werden soll</param>
  35. ''' <param name="Arguments">Optionale Parameter</param>
  36. ''' <remarks></remarks>
  37. Public Sub ExecuteAndWait(ByVal ProcessPath As String, Optional ByVal Arguments As String = "")
  38.  
  39. Dim proc As System.Diagnostics.Process
  40.  
  41. Try
  42. proc = New System.Diagnostics.Process()
  43. proc.StartInfo.FileName = ProcessPath
  44. proc.StartInfo.Arguments = Arguments
  45. proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal
  46. proc.Start()
  47. proc.WaitForExit()
  48. proc.Close()
  49. Catch ex As Exception
  50. MsgBox(String.Format("Prozess {0} konnte nicht gestartet werden. Fehler: {1}.", ProcessPath, ex.Message))
  51. End Try
  52.  
  53. End Sub
  54.  
  55. End Module

Tags ¦ , , , , und