Beispiel #1
0
        internal MySQLTransaction(MySQLConnection connection, IsolationLevel isolationLevel)
        {
            Connection = connection;
            var sql = "";

            switch (isolationLevel)
            {
            case IsolationLevel.ReadCommitted:
                sql = "SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED";

                break;

            case IsolationLevel.ReadUncommitted:
                sql = "SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED";

                break;

            case IsolationLevel.RepeatableRead:
                sql = "SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ";

                break;

            case IsolationLevel.Serializable:
                sql = "SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE";

                break;

            case IsolationLevel.Chaos:
                throw new MySqlException("MySQLDriverCS Error: Chaos isolation level is not implemented in MySQL.");
            }

            IsolationLevel = isolationLevel;
            using (var cmd = new MySQLCommand(sql, connection))
            {
                cmd.ExecuteNonQuery();
            }
            using (var cmd = new MySQLCommand("BEGIN", connection))
            {
                cmd.ExecuteNonQuery();
            }
        }
        /// <summary>
        ///  A shortcut to make a simple update command with where part. (where would be null)
        /// </summary>
        /// <param name="conn">Database connection</param>
        /// <param name="FieldsAndValues">Pairs of Fields and values as an object array. Examples:
        /// <code>
        /// new object[,]{{"SettingID",SettingID},{"SettingValue",Value}}
        ///
        /// new object[,]{{"SettingID","times"},{"SettingValue",100}}
        ///
        /// null
        /// </code>
        /// </param>
        /// <param name="Table">Table name</param>
        /// <param name="WhereParamFields">Tripplets of parameters, operand and its values to match (null - nothing). For example:
        /// <code>
        /// new object[,]{{"myfield","=",myvalue},{"myfield2","&lt;&gt;",myvalue2}}
        ///
        /// new object[,]{{"myfield","=",100}}
        ///
        /// new object[,]{{"myfield","=",myvalue}}
        ///
        /// null
        /// </code>
        /// </param>
        /// <param name="WhereNoparamFields">Tripplets of parameters, operand and expressions (or other fields for joining) to match (null - nothing). For example:
        /// <code>
        /// new object[,]{{"myfield","=","myfield2"}}
        ///
        /// null
        /// </code>
        /// </param>
        /// <example>Example updating SettingValue by SettingID in Settings table<code>
        /// using MySQLDriverCS;
        /// ...
        /// MySQLConnection DBConn;
        /// DBConn = new MySQLConnection( new MySQLConnectionString("myhost","mydatabase","mylogin","mypassword").AsString );
        /// DBConn.Open();
        /// ...
        /// new MySQLUpdateCommand(DBConn,
        ///		new object[,] {{"SettingValue",Value}},
        ///		"Settings",
        ///		new object[,] {{"SettingID","=",SettingID}},
        ///		null
        /// );
        /// ...
        /// DBConn.Close();
        /// </code></example>
        /// Modified by Claudia Murialdo (07/24/04) in order to support time
        /// component of the datetime values.
        public MySQLUpdateCommand(
            MySQLConnection conn,        // Database connection
            object[,] FieldsAndValues,   // Pairs of Fields and values
            string Table,                // Table
            object[,] WhereParamFields,  // Tripplets of parameters, operand and its values to match (null - nothing)
            string[,] WhereNoparamFields // Tripplets of parameters, operand and expressions (or other fields for joining) to match (null - nothing)
            )
        {
            if (FieldsAndValues == null)
            {
                throw new MySqlException("FieldsAndValues is null.");
            }
            if (FieldsAndValues.GetLength(0) == 0)
            {
                throw new MySqlException("FieldsAndValues is empty.");
            }
            string    query     = "update " + conn.Database + "." + Table + " set ";
            ArrayList NewValues = new ArrayList();

            for (int m = 0; m < FieldsAndValues.GetLength(0); m++)
            {
                string Field = FieldsAndValues[m, 0] as string;
                object Value = FieldsAndValues[m, 1];
                if (Value == null)
                {
                    query += " " + Field + "=NULL ";
                }
                else
                if (Value.GetType() == typeof(DateTime))
                {
                    DateTime dt = (DateTime)Value;
                    query += " " + Field + "=\"" + dt.Year.ToString("D4") + "-" + dt.Month.ToString("D2") + "-" + dt.Day.ToString("D2") +
                             " " + dt.Hour + ":" + dt.Minute + ":" + dt.Second + ((dt.Millisecond > 0) ? "." + dt.Millisecond.ToString("D3") : "") + "\" ";
                }
                else
                if (Value.GetType() == typeof(bool))
                {
                    bool   bValue = (bool)Value;
                    string str    = (bValue)? "1" : "0";
                    query += " " + Field + "=" + str + " ";
                }
                else
                if (Value.GetType() == typeof(string))
                {
                    string str = Value as string;
                    query += " " + Field + "=" + MySQLUtils.Escape(str, conn) + " ";
                }

                else
                if (Value.GetType() == typeof(int))
                {
                    query += " " + Field + "=" + ((int)Value).ToString() + " ";
                }

                if (m != (FieldsAndValues.GetLength(0) - 1))
                {
                    query += ", ";
                }
            }
            query += MySQLSelectCommand.WhereQueryPart(WhereParamFields, WhereNoparamFields, "WHERE", conn) + " ";

            MySQLCommand command = new MySQLCommand(query, conn);

            command.Prepare();
            // Execute query ->
            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                throw new MySqlException(e.Message + " in query '" + query + "'");
            }
            // <- Execute query
            command.Dispose();
            Query    = query;
            bSuccess = true;
        }
