首页 > 其他 > 详细

超长文本分段插入[分段]数据表 与 读取

时间:2021-05-13 13:41:33      阅读:14      评论:0      收藏:0      [点我收藏+]

功能:

1.超长文本 以指定段长 分段 插入数据表

2.从数据表中读取分段

    public class Seg4
    {
        #region 

        /// <summary>
        /// "idx"
        /// </summary>
        string idx = "idx";
        /// <summary>
        /// "ctt"
        /// </summary>
        string ctt = "ctt";
        /// <summary>
        /// "seg"
        /// </summary>
        string seg = "seg";
        /// <summary>
        /// "odr"
        /// </summary>
        string odr = "odr";

        #endregion

        /// <summary>
        /// 
        /// </summary>
        /// <param name="cttCol">隶属内容 列 名称 [且默认列还有: idx,seg,odr]</param>
        public Seg4(string cttCol)
        {
            ctt = cttCol;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idxCol">编号 列 名称</param>
        /// <param name="cttCol">隶属内容索引 列 名称</param>
        /// <param name="segCol">分段文本 列 名称</param>
        /// <param name="odrCol">分段序号 列 名称</param>
        public Seg4(string idxCol, string cttCol, string segCol, string odrCol)
        {
            idx = idxCol;
            ctt = cttCol;
            seg = segCol;
            odr = odrCol;
        }

        #region 

        #region 

        /// <summary>
        /// 执行 记录分段内容 sql
        /// </summary>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="txt">内容</param>
        /// <param name="segTb">分段表名</param>
        /// <param name="segCol">分段列名</param>
        /// <param name="odrCol">排序列名</param>
        /// <param name="segLen">每段字长</param>
        /// <param name="segCnt">分成多少段数</param>
        public static void InsSql(LitMnger litM, Seg4 seg4, int forCttIdx, string txt, string segTb, int segLen, out int segCnt)
        {
            string segSqls = InsSql(seg4, forCttIdx, txt, segTb, segLen, out segCnt);
            litM.Exec(segSqls);
        }
        /// <summary>
        /// 生成 记录分段内容 sql
        /// </summary>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="txt">内容</param>
        /// <param name="segTb">分段表名</param>
        /// <param name="segCol">分段列名</param>
        /// <param name="odrCol">排序列名</param>
        /// <param name="segLen">每段字长</param>
        /// <param name="segCnt">分成多少段数</param>
        public static string InsSql(Seg4 seg4, int forCttIdx, string txt, string segTb, int segLen, out int segCnt)
        {
            segCnt = 0;
            int len = txt.Length;
            string seg;
            string segSqls = "", segSql;
            int idx = 0, idx_;
            while (idx < len)
            {
                idx_ = idx + segLen;
                if (idx_ > len)
                    seg = txt.Substring(idx);
                else
                    seg = txt.Substring(idx, segLen);

                Bas.Sql.ReQuote(ref seg);
                segSql = "insert into " + segTb + "(" + seg4.ctt + "," + seg4.seg + "," + seg4.odr + ") values(" + forCttIdx + ",‘" + seg + "‘," + segCnt + ");";
                segSqls += segSql + c.n;

                idx = idx_;
                segCnt++;
            }
            return segSqls;
        }
        /// <summary>
        /// 读取分段内容
        /// </summary>
        /// <param name="litM"></param>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="segTb">分段表名</param>
        /// <param name="segCol">分段列名</param>
        /// <param name="odrCol">排序列名</param>
        /// <param name="segCnt">分成多少段数</param>
        /// <returns></returns>
        public static string Red(LitMnger litM, Seg4 seg4, int forCttIdx, string segTb, int segCnt)
        {
            string txt = "";
            string sltSql = "select " + seg4.seg + " from " + segTb + " where " + seg4.ctt + "=" + forCttIdx + " order by " + seg4.odr + " asc limit " + segCnt + ";";
            DataTable dt;
            litM.FilDt(sltSql, out dt);
            int row = dt.Rows.Count;
            if (row < 1)
                return txt;

            DataRow dr;
            for (int i = 0; i < row; i++)
            {
                dr = dt.Rows[i];
                txt += dr[seg4.seg] + "";
            }
            return txt;
        }
        /// <summary>
        /// 读取分段内容
        /// </summary>
        /// <param name="litM"></param>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="segTb">分段表名</param>
        /// <param name="segIdxCol">分段表编号列名</param>
        /// <param name="segCol">分段列名</param>
        /// <param name="odrCol">排序列名</param>
        /// <param name="segCnt">分成多少段数</param>
        /// <param name="maxSegIdx">输出: 隶属内容 seg 段最大 segIdx</param>
        /// <returns></returns>
        private static string Red(LitMnger litM, Seg4 seg4, int forCttIdx, string segTb, int segCnt, out int maxSegIdx)
        {
            maxSegIdx = -1;
            string txt = "";
            string sltSql = "select " + seg4.idx + "," + seg4.seg + " from " + segTb + " where " + seg4.ctt + "=" + forCttIdx + " order by " + seg4.odr + " asc limit " + segCnt + ";";
            DataTable dt;
            litM.FilDt(sltSql, out dt);
            int row = dt.Rows.Count;
            if (row < 1)
                return txt;

            DataRow dr = null;
            int i = 0;
            for (; i < row; i++)
            {
                dr = dt.Rows[i];
                txt += dr[seg4.seg] + "";
            }
            maxSegIdx = int.Parse(dr[seg4.idx] + "");
            return txt;
        }
        /// <summary>
        /// 删除分段内容
        /// </summary>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="segTb">分段表名</param>
        /// <returns></returns>
        public static void DelSql(LitMnger litM, Seg4 seg4, int forCttIdx, string segTb)
        {
            string delSql = DelSql(seg4, forCttIdx, segTb);
            litM.Exec(delSql);
        }
        /// <summary>
        /// 删除分段内容
        /// </summary>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="segTb">分段表名</param>
        /// <returns></returns>
        public static string DelSql(Seg4 seg4, int forCttIdx, string segTb)
        {
            string delSql = "delete from " + segTb + " where " + seg4.ctt + "=" + forCttIdx + ";";
            return delSql;
        }
        /// <summary>
        /// 使用情况: 用于 先插入新分段,再删除旧分段内容,所以要以:oldSegMaxIdx 旧分段最大 索引 为删除参考对象
        /// </summary>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="segTb">分段表名</param>
        /// <param name="segIdxCol">分段表 索引列名</param>
        /// <param name="oldSegMaxIdx">分段表 相关 隶属内容 分段最大索引 号</param>
        /// <returns></returns>
        public static void DelSql(LitMnger litM, Seg4 seg4, int forCttIdx, string segTb, int oldSegMaxIdx)
        {
            string delSql = DelSql(seg4, forCttIdx, segTb, oldSegMaxIdx);
            litM.Exec(delSql);
        }
        /// <summary>
        /// 使用情况: 用于 先插入新分段,再删除旧分段内容,所以要以:oldSegMaxIdx 旧分段最大 索引 为删除参考对象
        /// </summary>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="segTb">分段表名</param>
        /// <param name="segIdxCol">分段表 索引列名</param>
        /// <param name="oldSegMaxIdx">分段表 相关 隶属内容 分段最大索引 号</param>
        /// <returns></returns>
        public static string DelSql(Seg4 seg4, int forCttIdx, string segTb, int oldSegMaxIdx)
        {
            oldSegMaxIdx++;
            string delSql = "delete from " + segTb + " where " + seg4.ctt + "=" + forCttIdx + " and " + seg4.idx + "<" + oldSegMaxIdx + ";";
            return delSql;
        }
        /// <summary>
        /// 使用情况: 先删除全部旧的分段,再插入新的分段
        /// </summary>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="newTxt">新内容</param>
        /// <param name="segTb">分段表名</param>
        /// <param name="segCol">分段列名</param>
        /// <param name="odrCol">排序列名</param>
        /// <param name="segLen">每段字长</param>
        /// <param name="segCnt">分成多少段数</param>
        public static void NewSql(LitMnger litM, Seg4 seg4, int forCttIdx, string newTxt, string segTb, int segLen, out int segCnt)
        {
            DelSql(litM, seg4, forCttIdx, segTb);
            InsSql(litM, seg4, forCttIdx, newTxt, segTb, segLen, out segCnt);
        }
        /// <summary>
        /// 使用情况: 先删除全部旧的分段,再插入新的分段
        /// </summary>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="newTxt">新内容</param>
        /// <param name="segTb">分段表名</param>
        /// <param name="segCol">分段列名</param>
        /// <param name="odrCol">排序列名</param>
        /// <param name="segLen">每段字长</param>
        /// <param name="segCnt">输出:分成了多少段数</param>
        public static void NewSql(Seg4 seg4, int forCttIdx, string newTxt, string segTb, int segLen, out int segCnt, out string insNewSegsSql, out string delOldSegSql)
        {
            delOldSegSql = DelSql(seg4, forCttIdx, segTb);
            insNewSegsSql = InsSql(seg4, forCttIdx, newTxt, segTb, segLen, out segCnt);
        }
        /// <summary>
        /// 使用情况: 用于 先插入新分段,再删除旧分段内容,所以要以:oldSegMaxIdx 旧分段最大 索引 为删除参考对象
        /// </summary>
        /// <param name="forCttIdx">隶属内容 编号</param>
        /// <param name="forCttCol">隶属内容 编号列名</param>
        /// <param name="newTxt">新内容</param>
        /// <param name="segTb">分段表名</param>
        /// <param name="segCol">分段列名</param>
        /// <param name="odrCol">排序列名</param>
        /// <param name="segLen">每段字长</param>
        /// <param name="segIdxCol">分段表 索引列名</param>
        /// <param name="oldSegMaxIdx">分段表 相关 隶属内容 分段最大索引 号</param>
        /// <param name="segCnt">输出:分成了多少段数</param>
        public static void NewSql(LitMnger litM, Seg4 seg4, int forCttIdx, string newTxt, string segTb, int segLen, int oldSegMaxIdx, out int segCnt)
        {
            InsSql(litM, seg4, forCttIdx, newTxt, segTb, segLen, out segCnt);
            DelSql(litM, seg4, forCttIdx, segTb, oldSegMaxIdx);
        }
        /// <summary>
        /// 使用情况: 用于 先插入新分段,再删除旧分段内容 [以确保插入没有问题后再删除],所以要以:oldSegMaxIdx 旧分段最大 索引 为删除参考对象
        /// </summary>
        /// <param name="forCttIdx"></param>
        /// <param name="forCttCol"></param>
        /// <param name="newTxt"></param>
        /// <param name="segTb"></param>
        /// <param name="segCol"></param>
        /// <param name="odrCol"></param>
        /// <param name="segLen"></param>
        /// <param name="segIdxCol">分段表 索引列名</param>
        /// <param name="oldSegMaxIdx">分段表 相关 隶属内容 分段最大索引 号</param>
        /// <param name="segCnt">输出:分成了多少段数</param>
        /// <param name="insNewSegsSql"></param>
        /// <param name="delOldSegSql"></param>
        public static void NewSql(Seg4 seg4, int forCttIdx, string newTxt, string segTb, int segLen, int oldSegMaxIdx, out int segCnt, out string insNewSegsSql, out string delOldSegSql)
        {
            insNewSegsSql = InsSql(seg4, forCttIdx, newTxt, segTb, segLen, out segCnt);
            delOldSegSql = DelSql(seg4, forCttIdx, segTb, oldSegMaxIdx);
        }

        #endregion

        #endregion
    }

  

交流 QQ : 2412366909@qq.com

手机号码:177-7499-4428

注:本人使用过程中暂未发现造成存取不正确的问题

超长文本分段插入[分段]数据表 与 读取

原文:https://www.cnblogs.com/grCod/p/14763902.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!