mysql中插入多条记录-微软批处理

系统 1669 0

当向mysql中插入大量数据时,可以使用微软的批处理方式。这样可以防止内存溢出又提高了效率。我写了一个mysql中插入多条记录的例子。赋值代码可以直接使用。

1、首先需要添加两个dll

MySql.Data.dll和MySqlBulkCopy.dll

2、把MySqlHelper.cs这个类文件加入到项目中 (我把代码贴出来,复制后建一个MySqlHelper.cs)

MySqlHelper.cs

        
          using
        
        
           System;


        
        
          using
        
        
           System.Collections.Generic;


        
        
          using
        
        
           System.Linq;


        
        
          using
        
        
           System.Text;




        
        
          using
        
        
           System.Collections;


        
        
          using
        
        
           System.Data;


        
        
          using
        
        
           MySql.Data.MySqlClient;




        
        
          namespace
        
        
           Baitour.Utility

{

    
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           The MySqlHelper class is intended to encapsulate high performance, scalable best practices for 

    
        
        
          ///
        
        
           common uses of MySqlClient.

    
        
        
          ///
        
        
          </summary>
        
        
          public
        
        
          sealed
        
        
          class
        
        
           MySqlHelper

    {

        
        
        
          #region
        
         private utility methods & constructors



        
        
          //
        
        
          Since this class provides only static methods, make the default constructor private to prevent 

        
        
        
          //
        
        
          instances from being created with "new MySqlHelper()".
        
        
          public
        
        
          static
        
        
          readonly
        
        
          string
        
         ConnectionString = System.Configuration.ConfigurationSettings.AppSettings[
        
          "
        
        
          MySqlConnString
        
        
          "
        
        
          ];



        
        
        
          private
        
        
           MySqlHelper() { }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           This method is used to attach array's of MySqlParameters to an MySqlCommand.

        
        
        
          ///
        
        
          ///
        
        
           This method will assign a value of DbNull to any parameter with a direction of

        
        
        
          ///
        
        
           InputOutput and a value of null.  

        
        
        
          ///
        
        
          ///
        
        
           This behavior will prevent default values from being used, but

        
        
        
          ///
        
        
           this will be the less common case than an intended pure output parameter (derived as InputOutput)

        
        
        
          ///
        
        
           where the user provided no input value.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <param name="command">
        
        
          The command to which the parameters will be added
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParameters tho be added to command
        
        
          </param>
        
        
          private
        
        
          static
        
        
          void
        
        
           AttachParameters(MySqlCommand command, MySqlParameter[] commandParameters)

        {

            
        
        
          foreach
        
         (MySqlParameter p 
        
          in
        
        
           commandParameters)

            {

                
        
        
          //
        
        
          check for derived output value with no value assigned
        
        
          if
        
         ((p.Direction == ParameterDirection.InputOutput) && (p.Value == 
        
          null
        
        
          ))

                {

                    p.Value 
        
        =
        
           DBNull.Value;

                }



                command.Parameters.Add(p);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           This method assigns an array of values to an array of MySqlParameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          array of MySqlParameters to be assigned values
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          array of objects holding the values to be assigned
        
        
          </param>
        
        
          private
        
        
          static
        
        
          void
        
         AssignParameterValues(MySqlParameter[] commandParameters, 
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          if
        
         ((commandParameters == 
        
          null
        
        ) || (parameterValues == 
        
          null
        
        
          ))

            {

                
        
        
          //
        
        
          do nothing if we get no data
        
        
          return
        
        
          ;

            }



            
        
        
          //
        
        
           we must have the same number of values as we pave parameters to put them in
        
        
          if
        
         (commandParameters.Length !=
        
           parameterValues.Length)

            {

                
        
        
          throw
        
        
          new
        
         ArgumentException(
        
          "
        
        
          Parameter count does not match Parameter Value count.
        
        
          "
        
        
          );

            }



            
        
        
          //
        
        
          iterate through the MySqlParameters, assigning the values from the corresponding position in the 

            
        
        
          //
        
        
          value array
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        , j = commandParameters.Length; i < j; i++
        
          )

            {

                commandParameters[i].Value 
        
        =
        
           parameterValues[i];

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           This method opens (if necessary) and assigns a connection, transaction, command type and parameters 

        
        
        
          ///
        
        
           to the provided command.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <param name="command">
        
        
          the MySqlCommand to be prepared
        
        
          </param>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection, on which to execute this command
        
        
          </param>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction, or 'null'
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParameters to be associated with the command or 'null' if no parameters are required
        
        
          </param>
        
        
          private
        
        
          static
        
        
          void
        
         PrepareCommand(MySqlCommand command, MySqlConnection connection, MySqlTransaction transaction, CommandType commandType, 
        
          string
        
        
           commandText, MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          if the provided connection is not open, we will open it
        
        
          if
        
         (connection.State !=
        
           ConnectionState.Open)

            {

                connection.Open();

            }



            
        
        
          //
        
        
          associate the connection with the command
        
        

            command.Connection =
        
           connection;



            
        
        
          //
        
        
          set the command text (stored procedure name or MySql statement)
        
        

            command.CommandText =
        
           commandText;



            
        
        
          //
        
        
          honyu添加

            
        
        
          //
        
        
          command.CommandTimeout = connection.ConnectionTimeout;
        
        

            command.CommandTimeout = 
        
          300
        
        ;
        
          //
        
        
          超时时间5分钟



            
        
        
          //
        
        
          if we were provided a transaction, assign it.
        
        
          if
        
         (transaction != 
        
          null
        
        
          )

            {

                command.Transaction 
        
        =
        
           transaction;

            }



            
        
        
          //
        
        
          set the command type
        
        

            command.CommandType =
        
           commandType;



            
        
        
          //
        
        
          attach the command parameters if they are provided
        
        
          if
        
         (commandParameters != 
        
          null
        
        
          )

            {

                AttachParameters(command, commandParameters);

            }



            
        
        
          return
        
        
          ;

        }





        
        
        
          #endregion
        
         private utility methods & constructors



        
        
          #region
        
         ExecuteNonQuery



        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns no resultset and takes no parameters) against the database specified in 

        
        
        
          ///
        
        
           the connection string. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for an MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an int representing the number of rows affected by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(
        
          string
        
         connectionString, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteNonQuery(connectionString, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns no resultset) against the database specified in the connection string 

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for a MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParameters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an int representing the number of rows affected by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(
        
          string
        
         connectionString, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create & open an MySqlConnection, and dispose of it after we are done.
        
        
          using
        
         (MySqlConnection cn = 
        
          new
        
        
           MySqlConnection(connectionString))

            {

                cn.Open();



                
        
        
          //
        
        
          call the overload that takes a connection in place of the connection string
        
        
          return
        
        
           ExecuteNonQuery(cn, commandType, commandText, commandParameters);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via an MySqlCommand (that returns no resultset) against the database specified in 

        
        
        
          ///
        
        
           the connection string using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for a MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an int representing the number of rows affected by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(
        
          string
        
         connectionString, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(connectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlDbCommand (that returns no resultset and takes no parameters) against the provided MySqlConnection. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an int representing the number of rows affected by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(MySqlConnection connection, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteNonQuery(connection, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns no resultset) against the specified MySqlConnection 

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an int representing the number of rows affected by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(MySqlConnection connection, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create a command and prepare it for execution
        
        

            MySqlCommand cmd = 
        
          new
        
        
           MySqlCommand();

            PrepareCommand(cmd, connection, (MySqlTransaction)
        
        
          null
        
        
          , commandType, commandText, commandParameters);



            
        
        
          //
        
        
          finally, execute the command.
        
        
          return
        
        
           cmd.ExecuteNonQuery();

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via an MySqlCommand (that returns no resultset) against the specified MySqlConnection 

        
        
        
          ///
        
        
           using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an int representing the number of rows affected by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(MySqlConnection connection, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns no resultset and takes no parameters) against the provided MySqlTransaction. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an int representing the number of rows affected by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(MySqlTransaction transaction, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteNonQuery(transaction, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns no resultset) against the specified MySqlTransaction

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an int representing the number of rows affected by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(MySqlTransaction transaction, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create a command and prepare it for execution
        
        

            MySqlCommand cmd = 
        
          new
        
        
           MySqlCommand();

            PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);



            
        
        
          //
        
        
          finally, execute the command.
        
        
          return
        
        
           cmd.ExecuteNonQuery();

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via an MySqlCommand (that returns no resultset) against the specified 

        
        
        
          ///
        
        
           MySqlTransaction using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an int representing the number of rows affected by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(MySqlTransaction transaction, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populet the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          #endregion
        
         ExecuteNonQuery



        
        
          #region
        
         ExecuteDataSet



        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset and takes no parameters) against the database specified in 

        
        
        
          ///
        
        
           the connection string. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for an MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          a dataset containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         DataSet ExecuteDataset( CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteDataset(ConnectionString, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset) against the database specified in the connection string 

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for an MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          a dataset containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         DataSet ExecuteDataset(
        
          string
        
         connectionString, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create & open an MySqlConnection, and dispose of it after we are done.
        
        
          using
        
         (MySqlConnection cn = 
        
          new
        
        
           MySqlConnection(connectionString))

            {

                cn.Open();



                
        
        
          //
        
        
          call the overload that takes a connection in place of the connection string
        
        
          return
        
        
           ExecuteDataset(cn, commandType, commandText, commandParameters);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via an MySqlCommand (that returns a resultset) against the database specified in 

        
        
        
          ///
        
        
           the conneciton string using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for an MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          a dataset containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         DataSet ExecuteDataset(
        
          string
        
         connectionString, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populet the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(connectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset and takes no parameters) against the provided MySqlConnection. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          a dataset containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         DataSet ExecuteDataset(MySqlConnection connection, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteDataset(connection, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset) against the specified MySqlConnection 

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          a dataset containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         DataSet ExecuteDataset(MySqlConnection connection, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create a command and prepare it for execution
        
        

            MySqlCommand cmd = 
        
          new
        
        
           MySqlCommand();

            PrepareCommand(cmd, connection, (MySqlTransaction)
        
        
          null
        
        
          , commandType, commandText, commandParameters);



            
        
        
          //
        
        
          create the DataAdapter & DataSet
        
        

            MySqlDataAdapter da = 
        
          new
        
        
           MySqlDataAdapter(cmd);

            DataSet ds 
        
        = 
        
          new
        
        
           DataSet();



            
        
        
          //
        
        
          fill the DataSet using default values for DataTable names, etc.
        
        
                      da.Fill(ds);



            
        
        
          //
        
        
          return the dataset
        
        
          return
        
        
           ds;

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via an MySqlCommand (that returns a resultset) against the specified MySqlConnection 

        
        
        
          ///
        
        
           using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          a dataset containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         DataSet ExecuteDataset(MySqlConnection connection, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteDataset(connection, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset and takes no parameters) against the provided MySqlTransaction. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          a dataset containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         DataSet ExecuteDataset(MySqlTransaction transaction, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteDataset(transaction, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset) against the specified MySqlTransaction

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          a dataset containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         DataSet ExecuteDataset(MySqlTransaction transaction, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create a command and prepare it for execution
        
        

            MySqlCommand cmd = 
        
          new
        
        
           MySqlCommand();

            PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);



            
        
        
          //
        
        
          create the DataAdapter & DataSet
        
        

            MySqlDataAdapter da = 
        
          new
        
        
           MySqlDataAdapter(cmd);

            DataSet ds 
        
        = 
        
          new
        
        
           DataSet();



            
        
        
          //
        
        
          fill the DataSet using default values for DataTable names, etc.
        
        
                      da.Fill(ds);



            
        
        
          //
        
        
          return the dataset
        
        
          return
        
        
           ds;

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via an MySqlCommand (that returns a resultset) against the specified 

        
        
        
          ///
        
        
           MySqlTransaction using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          a dataset containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         DataSet ExecuteDataset(MySqlTransaction transaction, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteDataset(transaction, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          #endregion
        
         ExecuteDataSet



        
        
          #region
        
         ExecuteReader



        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           this enum is used to indicate weather the connection was provided by the caller, or created by MySqlHelper, so that

        
        
        
          ///
        
        
           we can set the appropriate CommandBehavior when calling ExecuteReader()

        
        
        
          ///
        
        
          </summary>
        
        
          private
        
        
          enum
        
        
           MySqlConnectionOwnership

        {

            
        
        
          ///
        
        
          <summary>
        
        
          Connection is owned and managed by MySqlHelper
        
        
          </summary>
        
        
                      Internal,

            
        
        
          ///
        
        
          <summary>
        
        
          Connection is owned and managed by the caller
        
        
          </summary>
        
        
                      External

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Create and prepare an MySqlCommand, and call ExecuteReader with the appropriate CommandBehavior.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           If we created and opened the connection, we want the connection to be closed when the DataReader is closed.

        
        
        
          ///
        
        
          ///
        
        
           If the caller provided the connection, we want to leave it to them to manage.

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection, on which to execute this command
        
        
          </param>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction, or 'null'
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParameters to be associated with the command or 'null' if no parameters are required
        
        
          </param>
        
        
          ///
        
        
          <param name="connectionOwnership">
        
        
          indicates whether the connection parameter was provided by the caller, or created by MySqlHelper
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          MySqlDataReader containing the results of the command
        
        
          </returns>
        
        
          private
        
        
          static
        
         MySqlDataReader ExecuteReader(MySqlConnection connection, MySqlTransaction transaction, CommandType commandType, 
        
          string
        
        
           commandText, MySqlParameter[] commandParameters, MySqlConnectionOwnership connectionOwnership)

        {

            
        
        
          //
        
        
          create a command and prepare it for execution
        
        

            MySqlCommand cmd = 
        
          new
        
        
           MySqlCommand();

            PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);



            
        
        
          //
        
        
          create a reader
        
        
                      MySqlDataReader dr;



            
        
        
          //
        
        
           call ExecuteReader with the appropriate CommandBehavior
        
        
          if
        
         (connectionOwnership ==
        
           MySqlConnectionOwnership.External)

            {

                dr 
        
        =
        
           cmd.ExecuteReader();

            }

            
        
        
          else
        
        
          

            {

                dr 
        
        =
        
           cmd.ExecuteReader(CommandBehavior.CloseConnection);

            }



            
        
        
          return
        
        
           dr;

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset and takes no parameters) against the database specified in 

        
        
        
          ///
        
        
           the connection string. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            MySqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for an MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an MySqlDataReader containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlDataReader ExecuteReader(
        
          string
        
         connectionString, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteReader(connectionString, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset) against the database specified in the connection string 

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            MySqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for an MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParameters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an MySqlDataReader containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlDataReader ExecuteReader(
        
          string
        
         connectionString, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create & open an MySqlbConnection
        
        

            MySqlConnection cn = 
        
          new
        
        
           MySqlConnection(connectionString);

            cn.Open();



            
        
        
          try
        
        
          

            {

                
        
        
          //
        
        
          call the private overload that takes an internally owned connection in place of the connection string
        
        
          return
        
         ExecuteReader(cn, 
        
          null
        
        
          , commandType, commandText, commandParameters, MySqlConnectionOwnership.Internal);

            }

            
        
        
          catch
        
        
          

            {

                
        
        
          //
        
        
          if we fail to return the MySqlDataReader, we neeed to close the connection ourselves
        
        
                          cn.Close();

                
        
        
          throw
        
        
          ;

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via an MySqlCommand (that returns a resultset) against the database specified in 

        
        
        
          ///
        
        
           the connection string using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            MySqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for an MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an MySqlDataReader containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlDataReader ExecuteReader(
        
          string
        
         connectionString, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(connectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteReader(connectionString, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset and takes no parameters) against the provided MySqlConnection. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            MySqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an MySqlDataReader containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlDataReader ExecuteReader(MySqlConnection connection, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteReader(connection, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset) against the specified MySqlConnection 

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            MySqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an MySqlDataReader containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlDataReader ExecuteReader(MySqlConnection connection, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          pass through the call to the private overload using a null transaction value and an externally owned connection
        
        
          return
        
         ExecuteReader(connection, (MySqlTransaction)
        
          null
        
        
          , commandType, commandText, commandParameters, MySqlConnectionOwnership.External);

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via an MySqlCommand (that returns a resultset) against the specified MySqlConnection 

        
        
        
          ///
        
        
           using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            MySqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an MySqlDataReader containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlDataReader ExecuteReader(MySqlConnection connection, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                MySqlParameter[] commandParameters 
        
        =
        
           MySqlHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);



                AssignParameterValues(commandParameters, parameterValues);



                
        
        
          return
        
        
           ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteReader(connection, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset and takes no parameters) against the provided MySqlTransaction. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            MySqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an MySqlDataReader containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlDataReader ExecuteReader(MySqlTransaction transaction, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteReader(transaction, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute an MySqlCommand (that returns a resultset) against the specified MySqlTransaction

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
             MySqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or PL/SQL command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParameters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an MySqlDataReader containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlDataReader ExecuteReader(MySqlTransaction transaction, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          pass through to private overload, indicating that the connection is owned by the caller
        
        
          return
        
        
           ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, MySqlConnectionOwnership.External);

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via an MySqlCommand (that returns a resultset) against the specified

        
        
        
          ///
        
        
           MySqlTransaction using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            MySqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an MySqlDataReader containing the resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlDataReader ExecuteReader(MySqlTransaction transaction, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                MySqlParameter[] commandParameters 
        
        =
        
           MySqlHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);



                AssignParameterValues(commandParameters, parameterValues);



                
        
        
          return
        
        
           ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteReader(transaction, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          #endregion
        
         ExecuteReader



        
        
          #region
        
         ExecuteScalar



        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a MySqlCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in 

        
        
        
          ///
        
        
           the connection string. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for a MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or T-MySql command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an object containing the value in the 1x1 resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(
        
          string
        
         connectionString, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteScalar(connectionString, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a MySqlCommand (that returns a 1x1 resultset) against the database specified in the connection string 

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for a MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or T-MySql command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an object containing the value in the 1x1 resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(
        
          string
        
         connectionString, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create & open a MySqlConnection, and dispose of it after we are done.
        
        
          using
        
         (MySqlConnection cn = 
        
          new
        
        
           MySqlConnection(connectionString))

            {

                cn.Open();



                
        
        
          //
        
        
          call the overload that takes a connection in place of the connection string
        
        
          return
        
        
           ExecuteScalar(cn, commandType, commandText, commandParameters);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via a MySqlCommand (that returns a 1x1 resultset) against the database specified in 

        
        
        
          ///
        
        
           the conneciton string using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for a MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an object containing the value in the 1x1 resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(
        
          string
        
         connectionString, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populet the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(connectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a MySqlCommand (that returns a 1x1 resultset and takes no parameters) against the provided MySqlConnection. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or T-MySql command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an object containing the value in the 1x1 resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(MySqlConnection connection, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteScalar(connection, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a MySqlCommand (that returns a 1x1 resultset) against the specified MySqlConnection 

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or T-MySql command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an object containing the value in the 1x1 resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(MySqlConnection connection, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create a command and prepare it for execution
        
        

            MySqlCommand cmd = 
        
          new
        
        
           MySqlCommand();

            PrepareCommand(cmd, connection, (MySqlTransaction)
        
        
          null
        
        
          , commandType, commandText, commandParameters);



            
        
        
          //
        
        
          execute the command & return the results
        
        
          return
        
        
           cmd.ExecuteScalar();

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via a MySqlCommand (that returns a 1x1 resultset) against the specified MySqlConnection 

        
        
        
          ///
        
        
           using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connection">
        
        
          a valid MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an object containing the value in the 1x1 resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(MySqlConnection connection, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populet the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteScalar(connection, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a MySqlCommand (that returns a 1x1 resultset and takes no parameters) against the provided MySqlTransaction. 

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or T-MySql command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an object containing the value in the 1x1 resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(MySqlTransaction transaction, CommandType commandType, 
        
          string
        
        
           commandText)

        {

            
        
        
          //
        
        
          pass through the call providing null for the set of MySqlParameters
        
        
          return
        
         ExecuteScalar(transaction, commandType, commandText, (MySqlParameter[])
        
          null
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a MySqlCommand (that returns a 1x1 resultset) against the specified MySqlTransaction

        
        
        
          ///
        
        
           using the provided parameters.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new MySqlParameter("@prodid", 24));

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="commandType">
        
        
          the CommandType (stored procedure, text, etc.)
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or T-MySql command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters used to execute the command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an object containing the value in the 1x1 resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(MySqlTransaction transaction, CommandType commandType, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          //
        
        
          create a command and prepare it for execution
        
        

            MySqlCommand cmd = 
        
          new
        
        
           MySqlCommand();

            PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);



            
        
        
          //
        
        
          execute the command & return the results
        
        
          return
        
        
           cmd.ExecuteScalar();



        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Execute a stored procedure via a MySqlCommand (that returns a 1x1 resultset) against the specified

        
        
        
          ///
        
        
           MySqlTransaction using the provided parameter values.  This method will query the database to discover the parameters for the 

        
        
        
          ///
        
        
           stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method provides no access to output parameters or the stored procedure's return value parameter.

        
        
        
          ///
        
        
          ///
        
        
           e.g.:  

        
        
        
          ///
        
        
            int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="transaction">
        
        
          a valid MySqlTransaction
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="parameterValues">
        
        
          an array of objects to be assigned as the input values of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an object containing the value in the 1x1 resultset generated by the command
        
        
          </returns>
        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(MySqlTransaction transaction, 
        
          string
        
         spName, 
        
          params
        
        
          object
        
        
          [] parameterValues)

        {

            
        
        
          //
        
        
          if we got parameter values, we need to figure out where they go
        
        
          if
        
         ((parameterValues != 
        
          null
        
        ) && (parameterValues.Length > 
        
          0
        
        
          ))

            {

                
        
        
          //
        
        
          pull the parameters for this stored procedure from the parameter cache (or discover them & populet the cache)
        
        

                MySqlParameter[] commandParameters =
        
           MySqlHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);



                
        
        
          //
        
        
          assign the provided values to these parameters based on parameter order
        
        
                          AssignParameterValues(commandParameters, parameterValues);



                
        
        
          //
        
        
          call the overload that takes an array of MySqlParameters
        
        
          return
        
        
           ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);

            }

            
        
        
          //
        
        
          otherwise we can just call the SP without params
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           ExecuteScalar(transaction, CommandType.StoredProcedure, spName);

            }

        }



        
        
        
          #endregion
        
         ExecuteScalar
        
          

    }

    
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           MySqlHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the

    
        
        
          ///
        
        
           ability to discover parameters for stored procedures at run-time.

    
        
        
          ///
        
        
          </summary>
        
        
          public
        
        
          sealed
        
        
          class
        
        
           MySqlHelperParameterCache

    {

        
        
        
          #region
        
         private methods, variables, and constructors



        
        
          //
        
        
          Since this class provides only static methods, make the default constructor private to prevent 

        
        
        
          //
        
        
          instances from being created with "new MySqlHelperParameterCache()".
        
        
          private
        
        
           MySqlHelperParameterCache() { }



        
        
        
          private
        
        
          static
        
         Hashtable paramCache = Hashtable.Synchronized(
        
          new
        
        
           Hashtable());



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           resolve at run-time the appropriate set of MySqlParameters for a stored procedure

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for a MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <param name="includeReturnValueParameter">
        
        
          weather or not to onclude ther return value parameter
        
        
          </param>
        
        
          ///
        
        
          <returns></returns>
        
        
          private
        
        
          static
        
         MySqlParameter[] DiscoverSpParameterSet(
        
          string
        
         connectionString, 
        
          string
        
         spName, 
        
          bool
        
        
           includeReturnValueParameter)

        {

            
        
        
          using
        
         (MySqlConnection cn = 
        
          new
        
        
           MySqlConnection(connectionString))

            
        
        
          using
        
         (MySqlCommand cmd = 
        
          new
        
        
           MySqlCommand(spName, cn))

            {

                cn.Open();

                cmd.CommandType 
        
        =
        
           CommandType.StoredProcedure;



                MySqlCommandBuilder.DeriveParameters(cmd);



                
        
        
          if
        
         (!
        
          includeReturnValueParameter)

                {

                    
        
        
          if
        
         (ParameterDirection.ReturnValue == cmd.Parameters[
        
          0
        
        
          ].Direction)

                        cmd.Parameters.RemoveAt(
        
        
          0
        
        
          );

                }



                MySqlParameter[] discoveredParameters 
        
        = 
        
          new
        
        
           MySqlParameter[cmd.Parameters.Count];



                cmd.Parameters.CopyTo(discoveredParameters, 
        
        
          0
        
        
          );



                
        
        
          return
        
        
           discoveredParameters;

            }

        }



        
        
        
          //
        
        
          deep copy of cached MySqlParameter array
        
        
          private
        
        
          static
        
        
           MySqlParameter[] CloneParameters(MySqlParameter[] originalParameters)

        {

            MySqlParameter[] clonedParameters 
        
        = 
        
          new
        
        
           MySqlParameter[originalParameters.Length];



            
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        , j = originalParameters.Length; i < j; i++
        
          )

            {

                clonedParameters[i] 
        
        =
        
           (MySqlParameter)((ICloneable)originalParameters[i]).Clone();

            }



            
        
        
          return
        
        
           clonedParameters;

        }



        
        
        
          #endregion
        
         private methods, variables, and constructors



        
        
          #region
        
         caching functions



        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           add parameter array to the cache

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for an MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or T-MySql command
        
        
          </param>
        
        
          ///
        
        
          <param name="commandParameters">
        
        
          an array of MySqlParamters to be cached
        
        
          </param>
        
        
          public
        
        
          static
        
        
          void
        
         CacheParameterSet(
        
          string
        
         connectionString, 
        
          string
        
         commandText, 
        
          params
        
        
           MySqlParameter[] commandParameters)

        {

            
        
        
          string
        
         hashKey = connectionString + 
        
          "
        
        
          :
        
        
          "
        
         +
        
           commandText;



            paramCache[hashKey] 
        
        =
        
           commandParameters;

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           retrieve a parameter array from the cache

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for a MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="commandText">
        
        
          the stored procedure name or T-MySql command
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an array of MySqlParameters
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlParameter[] GetCachedParameterSet(
        
          string
        
         connectionString, 
        
          string
        
        
           commandText)

        {

            
        
        
          string
        
         hashKey = connectionString + 
        
          "
        
        
          :
        
        
          "
        
         +
        
           commandText;



            MySqlParameter[] cachedParameters 
        
        =
        
           (MySqlParameter[])paramCache[hashKey];



            
        
        
          if
        
         (cachedParameters == 
        
          null
        
        
          )

            {

                
        
        
          return
        
        
          null
        
        
          ;

            }

            
        
        
          else
        
        
          

            {

                
        
        
          return
        
        
           CloneParameters(cachedParameters);

            }

        }



        
        
        
          #endregion
        
         caching functions



        
        
          #region
        
         Parameter Discovery Functions



        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Retrieves the set of MySqlParameters appropriate for the stored procedure

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method will query the database for this information, and then store it in a cache for future requests.

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for a MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored prcedure
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an array of MySqlParameters
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlParameter[] GetSpParameterSet(
        
          string
        
         connectionString, 
        
          string
        
        
           spName)

        {

            
        
        
          return
        
         GetSpParameterSet(connectionString, spName, 
        
          true
        
        
          );

        }



        
        
        
          ///
        
        
          <summary>
        
        
          ///
        
        
           Retrieves the set of MySqlParameters appropriate for the stored procedure

        
        
        
          ///
        
        
          </summary>
        
        
          ///
        
        
          <remarks>
        
        
          ///
        
        
           This method will query the database for this information, and then store it in a cache for future requests.

        
        
        
          ///
        
        
          </remarks>
        
        
          ///
        
        
          <param name="connectionString">
        
        
          a valid connection string for an MySqlConnection
        
        
          </param>
        
        
          ///
        
        
          <param name="spName">
        
        
          the name of the stored procedure
        
        
          </param>
        
        
          ///
        
        
          <param name="includeReturnValueParameter">
        
        
          a bool value indicating weather the return value parameter should be included in the results
        
        
          </param>
        
        
          ///
        
        
          <returns>
        
        
          an array of MySqlParameters
        
        
          </returns>
        
        
          public
        
        
          static
        
         MySqlParameter[] GetSpParameterSet(
        
          string
        
         connectionString, 
        
          string
        
         spName, 
        
          bool
        
        
           includeReturnValueParameter)

        {

            
        
        
          string
        
         hashKey = connectionString + 
        
          "
        
        
          :
        
        
          "
        
         + spName + (includeReturnValueParameter ? 
        
          "
        
        
          :include ReturnValue Parameter
        
        
          "
        
         : 
        
          ""
        
        
          );



            MySqlParameter[] cachedParameters;



            cachedParameters 
        
        =
        
           (MySqlParameter[])paramCache[hashKey];



            
        
        
          if
        
         (cachedParameters == 
        
          null
        
        
          )

            {

                cachedParameters 
        
        = (MySqlParameter[])(paramCache[hashKey] =
        
           DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));

            }



            
        
        
          return
        
        
           CloneParameters(cachedParameters);

        }



        
        
        
          #endregion
        
         Parameter Discovery Functions
        
          



    }

}
        
      
View Code

 

3、配置config字符串

 <appSettings>
    <add key="MySqlConnString" value="Data Source=192.168.2.98;User Id=root;Password=123456;Database=test2;CharSet=utf8;AllowUserVariables=True;" />
  </appSettings>

4、程序里写代码

      DataTable dt = 
      
        new
      
      
         DataTable();

            dt.Columns.Add(
      
      
        "
      
      
        name
      
      
        "
      
      , 
      
        typeof
      
      (
      
        string
      
      
        ));

            
      
      
        for
      
       (
      
        int
      
       i = 
      
        0
      
      ; i < 
      
        10
      
      ; i++
      
        )

            {

                DataRow dr 
      
      =
      
         dt.NewRow();

                dr[
      
      
        "
      
      
        name
      
      
        "
      
      ] = 
      
        "
      
      
        hh
      
      
        "
      
       +
      
         i.ToString();

                dt.Rows.Add(dr);

            }



            
      
      
        bool
      
       isExistValidFile = 
      
        false
      
      
        ;

            StringBuilder ExternalIDs 
      
      = 
      
        new
      
      
         StringBuilder();

            

            
      
      
        #region
      
       load data infile



            
      
        string
      
       filename = 
      
        ""
      
      
        ;

            
      
      
        if
      
       (System.Environment.CurrentDirectory + 
      
        "
      
      
        \\
      
      
        "
      
       == AppDomain.CurrentDomain.BaseDirectory) { filename = AppDomain.CurrentDomain.BaseDirectory + Guid.NewGuid().ToString().ToUpper().Replace(
      
        "
      
      
        -
      
      
        "
      
      , 
      
        ""
      
      ) + 
      
        "
      
      
        .txt
      
      
        "
      
      
        ; }

            
      
      
        else
      
       { filename = AppDomain.CurrentDomain.BaseDirectory + 
      
        @"
      
      
        Bin\
      
      
        "
      
       + Guid.NewGuid().ToString().ToUpper().Replace(
      
        "
      
      
        -
      
      
        "
      
      , 
      
        ""
      
      ) + 
      
        "
      
      
        .txt
      
      
        "
      
      
        ; }



            
      
      
        using
      
       (System.IO.FileStream fs = 
      
        new
      
      
         System.IO.FileStream(filename, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.Read))

            {

                
      
      
        using
      
       (System.IO.StreamWriter sw = 
      
        new
      
      
         System.IO.StreamWriter(fs, Encoding.Default))

                {

                    
      
      
        foreach
      
       (DataRow drObj 
      
        in
      
      
         dt.Rows)

                    {

                        sw.WriteLine(drObj[
      
      
        "
      
      
        name
      
      
        "
      
      
        ]);

                        isExistValidFile 
      
      = 
      
        true
      
      
        ;

                    }

                    sw.Close();

                }

                fs.Close();

                GC.Collect();

            }

            
      
      
        if
      
      
         (isExistValidFile)

            {

                
      
      
        if
      
      
         (System.IO.File.Exists(filename))

                {

                    
      
      
        #region
      
       提交数据库
      
        



                    StringBuilder loadDataSql 
      
      = 
      
        new
      
      
         StringBuilder();

                    loadDataSql.Append(
      
      
        "
      
      
        LOAD DATA LOCAL INFILE '
      
      
        "
      
       + @filename.Replace(
      
        "
      
      
        \\
      
      
        "
      
      , 
      
        "
      
      
        /
      
      
        "
      
      ) + 
      
        "
      
      
        ' INTO TABLE student CHARACTER SET GBK FIELDS TERMINATED BY '|' 
      
      
        "
      
      
        );

                    loadDataSql.Append(
      
      
        "
      
      
        (name)
      
      
        "
      
      
        );



                    
      
      
        using
      
       (MySql.Data.MySqlClient.MySqlConnection con = 
      
        new
      
      
         MySql.Data.MySqlClient.MySqlConnection(MySqlHelper.ConnectionString))

                    {

                        con.Open();

                        MySql.Data.MySqlClient.MySqlTransaction st 
      
      =
      
         con.BeginTransaction(IsolationLevel.ReadUncommitted);

                        
      
      
        try
      
      
        

                        {

                            MySqlHelper.ExecuteNonQuery(st, CommandType.Text, loadDataSql.ToString());

                            st.Commit();

                            GC.Collect();

                        }

                        
      
      
        catch
      
      
         (Exception ex)

                        {

                            StringBuilder tmpError 
      
      = 
      
        new
      
      
         StringBuilder();

                            tmpError.Append(ex.TargetSite).Append(
      
      
        "
      
      
        \r\n
      
      
        "
      
       + ex.StackTrace).Append(
      
        "
      
      
        \r\n
      
      
        "
      
       + ex.InnerException).Append(
      
        "
      
      
        \r\n
      
      
        "
      
       + ex.Source).Append(
      
        "
      
      
        \r\n
      
      
        "
      
       +
      
         ex.Message);

                            st.Rollback();

                        }

                        
      
      
        finally
      
       { 
      
        if
      
       (con != 
      
        null
      
      ) { con.Close(); con.Dispose(); } 
      
        if
      
       (!
      
        string
      
      
        .IsNullOrEmpty(filename)) { System.IO.File.Delete(filename); } }

                    }



                    
      
      
        #endregion
      
      
        

                }

                
      
      
        else
      
      
         {  }

            }

            
      
      
        else
      
      
         {  }



            
      
      
        #endregion
      
    

 

mysql中插入多条记录-微软批处理


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论