1. 程式人生 > 實用技巧 >C#操作MySQL資料庫

C#操作MySQL資料庫

public MonetaryModel FindMonetaryById(uint MonetaryId)
{

        string sql = "SELECT * FROM cfg_monetary WHERE MonetaryId=@MonetaryId";
        MySqlParameter[] paras = new MySqlParameter[]{
            new MySqlParameter("@MonetaryId", MonetaryId)
        };
        
        MySqlDataReader reader = Db.ExecuteReader(sql, paras);
        reader.Read();
        
        Monetary monetary = new Monetary();
        monetary.MonetaryTitle = reader.GetString("MonetaryTitle");
        
        return monetary;
    }

namespace Eddit2.utils
{
public static class Db
{
private static string connectString = "datasource=localhost;username=root;password=;database=skyline;charset=utf8";

    public static MySqlConnection getConnect()
    {
        //MySqlConnection connect = new MySqlConnection(ConnectString());
        MySqlConnection connect = new MySqlConnection(connectString);
        return connect;
    }


    public static int ExecuteQuery(string sql,  MySqlParameter[] parameters)
    {
        /*
        int affectedRows = 0;
        MySqlConnection connect = getConnect();
        connect.Open();
        //using(IDbTransaction transaction = connect.BeginTransaction())
        //{                
            using(MySqlCommand command = new MySqlCommand(sql, connect))
            //using(IDbCommand command = new MySqlCommand())
            {
                //command.Connection = connect;
                //command.CommandText = sql;
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                    //command.Parameters.AddRange
                }
                
                //affectedRows = command.EndExecuteNonQuery(CommandBehavior.CloseConnection);
                affectedRows = command.ExecuteNonQuery();
            }
        //    transaction.Commit();
        //}
        
        return affectedRows;
        */
        
        MySqlConnection connect = getConnect();
        using (MySqlCommand cmd = new MySqlCommand())
        {
            if (connect.State != ConnectionState.Open)
            {
                connect.Open();
            }
            MySqlTransaction transaction = connect.BeginTransaction();
            try 
            {
                //int affectedRow = 0;                    
                //PrepareCommand(cmd, connect, null, sql, parameters);
                PrepareCommand(cmd, connect, transaction, sql, parameters);
                int affectedRow = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                transaction.Commit();
                return affectedRow;
            }
            catch (MySqlException e)
            {
                transaction.Rollback();
                throw new Exception(e.Message);
            }
            finally
            {
                cmd.Dispose();
                connect.Close();
            }
        }
        
    }
    
    
    public static DataSet ExecuteDataSet(string sql)
    {
        MySqlConnection connect = getConnect();
        connect.Open();
        
        MySqlDataAdapter da = new MySqlDataAdapter(sql, connect);
        DataSet ds = new DataSet();
        da.Fill(ds);
        connect.Close();
        
        return ds;
    }
    
    public static MySqlDataReader ExecuteReader(string sql, MySqlParameter[] parameters)
    {
        MySqlConnection connect = getConnect();
        connect.Open();
        MySqlCommand command = new MySqlCommand(sql, connect);
        
        if (parameters != null)
        {
            command.Parameters.AddRange(parameters);
        }            
        MySqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
        
        return reader;
    }
    
    //public static DataTable ExecuteScalar(string sql, System.Data.IDbDataParameter[] parameters)
    public static DataTable ExecuteScalar(string sql, MySqlParameter[] parameters)
    {
        MySqlConnection connect = getConnect();
        connect.Open();
        //using(MySqlCommand command = new MySqlCommand(sql, new MySqlConnection(ConnectString())))
        using(MySqlCommand command = new MySqlCommand(sql, connect))
        {
            if (parameters != null)
            {
                command.Parameters.AddRange(parameters);
            }
            MySqlDataAdapter adapter = new MySqlDataAdapter(command);
            DataTable data = new DataTable();
            adapter.Fill(data);
            connect.Close();
            
            return data;
        }
    }
    
    //-------------------- Internet copy --------------------------------------------
    /*
     public static DataSet RunProcedureForDataSet(string storedProcName, IDataParameter[] parameters)
    {
        using (MySqlConnection connection = new MySqlConnection(ConnectString()))
        {
            DataSet dataSet = new DataSet();
            connection.Open();
            MySqlDataAdapter adapter =  new MySqlDataAdapter();
            adapter.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
            adapter.Fill(dataSet);
            connection.Close();
            return dataSet;
        }
    }
    */
    
    
    private static void PrepareCommand(MySqlCommand cmd, MySqlConnection  connection, 
                                       MySqlTransaction transaction, string sql,
                                       MySqlParameter[] cmdParams)
    {
        if (connection.State != ConnectionState.Open)
        {
            connection.Open();
        }
        cmd.Connection = connection;
        cmd.CommandText = sql;
        if (transaction != null)
        {
            cmd.Transaction = transaction;
        }
        cmd.CommandType = CommandType.Text;
        if (cmdParams != null)
        {
            foreach (MySqlParameter para in cmdParams)
            {
                cmd.Parameters.Add(para);
            }
        }
    }
    
}

}