Beispiel #3
0
        /// <summary>
        /// This sample uses insert, update and delete. Assumes that you have the default database 'test'.
        /// </summary>
        public static void Program()
        {
            MySQLConnection conn = new MySQLConnection(new MySQLConnectionString("localhost", "test", "root", "").AsString);

            MessageBox.Show("Connecting to database");
            conn.Open();
            MySQLCommand cmd;

            cmd = new MySQLDriverCS.MySQLCommand("DROP TABLE IF EXISTS test.mysqldrivercs_test", conn);
            MessageBox.Show(cmd.CommandText);
            cmd.ExecuteNonQuery();
            cmd.Dispose();
            cmd = new MySQLDriverCS.MySQLCommand("CREATE TABLE test.mysqldrivercs_test(" +
                                                 "SettingID tinyint(3) unsigned NOT NULL auto_increment," +
                                                 "SettingValue text, " +
                                                 "PRIMARY KEY  (SettingID), UNIQUE KEY SettingID(SettingID),  KEY SettingID_2 (SettingID))" +
                                                 " TYPE=MyISAM COMMENT='MySQL test table'", conn);
            MessageBox.Show(cmd.CommandText);
            cmd.ExecuteNonQuery();
            cmd.Dispose();

            string Value     = "Value";
            int    SettingID = 1;

            MessageBox.Show("Inserting 1,\"Value\"");
            new MySQLInsertCommand(conn,
                                   new object[, ] {
                { "SettingID", SettingID }, { "SettingValue", Value }
            },
                                   "mysqldrivercs_test"
                                   );

            MessageBox.Show("Updating 1,\"Value2\"");
            Value = "Value2";
            new MySQLUpdateCommand(conn,
                                   new object[, ] {
                { "SettingValue", Value }
            },
                                   "mysqldrivercs_test",
                                   new object[, ] {
                { "SettingID", "=", SettingID }
            },
                                   null
                                   );

            MessageBox.Show("Retrieving 1");
            DataTable dt = new MySQLSelectCommand(conn,
                                                  new string[] { "SettingID", "SettingValue" },
                                                  new string[] { "mysqldrivercs_test" },
                                                  new object[, ] {
                { "SettingID", "=", SettingID }
            },
                                                  null,
                                                  null
                                                  ).Table;
            string storedValue = dt.Rows[0]["SettingValue"].ToString();

            MessageBox.Show("1 -> \"" + storedValue + "\"");

            MessageBox.Show("Deleting 1");
            new MySQLDeleteCommand(conn, "mysqldrivercs_test", new object[, ] {
                { "SettingID", "=", SettingID }
            }, null);

            MessageBox.Show("Closing database");
            conn.Close();
            MessageBox.Show("Program finished successfuly!");
        }
        /// <summary>
        /// Construct and Run a simple insert command.
        /// </summary>
        /// <param name="conn">Database connection</param>
        /// <param name="FieldsAndValues">Pairs of Fields and values as an object array. Examples:
        /// <code>
        /// new object[,]{{"SettingID",SettingID},{"SettingValue",Value}}
        ///
        /// new object[,]{{"SettingID","times"},{"SettingValue",100}}
        ///
        /// null
        /// </code>
        /// </param>
        /// <param name="Table">Table name</param>
        /// <example>Example:
        /// <code>
        /// using MySQLDriverCS;
        /// ...
        /// MySQLConnection DBConn;
        /// DBConn = new MySQLConnection( new MySQLConnectionString("myhost","mydatabase","mylogin","mypassword").AsString );
        /// DBConn.Open();
        /// ...
        /// new MySQLInsertCommand(
        ///		DBConn,
        ///		new object[,] {
        ///			{"SettingID",SettingID},
        ///			{"SettingValue",Value}
        ///		},
        ///		"Settings"
        /// );
        /// ...
        /// DBConn.Close();
        /// </code></example>

        /// Modified by Claudia Murialdo (07/24/04) in order to support time
        /// component of the datetime values and culture-independent
        /// format of numeric values in a stmt.
        public MySQLInsertCommand(
            MySQLConnection conn,
            object[,] FieldsAndValues,
            string Table
            )
        {
            if (FieldsAndValues == null)
            {
                throw new MySqlException("FieldsAndValues is null.");
            }
            if (FieldsAndValues.GetLength(0) == 0)
            {
                throw new MySqlException("FieldsAndValues is empty.");
            }
            string query = "insert into " + Table + " ( ";
            int    m;

            for (m = 0; m < FieldsAndValues.GetLength(0); m++)
            {
                string Field = FieldsAndValues[m, 0] as string;
                query += " " + Field.ToString() + " ";
                if (m != (FieldsAndValues.GetLength(0) - 1))
                {
                    query += " , ";
                }
            }
            query += " ) VALUES ( ";

            for (m = 0; m < FieldsAndValues.GetLength(0); m++)
            {
                string Field = FieldsAndValues[m, 0] as string;
                object Value = FieldsAndValues[m, 1];
                if (Value == null)
                {
                    query += " NULL ";
                }
                else
                if ((Value.GetType() == typeof(int)) ||
                    (Value.GetType() == typeof(long)) ||
                    (Value.GetType() == typeof(short)) ||
                    (Value.GetType() == typeof(decimal)) ||
                    (Value.GetType() == typeof(float)) ||
                    (Value.GetType() == typeof(double)))
                {
                    query += " " + Convert.ToString(Value, CultureInfo.InvariantCulture.NumberFormat) + " ";
                }
                else
                if (Value.GetType() == typeof(bool))
                {
                    bool   bValue = (bool)Value;
                    string str    = (bValue)? "1" : "0";
                    query += " " + str + " ";
                }
                else
                if (Value.GetType() == typeof(DateTime))
                {
                    DateTime dt = (DateTime)Value;
                    query += " \"" + dt.Year.ToString("D4") + "-" + dt.Month.ToString("D2") + "-" + dt.Day.ToString("D2") +
                             " " + dt.Hour + ":" + dt.Minute + ":" + dt.Second + ((dt.Millisecond > 0)? "." + dt.Millisecond.ToString("D3") : "") + "\" ";
                }
                else
                {
                    query += " " + MySQLUtils.Escape(Value.ToString(), conn) + " ";
                }
                if (m != (FieldsAndValues.GetLength(0) - 1))
                {
                    query += " , ";
                }
            }
            query += ") ;";

            MySQLCommand command = new MySQLCommand(query, conn);

            command.Prepare();
            // Execute query ->
            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                throw new MySqlException(e.Message + " in query '" + query + "'");
            }
            // <- Execute query
            command.Dispose();
            Query    = query;
            bSuccess = true;
        }