Hallo zusammen,
ich habe mit einer MySQL-Datenbank folgendes Problem: Ich kann mich verbinden und Daten auslesen, aber jedes Mal wenn ich etwas hinzufügen will bekomme ich zu hören:
MySql.Data.MySqlClient.MySqlException: Fatal error encountered during command execution.
---> MySql.Data.MySqlClient.MySqlException: Fatal error encountered attempting to read the resultset.
---> MySql.Data.MySqlClient.MySqlException: Reading from the stream has failed.
---> System.IO.EndOfStreamException: Es wurde versucht, über das Ende des Streams hinaus zu lesen.
bei MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)
bei MySql.Data.MySqlClient.MySqlStream.LoadPacket()
--- Ende der internen Ausnahmestapelüberwachung ---
bei MySql.Data.MySqlClient.MySqlStream.LoadPacket()
bei MySql.Data.MySqlClient.MySqlStream.ReadPacket()
bei MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)
bei MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)
bei MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId)
bei MySql.Data.MySqlClient.MySqlDataReader.NextResult()
--- Ende der internen Ausnahmestapelüberwachung ---
bei MySql.Data.MySqlClient.MySqlDataReader.NextResult()
bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
--- Ende der internen Ausnahmestapelüberwachung ---
bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
bei MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
Es handelt sich um eine sehr simple Film-Datenbank um mal ein wenig mit MySQL "rumzuspielen".
Dieser Code erzeugt den Fehler:
string command = String.Format("INSERT INTO {0} (Title, Director, Genre, Year) " +
"VALUES (?Title, ?Director, ?Genre, ?Year)", "tbl_Movies");
using (MySqlCommand cmd = new MySqlCommand(command, _connection))
{
cmd.Prepare();
cmd.Parameters.AddWithValue("?Title", movie.Title);
cmd.Parameters.AddWithValue("?Director", movie.Director);
cmd.Parameters.AddWithValue("?Genre", movie.Genre);
cmd.Parameters.AddWithValue("?Year", movie.Year);
cmd.ExecuteNonQuery();
}
Ich hab schon überprüft ob die DB vielleicht voll ist (bzw. maximal erlaubte Größe erreicht hat), aber da ist noch reichlich Platz frei.
Ich benutzte den Connector/Net 6.2.2. Kann mit jemand sagen woran das liegt?
Gruß,
Michel
Maskiere bitte mal die Tabellen und Spaltennamen.
Sorry für die späte Antwort... musste spontan beruflich verreisen. 🙄
Was genau meinst Du mit maskieren? Bin noch ein totaler Neuling was Datenbanken angeht...
ich würde den commandtext anders zuweisen und das prepare nach der parameterzuweisung aufrufen also so:
string command = @"INSERT INTO tbl_Movies (Title, Director, Genre, Year)
VALUES (?Title, ?Director, ?Genre, ?Year)";
MySqlCommand cmd = new MySqlCommand(command, _connection);
cmd.Parameters.AddWithValue("Title", movie.Title);
cmd.Parameters.AddWithValue("Director", movie.Director);
cmd.Parameters.AddWithValue("Genre", movie.Genre);
cmd.Parameters.AddWithValue("Year", movie.Year);
cmd.Prepare();
cmd.ExecuteNonQuery();
ach ja die fragezeichen sind bei der parameterzuweisung glaub ich auch nicht nötig
"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."
@Der_Michel :
Dann solltest Du das mit den Grundlagen schnellstens nachholen.
[Hinweis] Wie poste ich richtig? punkt 1.1.1
Und was für C# gilt, gilt dann auch für SQL .