public bool Parse() { try { //Fix for mysql. if (this._dbo.GetDatabaseConnector().getDBType() == DATABASETYPES.MYSQL) { this._dbo.GetDatabaseConnector().executeNonQuery("SET AUTOCOMMIT = 0"); this._dbo.GetDatabaseConnector().executeNonQuery("BEGIN"); } odt = this._dbo.GetDatabaseConnector().GetRawConnectionObject().BeginTransaction(); this.oc = new OdbcCommand(); oc.Connection = odt.Connection; oc.Transaction = odt; foreach (string sql in this._transList) { //string tmpsql = this._dbo.CompileSQLToNative(sql); string tmpsql = sql; if ((tmpsql != "") && tmpsql.Length > 2) { if (this._dbo.GetDatabaseConnector().Open() != ERRORCODES.NONE) { throw (new Exception("Database connection lost.")); } oc.CommandText = this._dbo.GetDatabaseConnector().DoTopLevelSqlTranslations(ref tmpsql); oc.ExecuteNonQuery(); } } odt.Commit(); if (this._dbo.GetDatabaseConnector().getDBType() == DATABASETYPES.MYSQL) this._dbo.GetDatabaseConnector().executeNonQuery("COMMIT"); return true; } catch(Exception e) { if(e.Message.IndexOf("parallel transactions") > 0) { // Start new connection and try again. this._dbo = this._dbo.getNewConnection(); this.Parse(); } if(this.dbParent.GetDatabaseConnector().GetRawConnectionObject().State == ConnectionState.Closed) this.dbParent.RaiseDBCloseClause(); try { odt.Rollback(); if (this._dbo.GetDatabaseConnector().getDBType() == DATABASETYPES.MYSQL) this._dbo.GetDatabaseConnector().executeNonQuery("ROLLBACK"); } catch { /**/ } this._errorState = 1; this._errorString = e.Message; return false; } }
public DataTable ExecuteTable(string tableName, string query, OdbcTransaction transaction) { try { OdbcCommand dbCommand = transaction.Connection.CreateCommand(); dbCommand.Transaction = transaction; dbCommand.CommandText = query; OdbcDataAdapter dbDataAdapter = new OdbcDataAdapter(dbCommand); DataTable dataTable = new DataTable(tableName); dbDataAdapter.MissingSchemaAction = MissingSchemaAction.Add; dbDataAdapter.FillSchema(dataTable, SchemaType.Source); dbDataAdapter.Fill(dataTable); return dataTable; } catch (Exception) { transaction.Rollback(); var trace = new System.Diagnostics.StackTrace(true); var frame = trace.GetFrame(0); var method = frame.GetMethod(); return null; } }