.NET MTSQL 連接數(shù)據(jù)庫(kù)

using System;
using System.Collections;
using System.Configuration;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Data;
using DBHelper;
using System.Collections.Generic;

public static class DbHelper
{
public static string ConnectionString = "";// my.ConnectionString;
/// <summary>
/// 數(shù)據(jù)庫(kù)連接字符串
/// </summary>
public static string ConnectionStringFormatMysql = "server={0};user id={1};password={2};database={3};port={4}";

// <summary>
// 創(chuàng)建數(shù)據(jù)庫(kù)連接
// </summary>
// <returns></returns>
public static IDbHelper NewHelper(bool openTransaction = false)
{
    return new MySqlHelper(openTransaction, ConnectionString);
}
public static void Init()
{
    ConnectionString = string.Format(ConnectionStringFormatMysql , "localhost" , "root" , "root" , "mysql" , 3306);
}

}

/// <summary>
///MYSQLHelper 的摘要說(shuō)明
/// </summary>
public class MySqlHelper : IDbHelper
{
public void Dispose()
{
Dispose(true);
//.NET Framework 類(lèi)庫(kù)
// GC..::.SuppressFinalize 方法
//請(qǐng)求系統(tǒng)不要調(diào)用指定對(duì)象的終結(jié)器。
GC.SuppressFinalize(this);
}

/// <summary>
/// 虛方法,可供子類(lèi)重寫(xiě)
/// </summary>
/// <param name="disposing"></param>
protected virtual void Dispose(bool disposing)
{
    if (!m_disposed)
    {
        if (disposing)
        {
            // Release managed resources
        }
        // Release unmanaged resources
        m_disposed = true;
    }
}
~MySqlHelper()
{
    Dispose(false);
}
public bool m_disposed;


 #region 成員變量
    /// <summary>
    /// 數(shù)據(jù)庫(kù)連接字符串
    /// </summary>
    public string _connStr ="";// my.ConnectionString;

    /// <summary>
    /// 是否啟用事務(wù)
    /// </summary>
    private bool _isTransaction;

    /// <summary>
    /// 連接使用次數(shù)
    /// </summary>
    private int _useCount;

    /// <summary>
    /// 對(duì)象連接使用次數(shù)
    /// </summary>
    public int UseCount
    {
        get
        {
            return _useCount;
        }
    }
    #endregion

 #region 構(gòu)造函數(shù)
    /// <summary>
    /// 構(gòu)造函數(shù)
    /// </summary>
    /// <param name="openTransaction">是否開(kāi)啟事務(wù)</param>
    public MySqlHelper(bool openTransaction)
    {
        this._isTransaction = openTransaction;
        this._useCount = 0;
    }

    /// <summary>
    /// 構(gòu)造函數(shù)
    /// </summary>
    /// <param name="openTransaction">是否開(kāi)啟事務(wù)</param>
    public MySqlHelper(bool openTransaction, string connStr)
    {
        this._isTransaction = openTransaction;
        _connStr = connStr;
        this._useCount = 0;
    }
    #endregion



