[ODBC] Zugriff auf Oracle

using System.Data;
using System.Data.Odbc;

// Username
string sUID = @"user";
// Passwort
string sPW = @"password";
// Server
string sServer = @"127.0.0.1";
// SQL-String
string sSql = @"SELECT Names FROM MyTable";

OdbcConnection conn = null;
OdbcDataReader reader = null;

try
{
    // Verbindung herstellen
    conn = new OdbcConnection("Driver={Microsoft ODBC for Oracle};Server=" + sServer + ";UID=" + sUID + ";PWD=" + sPW + ";");
    conn.Open();

    // SQL-Kommando abschicken
    OdbcCommand cmd = new OdbcCommand(sSql, conn);
    reader = cmd.ExecuteReader();

    // Daten auslesen und anzeigen
    while (reader.Read())
    {
        Console.WriteLine(reader["Names"]);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex);
}
finally
{
    // aufräumen
    if (reader != null) reader.Close();
    if (conn != null) conn.Close();
}

[ODBC] Zugriff auf JET (Access)

using System.Data;
using System.Data.Odbc;

// Username
string sUID = @"user";
// Passwort
string sPW = @"password";
// Access-Datei
string sMDB = @"C:\Temp\Northwind.mdb";
// SQL-String
string sSql = @"SELECT Names FROM MyTable";

OdbcConnection conn = null;
OdbcDataReader reader = null;

