Quantcast
Channel: Henriks bits n pieces » Library
Viewing all articles
Browse latest Browse all 3

MySQL transaction class using MySQL Connector (.NET and C#)

$
0
0

I strongly recommend that you check out my new and improved library here: http://code.google.com/p/mysql-helper-library
as it contains many fixes and functions not found in the code below.

namespace MySQL
{
    public class Transcation : IDisposable
    {
        private string connectionString = null;
        private MySqlConnection mysqlConnection = null;
        private MySqlCommand mysqlCommand = null;
        private MySqlTransaction mysqlTransaction = null;

        public Transcation(string server, string username, string password, uint port = 3306, bool isTransaction = true, uint connectionTimeout = 5000, uint defaultCommandTimeout = 5000)
        {
            connectionString = "Data Source=" + server + ";" + "Port=" + port + ";User ID=" + username + ";Password=" + password + ";Allow User Variables=True;Connect Timeout=" + connectionTimeout.ToString() + ";";
            connectionString += ";Default Command Timeout=" + defaultCommandTimeout.ToString() + ";Allow Zero Datetime=True";
            mysqlConnection = new MySqlConnection(connectionString);
            mysqlConnection.Open();
            if (isTransaction) mysqlTransaction = mysqlConnection.BeginTransaction();
            mysqlCommand = mysqlConnection.CreateCommand();
            mysqlCommand.Connection = mysqlConnection;
        }

        // Dispose
        public void Dispose()
        {
            if (mysqlTransaction != null) mysqlTransaction.Dispose();
            if (mysqlCommand != null) mysqlCommand.Dispose();
            if (mysqlConnection != null)
            {
                mysqlConnection.Close();
                mysqlConnection.Dispose();
            }
        }

        // Commit transaction
        public void Commit()
        {
            mysqlTransaction.Commit();
        }

        // Rollback transaction
        public void Rollback()
        {
            mysqlTransaction.Rollback();
        }

        // Add data to table
        public long AddRow(string database, string table, string[] columns, object[] values, string binary_column = null, byte[] binary_data = null, string updateWhere = null)
        {
            string valuetags = "";

            if (columns.Length != values.Length) throw new Exception("Columns and value count does not match");

            if (binary_column != null) valuetags += "@bin,";

            for (int i = 0; i < columns.Length; i++)
            {
                if (i != 0) valuetags += ",";
                valuetags += "@p" + i.ToString();
            }

            if (updateWhere == null)
            {
                mysqlCommand.CommandText = "insert into `" + database + "`.`" + table + "` " + (binary_column != null ? "(`" + binary_column + "`,`" : "(`") + string.Join("`,`", columns) + "`) values (" + valuetags + ")";

                if (binary_data != null)
                    mysqlCommand.Parameters.AddWithValue("@bin", binary_data);

                for (int i = 0; i < columns.Length; i++)
                    mysqlCommand.Parameters.AddWithValue("@p" + i.ToString(), values[i]);
            }
            else
            {
                mysqlCommand.CommandText = string.Empty;

                for (int i = 0; i < columns.Length; i++)
                {
                    mysqlCommand.CommandText += "update `" + database + "`.`" + table + "` SET `" + columns[i] + "`=@p" + i.ToString() + "x" + " WHERE " + updateWhere + " LIMIT 1;";
                    mysqlCommand.Parameters.AddWithValue("@p" + i.ToString() + "x", values[i]);
                }
            }

            mysqlCommand.ExecuteNonQuery();

            mysqlCommand.Parameters.Clear();

            return mysqlCommand.LastInsertedId;
        }

        // Add data using Column & Data class
        public long AddRow(string database, string table, List listColData, string updateWhere = null)
        {
            return AddRow(database, table, listColData.Select(n => n.columnName).ToArray(), listColData.Select(n => n.dataValue).ToArray(), updateWhere: updateWhere);

        }

        // Sends a query to the database
        public void SendQuery(string query)
        {
            mysqlCommand.CommandText = query;
            mysqlCommand.ExecuteNonQuery();
        }

        // Returns object
        public object GetObject(string query)
        {
            mysqlCommand.CommandText = query;
            return mysqlCommand.ExecuteScalar();
        }

        // Returns signed integer
        public int GetInt(string query)
        {
            return int.Parse(GetObject(query).ToString());
        }

        // Returns unsigned integer
        public uint GetUint(string query)
        {
            return uint.Parse(GetObject(query).ToString());
        }

        // Returns string
        public string GetString(string query)
        {
            return GetObject(query).ToString();
        }

        // Returns datatable
        public DataTable GetTable(string query)
        {
            using (DataSet ds = new DataSet())
            {
                using (MySqlDataAdapter _adapter = new MySqlDataAdapter(query, mysqlConnection))
                    _adapter.Fill(ds, "map");

                return ds.Tables[0];
            }
        }

        public void BulkSend(string database, string table, string column, List


Viewing all articles
Browse latest Browse all 3

Trending Articles