    public bool IsTestConnection(string connstring)
    {
        try
        {
            MySqlCommand cmd = new MySqlCommand();
            MySqlConnection conn = new MySqlConnection(connstring);
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            return true;
        }
        catch (Exception)
        {
            throw new Exception("數(shù)據(jù)庫(kù)連接失敗") ;
        }
    }





/// <summary>
///  給定連接的數(shù)據(jù)庫(kù)用假設(shè)參數(shù)執(zhí)行一個(gè)sql命令(不返回?cái)?shù)據(jù)集)
/// </summary>
/// <param name="connectionString">一個(gè)有效的連接字符串</param>
/// <param name="cmdType">命令類(lèi)型(存儲(chǔ)過(guò)程, 文本, 等等)</param>
/// <param name="cmdText">存儲(chǔ)過(guò)程名稱(chēng)或者sql命令語(yǔ)句</param>
/// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param>
/// <returns>執(zhí)行命令所影響的行數(shù)</returns>
public  int ExecuteNonQuery(CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
    MySqlCommand cmd = new MySqlCommand();
    using (MySqlConnection conn = new MySqlConnection(this._connStr))
    {
        try
        {
            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }
        catch (MySqlException ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {
            conn.Close();
        }
    }
}

/// <summary>
/// 用現(xiàn)有的數(shù)據(jù)庫(kù)連接執(zhí)行一個(gè)sql命令(不返回?cái)?shù)據(jù)集)
/// </summary>
/// <param name="connection">一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接</param>
/// <param name="cmdType">命令類(lèi)型(存儲(chǔ)過(guò)程, 文本, 等等)</param>
/// <param name="cmdText">存儲(chǔ)過(guò)程名稱(chēng)或者sql命令語(yǔ)句</param>
/// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param>
/// <returns>執(zhí)行命令所影響的行數(shù)</returns>
public int ExecuteNonQuery(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
    MySqlCommand cmd = new MySqlCommand();
    PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
    int val = cmd.ExecuteNonQuery();
    cmd.Parameters.Clear();
    return val;
}

/// <summary>
///使用現(xiàn)有的SQL事務(wù)執(zhí)行一個(gè)sql命令(不返回?cái)?shù)據(jù)集)
/// </summary>
/// <remarks>
///舉例:
///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));
/// </remarks>
/// <param name="trans">一個(gè)現(xiàn)有的事務(wù)</param>
/// <param name="cmdType">命令類(lèi)型(存儲(chǔ)過(guò)程, 文本, 等等)</param>
/// <param name="cmdText">存儲(chǔ)過(guò)程名稱(chēng)或者sql命令語(yǔ)句</param>
/// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param>
/// <returns>執(zhí)行命令所影響的行數(shù)</returns>
public  int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
    MySqlCommand cmd = new MySqlCommand();
    PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
    int val = cmd.ExecuteNonQuery();
    cmd.Parameters.Clear();
    return val;
}

/// <summary>
/// 用執(zhí)行的數(shù)據(jù)庫(kù)連接執(zhí)行一個(gè)返回?cái)?shù)據(jù)集的sql命令
/// </summary>
/// <remarks>
/// 舉例:
///  MySqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connectionString">一個(gè)有效的連接字符串</param>
/// <param name="cmdType">命令類(lèi)型(存儲(chǔ)過(guò)程, 文本, 等等)</param>
/// <param name="cmdText">存儲(chǔ)過(guò)程名稱(chēng)或者sql命令語(yǔ)句</param>
/// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param>
/// <returns>包含結(jié)果的讀取器</returns>
public  MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
    //創(chuàng)建一個(gè)MySqlCommand對(duì)象
    MySqlCommand cmd = new MySqlCommand();
    //創(chuàng)建一個(gè)MySqlConnection對(duì)象
    MySqlConnection conn = new MySqlConnection(connectionString);

    //在這里我們用一個(gè)try/catch結(jié)構(gòu)執(zhí)行sql文本命令/存儲(chǔ)過(guò)程,因?yàn)槿绻@個(gè)方法產(chǎn)生一個(gè)異常我們要關(guān)閉連接委乌,因?yàn)闆](méi)有讀取器存在枣宫,
    //因此commandBehaviour.CloseConnection 就不會(huì)執(zhí)行
    try
    {
        //調(diào)用 PrepareCommand 方法驳庭,對(duì) MySqlCommand 對(duì)象設(shè)置參數(shù)
        PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
        //調(diào)用 MySqlCommand  的 ExecuteReader 方法
        MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        //清除參數(shù)
        cmd.Parameters.Clear();
        return reader;
    }
    catch
    {
        //關(guān)閉連接活尊,拋出異常
        conn.Close();
        throw;
    }
}

/// <summary>
/// 返回DataSet
/// </summary>
/// <param name="connectionString">一個(gè)有效的連接字符串</param>
/// <param name="cmdType">命令類(lèi)型(存儲(chǔ)過(guò)程, 文本, 等等)</param>
/// <param name="cmdText">存儲(chǔ)過(guò)程名稱(chēng)或者sql命令語(yǔ)句</param>
/// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param>
/// <returns></returns>
public  DataSet GetDataSet(CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
    //創(chuàng)建一個(gè)MySqlCommand對(duì)象
    MySqlCommand cmd = new MySqlCommand();
    //創(chuàng)建一個(gè)MySqlConnection對(duì)象
    MySqlConnection conn = new MySqlConnection(this._connStr);
    //在這里我們用一個(gè)try/catch結(jié)構(gòu)執(zhí)行sql文本命令/存儲(chǔ)過(guò)程撼玄,因?yàn)槿绻@個(gè)方法產(chǎn)生一個(gè)異常我們要關(guān)閉連接炬搭,因?yàn)闆](méi)有讀取器存在蜈漓,
    try
    {
        //調(diào)用 PrepareCommand 方法,對(duì) MySqlCommand 對(duì)象設(shè)置參數(shù)
        PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
        //調(diào)用 MySqlCommand  的 ExecuteReader 方法
        MySqlDataAdapter adapter = new MySqlDataAdapter();
        adapter.SelectCommand = cmd;
        DataSet ds = new DataSet();

        adapter.Fill(ds);
        //清除參數(shù)
        cmd.Parameters.Clear();
        conn.Close();
        return ds;
    }
    catch (Exception e)
    {
        throw e;
    }
    finally
    {
        conn.Close();
    }
}


