Kategorien

Suchen


Aktuelle Artikel

Archiv

C# .Net

C#: “System.Data.XmlReadMode” enthält keine Definition für “WriteSchema” (CS0117)

Sonntag, 21.02.2010

Wenn Sie beim Programmieren in C# (CSharp) eine der beiden folgenden Fehlermeldungen erhalten, passen Befehl und Option nicht zueinander.

“System.Data.XmlReadMode” enthält keine Definition für “WriteSchema”. (CS0117) – C:\test\xml_error.cs:186,37

“System.Data.XmlWriteMode” enthält keine Definition für “ReadSchema”. (CS0117) – C:\test\xml_error.cs:186,37

Korrigieren Sie Ihren Befehl entsprechend, denn nur beim XmlReadMode können Sie die Option “ReadSchema” verwenden und nur bei XmlWriteMode die Option “WriteSchema”. In Ihrem Fall werden Sie Befehl und Option miteinander gemixt haben:

Falsch

1
2
DataSet ds = new DataSet();
ds.ReadXml("test.xml", XmlReadMode.WriteSchema);

oder

1
2
DataSet ds = new DataSet();
ds.WriteXml("test.xml", XmlWriteMode.ReadSchema);

Richtig

1
2
DataSet ds = new DataSet();
ds.ReadXml("test.xml", XmlReadMode.ReadSchema);

oder entsprechend

1
2
DataSet ds = new DataSet();
ds.WriteXml("test.xml", XmlWriteMode.WriteSchema);

C#: SQLite Datenbank einbinden und nutzen (auch für SharpDevelop)

Freitag, 19.02.2010

SQLite ist eine dateibasierte Datenbank, welche Sie mit SQL Befehlen (wie mySQL, MS SQL, usw.) verwalten können.

Installation

Vorbereitungen für Ihr C# Projekt

Sie können die nun installierten ADO.NET SQLite Komponenten nutzen. zur Vereinfachung sollten Sie die benötigten Libraries (DLLs) in Ihren Projektordner kopieren:

In SharpDevelop die DLL als Referenz hinzufügen

SQLite Unterstützung im Projekt einbinden

1
using System.Data.SQLite;

Datenbank in C# zur Laufzeit (Runtime) erstellen

Beispiel:

1
2
3
SQLiteConnection connection = new SQLiteConnection("Data Source=test.dat");
connection.Open();
connection.Close();

Nachdem Sie den Source des Beispiels ausgeführt haben, finden Sie eine (noch leere) Datenbank “test.dat” im Verzeichnis der ausgeführten .EXE Datei.
In unserem Beispiel liegt diese SQLite Datenbank also unter “C:\tmp\HalloWelt\bin\Debug”.

Datenbank-Tabellen in C# zur Laufzeit erstellen

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
SQLiteConnection connection = new SQLiteConnection("Data Source=test.dat");
connection.Open();
 
SQLiteCommand command = new SQLiteCommand(connection);
command.CommandText = String.Format("create table {0} (" +
    "  ID integer not null primary key autoincrement," +
    "  Name varchar(100) not null," +
    "  City varchar(100))",
    "Adressen");
command.ExecuteNonQuery();
 
connection.Close();

Im Beispiel wird eine einzelne Tabelle mit dem Namen “Adressen” und den Feldern “ID, Name, City” erstellt. Das Feld “ID” ist dabei der PK (Primary Key) und wird automatisch bei jedem Datensatz hochgezählt (Increment +1).

Daten in eine Tabelle in C# zur Laufzeit einfügen

Dieses Beispiel steht stellvertretend für jeden weiteren verfügbaren SQL Befehl. Eine Übersicht der anwendbaren SQL Befehle finden Sie in der SQLite Hilfe oder auf der SQLite Webseite:
http://www.sqlite.org/

Wie Sie Daten aus Tabellen abrufen können (SELECT Statements) finden Sie im nächsten Beispiel.

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQLiteConnection connection = new SQLiteConnection("Data Source=test.dat");
connection.Open();
 
SQLiteCommand command = new SQLiteCommand(connection);
command.CommandText = String.Format("insert into Adressen (Name,City) values ('{0}','{1}')",
    "Max Muster",
    "Hamburg");
command.ExecuteNonQuery();
 
command.CommandText = String.Format("insert into Adressen (Name,City) values ('{0}','{1}')",
    "Bertha Besser",
    "Berlin");
command.ExecuteNonQuery();
 
connection.Close();

Im Beispiel werden zwei Datensätze in die oben erstellte Tabelle “Adressen” eingefügt:

  1. Max Muster, Hamburg
  2. Bertha Besser, Berlin

Daten aus einer Tabelle in C# zur Laufzeit abfragen

Dieses Beispiel steht stellvertretend für alle weiteren SQL Befehle, mit denen Sie Daten aus Ihrer Datenbank auslesen.

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQLiteConnection connection = new SQLiteConnection("Data Source=test.dat");
connection.Open();
 
SQLiteCommand cmd = new SQLiteCommand("select * from Adressen", connection);
SQLiteDataReader reader = cmd.ExecuteReader();
 
if (reader.HasRows)
while (reader.Read())
{
  string name = reader.GetString(reader.GetOrdinal("Name"));
  string city = reader.GetString(reader.GetOrdinal("City"));
  MessageBox.Show(string.Format("{0}, {1}", name, city));
}
 
