功能:
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