/// <summary>
/// 返回DataDatable
/// </summary>
/// <param name="connectionString">一個(gè)有效的連接字符串</param>
/// <param name="cmdType">命令類(lèi)型(存儲(chǔ)過(guò)程, 文本, 等等)</param>
/// <param name="cmdText">存儲(chǔ)過(guò)程名稱(chēng)或者sql命令語(yǔ)句</param>
/// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param>
/// <returns></returns>
public DataTable GetDataTable(CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
    DataSet ds = GetDataSet(cmdType, cmdText, commandParameters);
    return ds.Tables[0];
}



/// <summary>
/// 用指定的數(shù)據(jù)庫(kù)連接字符串執(zhí)行一個(gè)命令并返回一個(gè)數(shù)據(jù)集的第一列
/// </summary>
/// <remarks>
///例如:
///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));
/// </remarks>
///<param name="connectionString">一個(gè)有效的連接字符串</param>
/// <param name="cmdType">命令類(lèi)型(存儲(chǔ)過(guò)程, 文本, 等等)</param>
/// <param name="cmdText">存儲(chǔ)過(guò)程名稱(chēng)或者sql命令語(yǔ)句</param>
/// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param>
/// <returns>用 Convert.To{Type}把類(lèi)型轉(zhuǎn)換為想要的 </returns>
public  object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
    MySqlCommand cmd = new MySqlCommand();

    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
        object val = cmd.ExecuteScalar();
        cmd.Parameters.Clear();
        return val;
    }
}

/// <summary>
/// 用指定的數(shù)據(jù)庫(kù)連接執(zhí)行一個(gè)命令并返回一個(gè)數(shù)據(jù)集的第一列
/// </summary>
/// <remarks>
/// 例如:
///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connection">一個(gè)存在的數(shù)據(jù)庫(kù)連接</param>
/// <param name="cmdType">命令類(lèi)型(存儲(chǔ)過(guò)程, 文本, 等等)</param>
/// <param name="cmdText">存儲(chǔ)過(guò)程名稱(chēng)或者sql命令語(yǔ)句</param>
/// <param name="commandParameters">執(zhí)行命令所用參數(shù)的集合</param>
/// <returns>用 Convert.To{Type}把類(lèi)型轉(zhuǎn)換為想要的 </returns>
public  object ExecuteScalar(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{

    MySqlCommand cmd = new MySqlCommand();

    PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
    object val = cmd.ExecuteScalar();
    cmd.Parameters.Clear();
    return val;
}


/// <summary>
/// 準(zhǔn)備執(zhí)行一個(gè)命令
/// </summary>
/// <param name="cmd">sql命令</param>
/// <param name="conn">OleDb連接</param>
/// <param name="trans">OleDb事務(wù)</param>
/// <param name="cmdType">命令類(lèi)型例如 存儲(chǔ)過(guò)程或者文本</param>
/// <param name="cmdText">命令文本,例如:Select * from Products</param>
/// <param name="cmdParms">執(zhí)行命令的參數(shù)</param>
private  void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)
{
    if (conn.State != ConnectionState.Open)
        conn.Open();
    cmd.Connection = conn;
    cmd.CommandText = cmdText;

    if (trans != null)
        cmd.Transaction = trans;
    cmd.CommandType = cmdType;
    if (cmdParms != null)
    {
        foreach (MySqlParameter parm in cmdParms)
            cmd.Parameters.Add(parm);
    }
}


/// <summary>
/// 批量執(zhí)行SQL
/// </summary>
/// <param name="SQLStringList"></param>
public  void ExecuteSqlTran(List<string> SQLStringList)
{
    using (MySqlConnection conn = new MySqlConnection(this._connStr))
    {
        MySqlCommand cmd = new MySqlCommand();
        if (conn.State != ConnectionState.Open)
            conn.Open();
        cmd.Connection = conn;
        MySqlTransaction tx = conn.BeginTransaction();
        cmd.Transaction = tx;
        try
        {
            for (int n = 0; n < SQLStringList.Count; n++)
            {
                string strsql = SQLStringList[n].ToString();
                if (strsql.Trim().Length > 1)
                {
                    cmd.CommandText = strsql;
                    cmd.ExecuteNonQuery();
                }
            }
            tx.Commit();
        }
        catch (Exception E)
        {
            tx.Rollback();
            throw new Exception(E.Message);
        }
        finally
        {
            conn.Close();
        }
    }
}

}

