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