Probleme mit Plesk Admin und MySQL
Es gibt Tage da zickt Plesk herum und man könnte verzweifeln weil plötzlich die Adminoberfläche, die gestern noch funktionierte, nun nicht mehr laden will und Plesk sich mit der Fehlermeldung verabschiedet:
Error: Test connection to the database server has failed because of network problems:
Failed to connect to database: Access denied for user 'admin'@'localhost' (using password: YES)
Lösung:
Zum Glück lässt sich das Problem ganz einfach aus der Welt schaffen, dazu muss man das Admin Passwort für MySQL neu setzen.
- Loggt euch auf dem Server über RemoteDesktop (oder SSH) ein
- Öffnet die my.ini aus eurem Plesk Verzeichnis ( %plesk_dir%databases\mysql\data )
- fügt den Parameter "add the parameter skip-grant-tables=1" hinzu und speichert.
- Startet den MySQL Service neu
- Verbindet euch zu der MySQL Datenbank ( "%plesk_dir%\mysql\bin\mysql.exe" mysql )
- Führt folgenden Befehl aus:
- mysql> update user set password=password('euer_passwort') where user='admin'; Wobei ihr hier euer Admin-Passwort eintragen solltet dass Plesk nutzt um sich anzumelden
- Entfernt den Parameter aus der my.ini den ihr im Schritt 3. hinzugefügt habt
- Startet dem MySQL Dienst erneu neu
Das Problem sollte sich nun erledigt haben.
Microsoft SQL CE: Blobs Speichern und auslesen
In diesem kleinem Tutorial möchte ich euch zeigen, wie man BLOBs (Binary Large Objects) in die Compact Edition vom Microsofts SQL Server speichern und wieder laden kann. Dies soll eine Art Weiterführung von dem letzten Einstiegspost sein. Ich kann euch aber nicht versprechen, dass noch weitere Beiträge zu dem Thema kommen werden.
Auch wen Relationale Datenbanken überwiegend dazu benutzt werden um Text-Basierte Informationen zu speichern, wie Benutzernamen, IP Adressen oder andere Texte, kommt es doch häufiger vor, dass man auch Dateien wie Bilder in eine Datenbank legen möchte. Dies ist zB. nützlich wenn man eine Benutzerdatenbank hat und zu jedem Benutzer ein Bild hinterlegen will.
Das Vorgehen an Sich ist dabei sehr ähnlich, ihr erstellt ein SqlCeCommand und fügt dem wie gewohnt einige Parameter hinzu:
using (SqlCeConnection con = new SqlCeConnection(conString)) {
con.Open();
using (SqlCeCommand com = new SqlCeCommand
("INSERT INTO cp_image (date, image) VALUES (@Date, @Filename)", con)) {
com.Parameters.AddWithValue("@Date", DateTime.Now.ToString());
com.Parameters.AddWithValue("@Filename",
System.IO.File.ReadAllBytes(filename)).SqlDbType = SqlDbType.Image;
com.ExecuteNonQuery();
}
}
Absolut nichts neues wie ihr sehen könnt, wir geben die Datei, die wir anhängen wollen einfach als byte-Array als Parameter mit.
Sehr wichtig ist hierbei folgende Stelle in Zeile 8:
.SqlDbType = SqlDbType.Image;
Wenn ihr diese Information nicht mit angebt, werdet ihr Probleme bekommen, sobald ihr eine Datei in die Datenbank schreiben wollt die größer ist als 8 KB!!! Denn wenn man einen Parameter angibt ohne dessen Typ mit anzugeben versucht SQLCE den Typ selbst zu bestimmen und wählt dazu dann den Typ varbinary, dessen Größe auf 8000 Byte beschränkt ist!
Mit dem Ausführen des SqlCeCommands sollte die Datei bzw. das Bild in diesem Fall dann in eure Datenbank Datei wandern.
Das Auslesen der Datei aus der Datenbank gestaltet sich ebenfalls nicht kompliziert. Hier meine Funktion um ein Bild aus der Datenbank zu lesen:
public Image getImageFromDB(int id) {
Image img;
byte[] imgData = null;
using (SqlCeConnection con = new SqlCeConnection(conString)) {
con.Open();
using (SqlCeCommand com = new SqlCeCommand
("SELECT image FROM cp_image WHERE id = '" + id.ToString() + "'", con)) {
using (SqlCeDataReader dr = com.ExecuteReader()) {
while (dr.Read()) {
imgData = (byte[])dr["image"];
}
}
}
}
if (imgData != null) {
//Es wurde ein Bild geladen
MemoryStream ms = new MemoryStream(imgData);
img = Image.FromStream(ms);
return img;
}
return null;
}
Dazu benutze ich einfach nur einen gewöhnlichen DataAdapter, mit dem ich aus der Spalte namens "image" die Bildinformationen auslese, diese müssen noch in ein byte-Array gecastet werden, da diese als Object geliefert werden.
Zum Schluss wird noch das Byte-Array in ein System.Drawing.Image verwandelt und zurückgegeben. Dies kann man dann zB. direkt in eine PictureBox laden.
Hier ist die Tabelle, die ich in diesem Beispiel benutzt habe:
Wie ihr eine Verbindung zur Datenbank herstellt und normale Select- und Insert-Befehle benutzt könnt ihr im Ersten Teil nachlesen.