/// <summary>
/// 數(shù)據(jù)庫(kù)輔助類(lèi)接口
/// </summary>
public interface IDbHelper : IDisposable
{

bool IsTestConnection(string connstring);

int ExecuteNonQuery(CommandType cmdType , string cmdText , params MySqlParameter [] commandParameters);

int ExecuteNonQuery(MySqlConnection connection , CommandType cmdType , string cmdText , params MySqlParameter [] commandParameters);

int ExecuteNonQuery(MySqlTransaction trans , CommandType cmdType , string cmdText , params MySqlParameter [] commandParameters);

MySqlDataReader ExecuteReader(string connectionString , CommandType cmdType , string cmdText , params MySqlParameter [] commandParameters);

DataSet GetDataSet(CommandType cmdType , string cmdText , params MySqlParameter [] commandParameters);

DataTable GetDataTable(CommandType cmdType , string cmdText , params MySqlParameter [] commandParameters);

object ExecuteScalar(string connectionString , CommandType cmdType , string cmdText , params MySqlParameter [] commandParameters);

object ExecuteScalar(MySqlConnection connection , CommandType cmdType , string cmdText , params MySqlParameter [] commandParameters);
/// <summary>
/// 批量執(zhí)行SQL語(yǔ)句
/// </summary>
/// <param name="SQLStringList"></param>
void ExecuteSqlTran(List<string> SQLStringList);

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宫盔,一起剝皮案震驚了整個(gè)濱河市融虽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌灼芭,老刑警劉巖有额,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異彼绷,居然都是意外死亡巍佑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)寄悯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)萤衰,“玉大人,你說(shuō)我怎么就攤上這事猜旬〈喽埃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵洒擦,是天一觀(guān)的道長(zhǎng)椿争。 經(jīng)常有香客問(wèn)我,道長(zhǎng)熟嫩,這世上最難降的妖魔是什么秦踪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上洋侨,老公的妹妹穿的比我還像新娘舍扰。我一直安慰自己,他們只是感情好希坚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著陵且,像睡著了一般裁僧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慕购,一...
    開(kāi)封第一講書(shū)人閱讀 51,245評(píng)論 1 299
  • 那天聊疲,我揣著相機(jī)與錄音,去河邊找鬼沪悲。 笑死获洲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的殿如。 我是一名探鬼主播贡珊,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涉馁!你這毒婦竟也來(lái)了门岔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤烤送,失蹤者是張志新(化名)和其女友劉穎寒随,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帮坚,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妻往,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了试和。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讯泣。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖灰署,靈堂內(nèi)的尸體忽然破棺而出判帮,到底是詐尸還是另有隱情,我是刑警寧澤溉箕,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布晦墙,位于F島的核電站,受9級(jí)特大地震影響肴茄,放射性物質(zhì)發(fā)生泄漏晌畅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一寡痰、第九天 我趴在偏房一處隱蔽的房頂上張望抗楔。 院中可真熱鬧棋凳,春花似錦、人聲如沸连躏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)入热。三九已至拍棕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勺良,已是汗流浹背绰播。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尚困,地道東北人蠢箩。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像事甜,于是被迫代替她去往敵國(guó)和親谬泌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理讳侨,服務(wù)發(fā)現(xiàn)呵萨,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法跨跨,類(lèi)相關(guān)的語(yǔ)法潮峦,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法勇婴,異常的語(yǔ)法忱嘹,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,625評(píng)論 18 399
  • sql本地?cái)?shù)據(jù)庫(kù) 是在unity3d初學(xué)階段必會(huì)的技能 在練習(xí)自我項(xiàng)目的時(shí)候 時(shí)常用到本地注冊(cè)登入功能 這篇文章...
    Unity與iOS的靈魂小白閱讀 1,514評(píng)論 0 1
  • 路邊,媽媽在我背上使勁打著耕渴,打完我拘悦,打姐姐,邊打邊說(shuō):“你們就是白眼狼橱脸,沒(méi)良心础米,你老對(duì)你們那么好,養(yǎng)大你添诉,這會(huì)你一...
    家有小魔怪閱讀 159評(píng)論 0 1
  • 李安導(dǎo)演曾經(jīng)說(shuō)過(guò):我不教孩子孝順我屁桑,只要他愛(ài)我。中國(guó)自古以來(lái)的所謂“孝順”栏赴。其實(shí)是有一個(gè)不平等的階級(jí)觀(guān)念在里面...
    小卉0閱讀 687評(píng)論 0 2