connection.Close();

Im Beispiel werden alle Datensätze aus der oben erstellten Tabelle “Adressen” eingelesen.
Jeder Datensatz wird dem Benutzer dann als MessageBox angezeigt.

SQLite Datenbank löschen

Ihre Datenbank können Sie (auch aus C# heraus) sehr einfach löschen, indem Sie die Datei “test.dat” (in unserem Beispiel) von der Festplatte löschen.

Voraussetzung ist, dass Sie keine offenen Verbindungen zur Datenbank haben. Ansonsten erhalten Sie einen Zugriffsfehler (“Access denied”).

Achtung:
Wenn Sie die Datendatei Ihrer SQLite Datenbank löschen, verlieren Sie sofort alle gespeicherten Daten !

mySQL: Alten MD5 Hash in C# berechnen (16 stellig)

Donnerstag, 25.06.2009

Die mySQL Versionen vor V4.1 nutzen einen veralteten MD5 Hash-Algorithmus. Dieser lieferte nur einen max. 16 stelligen Hashwert und ist weiterhin unsicher und teilweise decodierbar. Zwar gilt für MD5 aufgrund seines Algorithmusses grundsätzlich, dass diese Hashwerte nicht “decodiert” werden können – für den alten MD5/16 Code gilt dies’ jedoch nicht eingeschränkt.

Aufgrund des häufigen Anfragen für eine einfache Berechnung dieses MD5/16 Hash haben wir Ihnen den C# Sourcecode zur Verfügung gestellt. Diese liefert Ihnen für ein Passwort (= Parameter) den MD5/16 Hash:

namespace ConsoleApplication
{
    class Program
    {
        static string mysql_old_password(string sPassword)
        {
            UInt32[] result = new UInt32[2];
            bool bDebug = false;
            UInt32 nr = (UInt32)1345345333, add = (UInt32)7, nr2 = (UInt32)0x12345671;
            UInt32 tmp;

            char [] password = sPassword.ToCharArray();
            int i;

            for (i = 0; i < sPassword.Length; i++)
            {
                if (password[i] == ' ' || password[i] == '\t')
                    continue;

                tmp = (UInt32)password[i];
                nr ^= (((nr & 63) + add) * tmp) + (nr << 8);
                nr2 += (nr2 << 8 ) ^ nr;
                add += tmp;
            }

            result[0] = nr & (((UInt32)1 << 31) - (UInt32)1);
            UInt32 val = (((UInt32)1 << 31) - (UInt32)1);
            result[1] = nr2 & val;
            string hash = String.Format("{0:X}{1:X}", result[0], result[1]);
            return hash.ToLower();
        }

        static void Main(string[] args)
        {
            string hash = mysql_old_password("Hier Ihr Passwort");
            Console.WriteLine(hash);
       }
    }
}

Das häufige Problem sind alte mySQL Datenbanken, die Identifikationen enthalten und heute nicht mehr einfach ohne mySQL geprüft werden können.

Den alten MD5/16 Hash erhalten Sie auch weiterhin innerhalb von mySQL durch den Befehl "OLD_PASSWORD()". Dieser Quellcode soll Ihnen nur dann helfen, wenn Sie alte Daten (z.Bsp. aus Sicherungen) prüfen müssen.

C#: ByteArray in String umwandeln und umgekehrt

Freitag, 10.04.2009

Um aus einem String ein ByteArray zu erzeugen, nutzen Sie folgenden Befehl:

byte[] sByteArray = System.Text.Encoding.GetEncoding(1252).GetBytes("Text als String");

Mit dem folgenden Befehl wandeln Sie ein ByteArray wieder in einen String um:

string sData = System.Text.Encoding.ASCII.GetString(sByteArray);

C#: Webseite im Standardbrowser öffnen (CSharp)

Dienstag, 30.12.2008

Um eine Webseite im Standardbrowser des Benutzers öffnen zu lassen, reicht dieser Befehl:

1
Process.Start("http://www.YourHelpCenter.de");

Um den Befehl nutzen zu können, binden Sie den Diagnostics Namespace ein:

1
using System.Diagnostics;

C#: Defaultwert als Parameter simulieren (CSharp)

Montag, 29.12.2008

Da es bei C# (zumindest derzeit) keine Defaultwerte für Parameter gibt, muss man ein wenig improvisieren um den gewünschten Nutzen zu haben:

// Die Funktion für den simulierten Defaultparameter
// Wird die Funktion "test" ohne zweiten Parameter aufgerufen,
// greift diese Funktion und übergibt den Wert 1 als Default
private string test(long first) {
   return test(size, 1);
}

// Die Hauptfunktion mit der Beispielberechnung
// Kann auch direkt mit einem anderen Wert aufgerufen werden: test(12,8);
private string test(long first, int second) {
   return first + second;
}

ProcessMessages in C# (CSharp)

Montag, 29.12.2008

Aus anderen Programmiersprachen kennen Sie den Befehl “Application.ProcessMessages” um andere, wartenden Task / Operationen während komplexeren Berechnungen ausführen zu lassen.

In C# steht Ihnen der folgende Befehl dafür zur Verfügung:
Application.DoEvents();