封装带类---dataset datareader 用法

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;

/// <summary>
/// 表BMS_Play的封装
/// [提供功能]
///     1.剧集的增、删、改(主要靠本类中的静态方法实现)
///     2.对表中所有字段及其他相关重要信息的封装(主要靠实例化的方法与属性访问)
/// [名词解释]
///     1.剧集系列:由于同一套剧集有多套版本或拷贝,因此把具有相同剧集名的剧集记录分类为同一剧集系列.
///                而剧集系列又分为母带系列及素材带系列.
///     2.SN头3位字母:涉及到BETA带 SN的命名规则.SN命名规则如下:
///                   -SN码格式: ABC-000-0000 (SN头-总集数-当前编号)
///                   -当前编号定义规则见 类的公共方法 AddPlay()                   
/// </summary>
public class Play
{
   
    /// <summary>
    /// 构造函数(向其提供一个无效的ID会引发异常)
    /// </summary>
    /// <param name="play_id"></param>
 public Play(string play_id)
 {
        using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
               
            string sql = "SELECT * FROM BMS_Play WHERE play_id = " + play_id.ToString();
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlDataReader dr = cmd.ExecuteReader();

            dr.Read();

            _play_id = dr["play_id"].ToString();
            _play_name = dr["play_name"].ToString();
            _play_volume = dr["play_volume"].ToString();
            _play_format = dr["play_format"].ToString();
            _play_edition = dr["play_edition"].ToString();
            _play_description = dr["play_description"].ToString();
            _play_type = (PlayType)dr["play_type"];

            dr.Close();
        }
    }

    /// <summary>
    /// 剧集类型,依次为“母带原版”, “母带拷贝”, “素材带原版”, “素材带拷贝”
    /// </summary>
    public enum PlayType { ORIGIN, COPY, MORIGIN, MCOPY };  

    #region 表中各字段
    string _play_id;
    string _play_description;
    string _play_name;
    string _play_volume;
    string _play_format;
    string _play_edition;
    PlayType _play_type;
    #endregion

    #region 类中的公共属性   
   
    /*
     * 基本属性
     */
    public PlayType Play_Type
    {
        get
        {
            return _play_type;
        }
    }
    public string Play_id
    {
        get { return _play_id; }
    } 
    public string Play_name
    {
        get { return _play_name; }
    }   
    public string Play_volume
    {
        get { return _play_volume; }
    }   
    public string Play_format
    {
        get { return _play_format; }
    }   
    public string Play_edition
    {
        get { return _play_edition; }
    }
    public string Play_description
    {
        get { return _play_description; }
    }

    /*
     * 其他属性
     */

    /// <summary>
    /// 获取剧集所拥有的集数
    /// </summary>
    public int CurVolCount
    {
        get
        {
            int count = int.Parse(_play_volume);
            foreach (DataRow dr in Volumes.Tables[0].Rows)
            {
                Volume vol = new Volume(dr["volume_id"].ToString());
                if (vol.State == Tape.TapeState.UNAVAILABLE)
                {
                    count--;
                }
            }
            return count;
        }
    }

    /// <summary>
    /// 获取剧集所有集数据
    /// </summary>
    public DataSet Volumes
    {
        get
        {
            using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
                string sql = "SELECT * FROM BMS_Volume WHERE play_id = " + _play_id;
                SqlDataAdapter adp = new SqlDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                adp.Fill(ds);
                return ds;
            }
        }
    }

    /// <summary>
    /// 剧集借还状态(过时,不建议使用)
    /// </summary>
    public Tape.TapeState State
    {
        get
        {
            Volume vol = new Volume(Volumes.Tables[0].Rows[0]["volume_id"].ToString());
            return vol.State;
        }
    }

    #endregion

    #region 类中的静态属性(封装了关于整张BMS_Play表的一些属性)

    /// <summary>
    /// 获取所有剧集数据
    /// </summary>
    static public DataSet DataSet
    {
        get
        {
            using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
                string sql = "SELECT * FROM BMS_Play";
                SqlDataAdapter adp = new SqlDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                adp.Fill(ds);
                return ds;
            }
        }
    }

    /// <summary>
    /// 获取所有剧集系列名的字符串
    /// </summary>
    static public ArrayList PlayNames
    {
        get
        {
            using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
                string sql = "SELECT DISTINCT play_name FROM BMS_Play";
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlDataReader dr = cmd.ExecuteReader();

                ArrayList names = new ArrayList(50);
                while (dr.Read())
                {
                    names.Add(dr["play_name"].ToString());
                }
                dr.Close();
                return names;

            }
        }
    }

    /// <summary>
    /// 由剧集名检索出该剧集系列的原版剧集ID
    /// </summary>
    /// <param name="name">剧集名</param>
    /// <returns></returns>
    static public int GetIdByName(string name)
    {
        using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            string sql = "SELECT play_id FROM BMS_Play WHERE play_name = @name and play_type = @type";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add("@name", SqlDbType.NVarChar);
            cmd.Parameters["@name"].Value = name;
            cmd.Parameters.Add("@type", SqlDbType.Int);
            cmd.Parameters["@type"].Value = (int)PlayType.ORIGIN;

            if (cmd.ExecuteScalar() != null)
            {
                return (int)cmd.ExecuteScalar();
            }
            else
            {
                return -1;
            }
        }
    }

    #endregion

    #region 公共成员方法
    /// <summary>
    /// 获取剧集的SN头3个字母
    /// </summary>
    /// <returns></returns>
    public string GetSnHeader()
    {
        using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            string sql = "SELECT  TOP (1) BMS_Tape.tape_sn "
            + "FROM  BMS_Tape INNER JOIN "
            + "BMS_Volume ON BMS_Tape.volume_id = BMS_Volume.volume_id INNER JOIN "
            + "BMS_Play ON BMS_Volume.play_id = BMS_Play.play_id "
            + "WHERE     (BMS_Play.play_id =" + _play_id + ")";

            SqlCommand cmd = new SqlCommand(sql, conn);
            string sub = (string)cmd.ExecuteScalar();
            return (sub.Split('-'))[0];
        }
    }

    /// <summary>
    /// 新增一条剧集记录
    /// </summary>
    /// <param name="name">剧集名</param>
    /// <param name="vol">集数</param>
    /// <param name="snHeader">SN头3位字母</param>
    /// <param name="length">每集长度</param>
    /// <param name="format">格式</param>
    /// <param name="edition">版本</param>
    /// <param name="description">描述</param>
    /// <param name="type">剧集系列类型</param>
    /// <param name="source_id">源剧集的ID号,若本身为母带原版则取-1</param>
    /// <returns>返回新添加记录的ID号</returns>
    ///

    /*
     * 剧集添加流程:(本流程的数个数据库操作请改为一项事务,保证数据的完整 !!!!)
     * 1.根据参数 先创建一条剧集记录,并获得其ID(id)
     * 2.根据参数vol,为id创建N条volume的记录,并为每条volume记录创建1条tape的记录    
     */
    static public int Add(string name, string vol,string snHeader, string length,string format, string edition, string description, PlayType type, string source_id)
    {
        
        using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }

           
            //new a play
            string sql = "INSERT INTO BMS_Play (play_name, play_volume, play_format, play_edition, play_description, play_type,source_id) "
                    + "VALUES (@name, @vol, @format, @edition, @desc, @type, @source_id);"
                    + "SELECT CAST(scope_identity() AS int)";

            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add("@name", SqlDbType.NVarChar);
            cmd.Parameters.Add("@vol", SqlDbType.Int);
            cmd.Parameters.Add("@format", SqlDbType.NVarChar);
            cmd.Parameters.Add("@edition", SqlDbType.NVarChar);
            cmd.Parameters.Add("@desc", SqlDbType.NVarChar);
            cmd.Parameters.Add("@type", SqlDbType.Int);
            cmd.Parameters.Add("@source_id", SqlDbType.Int);

            cmd.Parameters["@name"].Value = name;
            cmd.Parameters["@vol"].Value = int.Parse(vol);
            cmd.Parameters["@format"].Value = format;
            cmd.Parameters["@edition"].Value = edition;
            cmd.Parameters["@desc"].Value = description;
            cmd.Parameters["@type"].Value = type;
            cmd.Parameters["@source_id"].Value = int.Parse(source_id);

            int id = int.Parse(cmd.ExecuteScalar().ToString());

            //判断本剧集的系列类型,如果为素材带系列的则仅添加一集不带TAPE的空白VOLUME,函数返回
            if (type == PlayType.MORIGIN || type == PlayType.MCOPY)
            {
                Volume.Add(id.ToString(), snHeader, "请添加描述");
                return id;
            }
           

            //如果剧集为母带系列,则插入相应的volume和tape记录
           
            //获取本PLAY记录下的TAPE SN的后4位数字的起始数
            int startNum = 0;   //sn 起始数
            string query = "SELECT COUNT(*) FROM BMS_Play WHERE play_name = @name and play_volume = @vol";
            cmd.CommandText = query;
            startNum = (int)cmd.ExecuteScalar() - 1;
            startNum *= int.Parse(vol);
          
            //创建volume 及 tape的记录
            for (int i = 1; i <= int.Parse(vol); i++)
            {
                int vol_id = Volume.Add(id.ToString(), "第" + i.ToString() + "集", "请添加描述");
                Tape.Add(vol_id.ToString(), snHeader + "-" + (int.Parse(vol)).ToString("000") + "-" + (startNum + i).ToString("0000"), length, "请添加描述");
            }

            return id;
        }
       
    }

    /// <summary>
    /// 删除一条剧集记录(数据库中的设定为,只要删除某剧集记录,与之相关的记录集如volume, tape等均会被删除)
    /// </summary>
    /// <param name="id">剧集ID</param>
    /// <returns></returns>
    static public bool Erase(string id)
    {
        Play play = new Play(id);
        if (play.State == Tape.TapeState.LOANED)
        {
            return false;
        }
        using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            string sql;
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            sql = "DELETE FROM BMS_Play WHERE play_id = " + id;
            cmd.CommandText = sql;
            cmd.ExecuteNonQuery();
            return true;
        }
    }


    /// <summary>
    /// 获取剧集系列各类型的字符串形式(用于GRIDVIEW数据绑定)
    /// </summary>
    /// <param name="type">剧集系列类型的枚举</param>
    /// <returns></returns>
    static public string GetTypeStr(Play.PlayType type)
    {
        switch (type)
        {
            case PlayType.ORIGIN:
                return "母带";               
            case PlayType.COPY:               
                return "拷贝";
            case PlayType.MORIGIN:
                return "素材带";
            case PlayType.MCOPY:
                return "素材带拷贝";
            default:
                return "未知";
        }
    }

    /// <summary>
    /// 获取所有剧集记录中的某类型的剧集记录集
    /// </summary>
    /// <param name="type"></param>
    /// <returns></returns>
    static public DataTable GetPlayByType(PlayType type)
    {
        using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            string sql = "SELECT * FROM BMS_Play WHERE play_type =" + (int)type;
            SqlDataAdapter adp = new SqlDataAdapter(sql, conn);
            DataTable dt = new DataTable();
            adp.Fill(dt);
            return dt;
           
        }
    }

 


    /// <summary>
    /// 修改某一剧集记录的资料
    /// </summary>
    /// <param name="id"></param>
    /// <param name="name"></param>
    /// <param name="format"></param>
    /// <param name="edition"></param>
    /// <param name="desc"></param>
    /// <returns></returns>
    static public bool Update(string id, string name, string format, string edition, string desc)
    {
        using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }

            string sql = "UPDATE    BMS_Play"
            + " SET play_name =@name,play_format =@format, play_edition =@edition, play_description =@desc"
            +" WHERE play_id = " + id;


            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add("@name", SqlDbType.NVarChar);
            cmd.Parameters.Add("@format", SqlDbType.NVarChar);
            cmd.Parameters.Add("@edition", SqlDbType.NVarChar);
            cmd.Parameters.Add("@desc", SqlDbType.NVarChar);

            cmd.Parameters["@name"].Value = name;
            cmd.Parameters["@format"].Value = format;
            cmd.Parameters["@edition"].Value = edition;
            cmd.Parameters["@desc"].Value = desc;

            if (cmd.ExecuteNonQuery() == 1)
            {
                return true;
            }
            else
            {
                return false;
            }               

        }
    }

 

   /// <summary>
   /// 获取所有剧集系列的记录集
   /// </summary>
   /// <returns></returns>
    static public DataSet GetPlayList()
    {
        using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }

            string sql = "SELECT DISTINCT play_name FROM BMS_Play";
            SqlDataAdapter adp = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            adp.Fill(ds);
            return ds;
           
        }
    }
    #endregion
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章