/// <summary> /// Executes a single command against a MySQL database, possibly inside an existing transaction. /// </summary> /// <param name="connection"><see cref="MySqlConnection"/> object to use for the command</param> /// <param name="transaction"><see cref="MySqlTransaction"/> object to use for the command</param> /// <param name="commandText">Command text to use</param> /// <param name="commandParameters">Array of <see cref="MySqlParameter"/> objects to use with the command</param> /// <param name="ExternalConn">True if the connection should be preserved, false if not</param> /// <returns><see cref="MySqlDataReader"/> object ready to read the results of the command</returns> private static MySqlDataReader ExecuteReader(MySqlConnection connection, MySqlTransaction transaction, string commandText, MySqlParameter[] commandParameters, bool ExternalConn ) { //create a command and prepare it for execution MySqlCommand cmd = new MySqlCommand(); cmd.Connection = connection; cmd.Transaction = transaction; cmd.CommandText = commandText; cmd.CommandType = CommandType.Text; if (commandParameters != null) foreach (MySqlParameter p in commandParameters) cmd.Parameters.Add( p ); //create a reader MySqlDataReader dr; // call ExecuteReader with the appropriate CommandBehavior if (ExternalConn) { dr = cmd.ExecuteReader(); } else { dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); } // detach the SqlParameters from the command object, so they can be used again. cmd.Parameters.Clear(); return dr; }
/// <summary> /// /// </summary> /// <param name="level"></param> /// <returns></returns> public MySqlTransaction BeginTransaction(IsolationLevel level) { if (state != ConnectionState.Open) throw new MySqlException("Invalid operation: The connection is closed"); MySqlTransaction t = new MySqlTransaction(); t.Connection = this; t.IsolationLevel = level; string cmd = "SET SESSION TRANSACTION ISOLATION LEVEL "; switch (level) { case IsolationLevel.ReadCommitted: cmd += "READ COMMITTED"; break; case IsolationLevel.ReadUncommitted: cmd += "READ UNCOMMITTED"; break; case IsolationLevel.RepeatableRead: cmd += "REPEATABLE READ"; break; case IsolationLevel.Serializable: cmd += "SERIALIZABLE"; break; case IsolationLevel.Chaos: throw new NotSupportedException("Chaos isolation level is not supported"); } InternalConnection.Driver.Send( DBCmd.QUERY, cmd ); InternalConnection.Driver.Send( DBCmd.QUERY, "BEGIN"); return t; }
/// <summary> /// Overloaded. Initializes a new instance of the MySqlCommand class. /// </summary> public MySqlCommand(string cmdText, MySqlConnection connection, MySqlTransaction txn) { this.cmdText = cmdText; this.connection = connection; curTransaction = txn; }
/// <summary> /// Begins a database transaction. /// </summary> /// <returns></returns> public MySqlTransaction BeginTransaction() { if (state != ConnectionState.Open) throw new MySqlException("Invalid operation: The connection is closed"); MySqlTransaction t = new MySqlTransaction(); t.Connection = this; InternalConnection.Driver.Send( DBCmd.QUERY, "BEGIN"); return t; }