C# .Net
C#: “System.Data.XmlReadMode” enthält keine Definition für “WriteSchema” (CS0117)
Sonntag, 21.02.2010Wenn 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.2010SQLite ist eine dateibasierte Datenbank, welche Sie mit SQL Befehlen (wie mySQL, MS SQL, usw.) verwalten können.
Installation
- Laden Sie sich die benötigte Komponente herunter:
ADO.NET 2.0 Provider for SQLite - Starten Sie das heruntergeladene Setup und folgen Sie den Installationsanweisungen
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:
- Öffnen Sie den Ordner “C:\Programme\SQLite.NET\bin”
- Markieren Sie die benötigte .DLL Datei zum Kopieren.
Welche Datei Sie in Ihrem Fall brauchen, hängt von Ihrem eingesetzten System ab (I386, AMD64, …).
Für eine Standardumgebung (Windows 32-Bit System) nutze ich die “System.Data.SQLite.dll”. - Öffnen Sie den Ordner “bin\Debug” Ordner in Ihrem Projektverzeichnis.
In diesem Beispiel nutze ich den Projektnamen “HalloWelt”.
Im Beispiel ist der Projektordner “C:\tmp\HalloWelt\bin\Debug” - Fügen Sie die ausgewählten Dateien ein
In SharpDevelop die DLL als Referenz hinzufügen
- Zur Projektansicht wechseln (Strg + Alt + L)
- In Ihrem Projekt den Untereintrag “Referenzen” mit der rechten Maustaste anklicken
- “Referenz hinzufügen” auswählen und anklicken
- Den Reiter “.NET Assemblybrowser” auswählen
- Auf den Button “Suchen” klicken
- Ihren Projektordner öffnen und die gerade hineinkopierte DLL auswählen
- “OK” anklicken
Das Fenster schließt sich und die DLL ist im Bereich “Gewählte Referenzen” zu finden - “OK” anklicken
Die DLL ist in Ihrer Projektliste aufgeführt
SQLite Unterstützung im Projekt einbinden
- Fügen Sie die folgende Zeile am Anfang Ihrer .CS Datei ein:
1 | using System.Data.SQLite; |
Datenbank in C# zur Laufzeit (Runtime) erstellen
- Eine neue “SQLiteConnection” erstellen
- Parameter angeben:
“Data Source” ist die einzige Pflichtangabe. Alle weiteren Parameter sind optional.
Welche weiteren Parameter ihnen zur Verfügung stehen, finden Sie in der auf Ihrem System installierten .CHM Hilfedatei unter “C:\Programme\SQLite.NET\Doc”.
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
- Eine neue “SQLiteConnection” erstellen (s.o.)
- Den “Create Table” Befehl als SQLiteCommand einbinden
- Diesen SQL Befehl an die Datenbank übergeben
- Verbindung zur SQLite Datenbank wieder schließen
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.
- Eine neue “SQLiteConnection” erstellen (s.o.)
- Den Befehl als SQLiteCommand einbinden
- Diesen SQL Befehl an die Datenbank übergeben
- Verbindung zur SQLite Datenbank wieder schließen
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:
- Max Muster, Hamburg
- 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.
- Eine neue “SQLiteConnection” erstellen (s.o.)
- Den Befehl als SQLiteCommand einbinden
- Diesen SQL Befehl an die Datenbank übergeben
- Die erhaltenen Daten ggf. weiterverarbeiten
- Verbindung zur SQLite Datenbank wieder schließen
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.2009Die 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.2009Um 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.2008Um 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.2008Da 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.2008Aus 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();