try
{
    // Verbindung herstellen
    conn = new OdbcConnection("Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sMDB + ";UID=" + sUID + ";PWD=" + sPW + ";");
    conn.Open();

    // SQL-Kommando abschicken
    OdbcCommand cmd = new OdbcCommand(sSql, conn);
    reader = cmd.ExecuteReader();

    // Daten auslesen und anzeigen
    while (reader.Read())
    {
        Console.WriteLine(reader["Names"]);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex);
}
finally
{
    // aufräumen
    if (reader != null) reader.Close();
    if (conn != null) conn.Close();
}

Schließen-Kreuz einer Form deaktivieren

/// <summary->
/// zum deaktivieren des Schließen-Kreuzes CreateParams-Methode der Form überschreiben
/// folgender Code muss in den Code des Formulars kopiert werden
/// </summary->
protected override CreateParams CreateParams
{
    get
    {
        const int CS_NOCLOSE = 0x200;

        CreateParams createParams = base.CreateParams;
        createParams.ClassStyle = createParams.ClassStyle | CS_NOCLOSE;

        return createParams;
    }
}

Onboard Speakersound (Beep) abspielen

// Aufrufbeispiel
// SpeakerBeep.PlayBeep(1000, 1000);

using System.Runtime.InteropServices;

/// <summary->
/// freeware helper class for creating a onboard system speaker beep
/// (W) 2011 by admin of codezentrale.6x.to
/// </summary->
public static class SpeakerBeep
{
    /// <summary->
    /// http://pinvoke.net/default.aspx/kernel32.Beep
    /// </summary->
    [DllImport(&quot;kernel32.dll&quot;, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool Beep(uint dwFreq, uint dwDuration);
    /// <summary->
    /// Plays a beepsound on onboard speaker
    /// </summary->
    /// <param name=&quot;freq&quot;->desired frequency [Hz]</param->
    /// <param name=&quot;duration&quot;->desired duration [ms]</param->
    /// <returns->true, if successfull, otherwise false</returns->
    public static bool PlayBeep(uint freq, uint duration)
    {
        return Beep(freq, duration);
    }
}

Enum DescriptionAttribute auslesen

using System;
using System.ComponentModel;
using System.Reflection;

/// <summary->
/// freeware helper class for getting enum descriptions
/// (W) 2011 by admin of codezentrale.6x.to
/// </summary->
public static class EnumDescriptor
{
    /// <summary->
    /// get enum attribute description
    /// </summary->
    /// <param name=&quot;val&quot;->current enum</param->
    /// <returns->returns enum attribute description</returns->
    public static string GetDescription(Enum val)
    {
        FieldInfo fi = val.GetType().GetField(val.ToString());
        DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);

        return (attributes.Length -> 0) ? attributes[0].Description : val.ToString();
    }
}

Benutzername und Benutzerolle ausgeben

using System.Security.Principal;

/// <summary->
/// freeware helper class for getting logon user info
/// (W) 2011 by admin of codezentrale.6x.to
/// </summary->
public static class UserInfo
{
    /// <summary->
    /// get logon user name
    /// </summary->
    public static string LogonUserName
    {
        get
        {
            return WindowsIdentity.GetCurrent().Name;
        }
    }
    /// <summary->
    /// get role of current user
    /// </summary->
    public static string LogonUserRole
    {
        get
        {
            string role = string.Empty;

            WindowsPrincipal principle = new WindowsPrincipal(WindowsIdentity.GetCurrent());

            if (principle.IsInRole(WindowsBuiltInRole.AccountOperator)) role = &quot;account operator&quot;;
            else
                if (principle.IsInRole(WindowsBuiltInRole.Administrator)) role = &quot;administrator&quot;;
                else
                    if (principle.IsInRole(WindowsBuiltInRole.BackupOperator)) role = &quot;backup opearator&quot;;
                    else
                        if (principle.IsInRole(WindowsBuiltInRole.Guest)) role = &quot;guest&quot;;
                        else
                            if (principle.IsInRole(WindowsBuiltInRole.PowerUser)) role = &quot;power user&quot;;
                            else
                                if (principle.IsInRole(WindowsBuiltInRole.User)) role = &quot;user&quot;;
                                else
                                    if (principle.IsInRole(WindowsBuiltInRole.PrintOperator)) role = &quot;print operator&quot;;
                                    else
                                        if (principle.IsInRole(WindowsBuiltInRole.Replicator)) role = &quot;replicator&quot;;
                                        else
                                            if (principle.IsInRole(WindowsBuiltInRole.SystemOperator)) role = &quot;system operator&quot;;

            return role;
        }
    }
}

Manifest in ein Projekt einbinden

Häufig ist es notwendig, dass man einer Anwendung Adminrechte gibt, wenn diese zum Beispiel Netzwerkzugriffe, Registryeingriffe usw. tätigen muss. Dazu muss man eine Anwendungsmanifestdatei in die exe-Datei einkompilieren, in welcher die entsprechenden Benutzerrechte für die Windows-UAC eingetragen sind.

Variante 1:

  1. In Visual Studio 2010 besteht die Möglichkeit eine Manifestdatei erzeugen lassen: im Projekt Rechtsklick auf das Projekt->Hinzufügen->Neues Element …->Anwendungsmanifestdatei. Visual Studio erzeugt unten stehende Datei, wobei die entsprechend benötigten Zeilen aus- bzw. einkommentiert werden müssen:
    <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?->
    <asmv1:assembly manifestVersion=&quot;1.0&quot; xmlns=&quot;urn:schemas-microsoft-com:asm.v1&quot; xmlns:asmv1=&quot;urn:schemas-microsoft-com:asm.v1&quot; xmlns:asmv2=&quot;urn:schemas-microsoft-com:asm.v2&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;->
      <assemblyIdentity version=&quot;1.0.0.0&quot; name=&quot;MyApplication.app&quot;/->
      <trustInfo xmlns=&quot;urn:schemas-microsoft-com:asm.v2&quot;->
        <security->
          <requestedPrivileges xmlns=&quot;urn:schemas-microsoft-com:asm.v3&quot;->
            <!-- UAC-Manifestoptionen
              Wenn Sie die Zugangsebene für das Windows-Benutzerkonto ändern möchten, ersetzen Sie den 
              requestedExecutionLevel-Knoten durch eines der folgenden Elemente.
    
            <requestedExecutionLevel  level=&quot;asInvoker&quot; uiAccess=&quot;false&quot; /->
            <requestedExecutionLevel  level=&quot;requireAdministrator&quot; uiAccess=&quot;false&quot; /->
            <requestedExecutionLevel  level=&quot;highestAvailable&quot; uiAccess=&quot;false&quot; /->
    
                Durch Angeben des requestedExecutionLevel-Knotens wird die Datei- und Registrierungsvirtualisierung deaktiviert.
                Wenn Sie Datei- und Registrierungsvirtualisierung für Abwärts- 
                kompatibilität verwenden möchten, löschen Sie den requestedExecutionLevel-Knoten.
            -->
            <requestedExecutionLevel level=&quot;asInvoker&quot; uiAccess=&quot;false&quot; /->
          </requestedPrivileges->
        </security->
      </trustInfo->
      
      <compatibility xmlns=&quot;urn:schemas-microsoft-com:compatibility.v1&quot;->
        <application->
          <!-- Eine Liste aller Windows-Versionen, mit denen die Anwendung kompatibel ist. Windows wählt automatisch die am stärksten kompatible Umgebung aus.-->
    
          <!-- Wenn die Anwendung mit Windows 7 kompatibel ist, heben Sie die Kommentierung des folgenden supportedOS-Knotens auf.-->
          <!--<supportedOS Id=&quot;{35138b9a-5d96-4fbd-8e2d-a2440225f93a}&quot;/->-->
          
        </application->
      </compatibility->
      
      <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
      <!-- <dependency->
        <dependentAssembly->
          <assemblyIdentity
              type=&quot;win32&quot;
              name=&quot;Microsoft.Windows.Common-Controls&quot;
              version=&quot;6.0.0.0&quot;
              processorArchitecture=&quot;*&quot;
              publicKeyToken=&quot;6595b64144ccf1df&quot;
              language=&quot;*&quot;
            /->
        </dependentAssembly->
      </dependency->-->
    
    </asmv1:assembly->
    
  2. eine Anwendungsmanifestdatei für Windows 7 und mit Zugriffsrechten “Admin” sieht beispielhaft so aus:
    <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?->
    <asmv1:assembly manifestVersion=&quot;1.0&quot; xmlns=&quot;urn:schemas-microsoft-com:asm.v1&quot; xmlns:asmv1=&quot;urn:schemas-microsoft-com:asm.v1&quot; xmlns:asmv2=&quot;urn:schemas-microsoft-com:asm.v2&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;->
      <assemblyIdentity version=&quot;1.0.0.0&quot; name=&quot;MyApplication.app&quot;/->
      <trustInfo xmlns=&quot;urn:schemas-microsoft-com:asm.v2&quot;->
        <security->
          <requestedPrivileges xmlns=&quot;urn:schemas-microsoft-com:asm.v3&quot;->
            <requestedExecutionLevel level=&quot;requireAdministrator&quot; uiAccess=&quot;false&quot; /->
          </requestedPrivileges->
        </security->
      </trustInfo->
      
      <compatibility xmlns=&quot;urn:schemas-microsoft-com:compatibility.v1&quot;->
        <application->
          <supportedOS Id=&quot;{35138b9a-5d96-4fbd-8e2d-a2440225f93a}&quot;/->
        </application->
      </compatibility->
      
      <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
      <!-- <dependency->
        <dependentAssembly->
          <assemblyIdentity
              type=&quot;win32&quot;
              name=&quot;Microsoft.Windows.Common-Controls&quot;
              version=&quot;6.0.0.0&quot;
              processorArchitecture=&quot;*&quot;
              publicKeyToken=&quot;6595b64144ccf1df&quot;
              language=&quot;*&quot;
            /->
        </dependentAssembly->
      </dependency->-->
    
    </asmv1:assembly->
    
  3. Die Manifestdatei muss unter Projektbaum->Eigenschaften->Anwendung->Symbol und Manifest->Manifest (Datei “app.manifest”) ausgewählt sein, damit sie von Visual Studio mit in die Anwendung einkompiliert wird.
  4. Die im Ausgabeverzeichnis fertig kompilierte Anwendung sollte nun ein Security-Schild im Icon haben.
  5. Nach dem Start der Anwendung fragt Windows-UAC nun, ob das Programm mit Adminrechten ausgeführt werden darf.

Variante 2:

  1. Diese manuelle Variante funktioniert nur mit VS Standard oder Professional, nicht mit Express, da bei letzterem keine Post Build Events eingestellt werden können.
  2. Manifestdatei in einem Editor erzeugen, Projektnamen bei “name” korrekt eintragen, Prozessorarchitektur anpassen und im Ausgabeverzeichnis des Projektes speichern. Eine Beispieldatei zum Erlangen von Adminrechten siehe oben unter Punkt 2 bei Varante 1.
  3. Mittels mt.exe wird nun die Manifestdatei in die ausführbare Datei als Win32-Resource eingebunden. Die prinzipielle Kommandozeile dazu lautet:
    mt.exe –manifest temp.manifest –outputresource:YourApp.exe;#1
    

    Dazu unter Projektbaum->Projekt->Eigenschaften->Buildereignisse->Befehlszeile für Postbuild-Ereignis folgende Zeile eintragen:

    "$(DevEnvDir)..\..\SDK\v2.0\bin\mt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest"  –outputresource:"$(TargetDir)$(TargetFileName)";#1
    

    bei anderen VS-Versionen alternativ auch:

    "c:\Programme\Microsoft SDKs\Windows\v7.0A\bin\mt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest"  –outputresource:"$(TargetDir)$(TargetFileName)";#1
    
  4. Die im Ausgabeverzeichnis fertig kompilierte Anwendung sollte nun ein Security-Schild im Icon haben.
  5. Nach dem Start der Anwendung frag Windows-UAC nun, ob das Programm mit Adminrechten ausgeführt werden darf.

Proxy für WebBrowser setzen

/// <summary->
/// set and enable proxy and port for IE
/// </summary->
public void SetProxy(string proxy, int port)
{
    RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(&quot;Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings&quot;, true);

    // if proxy is not set, disable proxy
    if (string.IsNullOrEmpty(proxy))
    {
        RegKey.SetValue(&quot;ProxyServer&quot;, &quot;&quot;);
        RegKey.SetValue(&quot;ProxyEnable&quot;, 0);
    }
    else
    {
        // otherwise set proxy
        RegKey.SetValue(&quot;ProxyServer&quot;, proxy + &quot;:&quot; + port.ToString());
        RegKey.SetValue(&quot;ProxyEnable&quot;, 1);
    }
}

Weiterführende Links:

Flash and Proxy Support on .NET WebBrowser Controls
MS AIOCF: WebBrowser with proxy