MySql - Transaktion ( InnoDB ) scheint nicht immer zu funktionieren...

xMen

Mitglied
Hallo MySql-User,

ich arbeite mit MySQL 4.0.18, verwende InnoDB-Tabellen, entwickle mit Visual C# und nutze den ByteFX-DataProvider .NET für den Zugriff auf MySQL.

Meine bisherigen Transaktionen habe ich immer über den Code mit Transact-SQL selbst "gebaut", was 100% funktioniert. Allerdings habe ich bisher ausschließlich "UPDATE"- bzw. "INSERT"-Commands im Rahmen der Transaktion genutzt. Nun will ich mehrere "ALTER TABLE"-Commands im Rahmen einer Transktion ausführen und siehe da, die Transaktion funktioniert nicht mehr wie gewohnt. Das heißt, dass Änderungen an der Tabelle auch ausgeführt bleiben, wenn ein Fehler innerhalb der Transaktion aufgetreten ist.

Sind Kommandos wie "ALTER TABLE" bei InnoDB-Tabellen im Rahmen von Transktionen ausgeschlossen? Wer hat Erfahrung damit?

Hier der Code zur Transaktion:



Code:
private bool ChangeTable(ListBox _l, int myValue)
{
	MySqlCommand myCmd = new MySqlCommand();
	try
	{
		myCmd.Connection = DBBau._MySQLConnect;
		myCmd.Connection.Open();
		myCmd.CommandText = "USE " + Public.DatabaseName;
		myCmd.ExecuteNonQuery();
		myCmd.CommandText = "SET AUTOCOMMIT=0";
		myCmd.ExecuteNonQuery();
		myCmd.CommandText = "START TRANSACTION";
		myCmd.ExecuteNonQuery();

		/// Für jede Zeile der Update-Information - Updateroutine aktivieren
		for ( int i = myValue; i < _l.Items.Count; i++ )
		{
			string mySelect = this.BuiltTableCommand(_l.Items[i].ToString());
			myCmd.CommandText = mySelect;
			myCmd.ExecuteNonQuery();
			this.pBar.PerformStep();
		}
				
		myCmd.CommandText = "COMMIT";
		myCmd.ExecuteNonQuery();
		return true;
	}
	catch 
	{
		myCmd.CommandText = "ROLLBACK";
		myCmd.ExecuteNonQuery();
		return false;
	}	
	finally
	{
		myCmd.Connection.Close();
	}
}
 
Zurück