用c#做一个网页,这个网页的主要功能是选择一个TXT文件,将里面的数据载入到SQL数据库里并验证重复性。

TXT文件格式:起始|终止|起始|终止实际上这个文件每两列是一个区间,我要判断这与数据库里面同一个变量的区间是否重叠,且在验证重复前是不可以导入到数据库的。目前的做法是读... TXT文件格式:起始|终止|起始|终止
实际上这个文件每两列是一个区间,我要判断这与数据库里面同一个变量的区间是否重叠,且在验证重复前是不可以导入到数据库的。目前的做法是读出一行用select语句做判断,这个语句写的有点复杂。前面1W的数据库导7000行的文件用了8分钟,但今天导5W的数据导了半小时后页面无法显示。
麻烦精通数据库C#网页的高手指点迷津。
我的意思是数据库里每两列是一个区间,比如(1,100,300,350),TXT文件如果是(2,99,400.450)那么一二列是又重复的数据的
展开
 我来答
余漫轩
推荐于2016-07-16 · TA获得超过176个赞
知道小有建树答主
回答量:129
采纳率:0%
帮助的人:81万
展开全部
我才做了这样一个功能,给你代码:(原理:正则表达式)
/// <summary>
/// 将列表读取到DataTable中
/// </summary>
/// <returns></returns>
private DataTable readText2DataTable(string fileName,int length)
{
DataTable dt = new DataTable();
DateTime times = DateTime.Now;
string Date = times.ToString("yyyyMMdd");
string Time = times.ToString("hh:mm:ss");

if (fileName != "")
{
List<string> fileContent = getList(fileName, length);
//DataTable-设置列
dt.Columns.Add("AB000");//公司代码-Master_T_cocode
dt.Columns.Add("AB001");//储位区代码
dt.Columns.Add("AB002");//材料号
dt.Columns.Add("AB003");//日期-Date
dt.Columns.Add("AB004");//时间-Time
dt.Columns.Add("AB005");//出入别-1
dt.Columns.Add("AB006");//订单单别
dt.Columns.Add("AB007");//订单单号
dt.Columns.Add("AB008");//订单序号
dt.Columns.Add("AB009");//交货总数量
dt.Columns.Add("AB010");//批号-""
dt.Columns.Add("AB011");//周期
dt.Columns.Add("AB012");//状态-Y
dt.Columns.Add("AB013");//交货件数
dt.Columns.Add("AB014");//每箱数量
dt.Columns.Add("AB021");//XUSER-Master_T_empno
dt.Columns.Add("AB022");//XDATE-Date
dt.Columns.Add("AB023");//XTIME-Time
//DataTable-赋值
if(length==5)
for (int i = 0; i <= fileContent.Count / length - 1; i++)
{
DataRow dr = dt.Rows.Add();
string[] sArr_code = fileContent[length * i].Split('-');
string[] sArr_num = fileContent[length * i + 2].Split('-');

dr["AB000"] = Master_T_cocode; //公司代码
dr["AB001"] = fileContent[length * i + 4];//储位区代码
dr["AB002"] = fileContent[length * i + 1];//材料号
dr["AB003"] = Date; //日期
dr["AB004"] = Time; //时间
dr["AB005"] = "1"; //出入别
dr["AB006"] = sArr_code[0]; //订单单别
dr["AB007"] = sArr_code[1]; //订单单号
dr["AB008"] = sArr_code[2]; //订单序号
dr["AB009"] = sArr_num[0]; //交货总数量
dr["AB010"] = ""; //批号
dr["AB011"] = fileContent[length * i + 3];//周期
dr["AB012"] = "Y"; //状态
dr["AB013"] = sArr_num[1]; //交货件数
dr["AB014"] = sArr_num[2]; //每箱数量
dr["AB021"] = Master_T_empno; //XUSER
dr["AB022"] = Date; //XDATE
dr["AB023"] = Time; //XTIME
}
if (length == 7)
for (int i = 0; i <= fileContent.Count / length - 1; i++)
{
DataRow dr = dt.Rows.Add();
string[] sArr_code = fileContent[length * i].Split('-');

dr["AB000"] = Master_T_cocode; //公司代码
dr["AB001"] = fileContent[length * i + 6];//储位区代码
dr["AB002"] = fileContent[length * i + 1];//材料号
dr["AB003"] = Date; //日期
dr["AB004"] = Time; //时间
dr["AB005"] = "1"; //出入别
dr["AB006"] = sArr_code[0]; //订单单别
dr["AB007"] = sArr_code[1]; //订单单号
dr["AB008"] = sArr_code[2]; //订单序号
dr["AB009"] = fileContent[length * i + 2];//交货总数量
dr["AB010"] = ""; //批号
dr["AB011"] = fileContent[length * i + 5];//周期
dr["AB012"] = "Y"; //状态
dr["AB013"] = fileContent[length * i + 3];//交货件数
dr["AB014"] = fileContent[length * i + 4];//每箱数量
dr["AB021"] = Master_T_empno; //XUSER
dr["AB022"] = Date; //XDATE
dr["AB023"] = Time; //XTIME
}
}
else
{
dt = null;
}

return dt;
}
//读取文本中的数据项列表
private List<string> getList(string fileName,int length)
{
List<string> fileContent = new List<string>();
if (fileName != "")
{
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
string s1 = "";
string s2 = "";
Boolean b = false;

StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("GB2312"));
//读取文本内容
int i = 0;
while (sr.Peek() > 0)
{
if (b)
{
s1 = sr.ReadLine().Trim();
if (s1 != "")
{
if (s1 == "X") //X前面的项-去掉
{
if (fileContent.Count > 0)
if (fileContent[i - 1] == s2)
{
fileContent.RemoveAt(fileContent.Count - 1);
b = false;
i--;
}
}
else if (s1 == s2) //相临重复项-无操作
{ }
else
{
if (checkInput(i, s1,length))
{
fileContent.Add(s1);
i++;
}
b = false;
}
}
}
else
{
s2 = sr.ReadLine().Trim();
if (s2 != "")
{
if (s2 == "X") //X前面的项-去掉
{
if (fileContent.Count > 0)
if (fileContent[i - 1] == s1)
{
fileContent.RemoveAt(fileContent.Count - 1);
b = true;
i--;
}
}
else if (s2 == s1) //相临重复项-无操作
{ }
else
{
if (checkInput(i, s2,length))
{
fileContent.Add(s2);
i++;
}
b = true;
}
}
}
}
sr.Close();
}
}
return fileContent;
}
#region 导入验证
/// <summary>
/// 检查输入字符串的格式
/// </summary>
/// <param name="index">对比索引</param>
/// <param name="str">对比字符串</param>
/// <param name="length">条码个数</param>
private Boolean checkInput(int index, string str, int length)
{
index = index % length;
if (length == 5)
{
if (index == 0)
{
return IsStringSplit(str);
}
if (index == 1)
{
return IsStringSplitRound(str);
}
if (index == 2)
{
return IsNumberSplit(str);
}
if (index == 3)
{
return IsNumberString(str);
}
if (index == 4)
{
return IsNumberStringZero(str);
}
return false;
}
if (length == 7)
{
if (index == 0)
{
return IsStringSplit(str);
}
if (index == 1)
{
return IsStringSplitRound(str);
}
if (index == 2)
{
return IsNumberString(str);
}
if (index == 3)
{
return IsNumberString(str);
}
if (index == 4)
{
return IsNumberString(str);
}
if (index == 5)
{
return IsNumberString(str);
}
if (index == 6)
{
return IsNumberStringZero(str);
}
return false;
}
return false;
}
/// <summary>
/// 验证字符串是否只包含数字和分隔符,且可以以字母开头
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private bool IsStringSplit(string str)
{
if (str == null || str == "") return false;
//return Regex.IsMatch(str, "\\b[A-Za-z0-9]{3,4}-[0-9]{8}-[0-9]{4}\\b");
Match mch = Regex.Match(str, "\\b[A-Za-z0-9]{3,4}-[0-9]{8}-[0-9]{4}\\b");
if (mch.Value.Length == str.Length)
return true;
else
return false;
}
/// <summary>
/// 验证字符串是否只包含数字和分隔符,且可以以字母开头
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private bool IsStringSplitRound(string str)
{
if (str == null || str == "") return false;
Match mch = Regex.Match(str, "\\b[A-Za-z0-9]{2,3}-[A-Za-z0-9]+[-[0-9]{1,3}]?\\b");
if (mch.Value.Length == str.Length)
return true;
else
return false;
}
/// <summary>
/// 验证字符串是否只包含数字和分隔符
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private bool IsNumberSplit(string str)
{
if (str == null || str == "") return false;
Match mch = Regex.Match(str, "\\b[1-9][0-9]*-[1-9][0-9]*-[1-9][0-9]*\\b");
if (mch.Value.Length == str.Length)
return true;
else
return false;
}
/// <summary>
/// 验证字符串是否只包含数字
/// </summary>
/// <param name="str">需判断的字符串</param>
/// <returns></returns>
private bool IsNumberString(string str)
{
if (str == null || str == "") return false;
Match mch = Regex.Match(str, "\\b[1-9][0-9]*\\b");
if (mch.Value.Length == str.Length)
return true;
else
return false;
}
/// <summary>
/// 验证字符串是否只包含数字
/// </summary>
/// <param name="str">需判断的字符串</param>
/// <returns></returns>
private bool IsNumberStringZero(string str)
{
if (str == null || str == "") return false;
Match mch = Regex.Match(str, "\\b[0-9]*[1-9][0-9]*\\b");
if (mch.Value.Length == str.Length)
return true;
else
return false;
}
#endregion
百度网友5b07f902e
2011-11-02 · 超过12用户采纳过TA的回答
知道答主
回答量:73
采纳率:100%
帮助的人:26.2万
展开全部
1、先导入TXT到数据库临时表
2、建立一个存储过程,在存储过程里进行判断,把不符合的数据删除
3、把剩余的数据写入正式表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友123f1b31280
2011-11-02
知道答主
回答量:34
采纳率:0%
帮助的人:21.9万
展开全部
截个txt的图和数据库结构图看看(一行也行啊)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风声正乱
2011-11-02 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:174
采纳率:0%
帮助的人:165万
展开全部
WEB上处理这个也难为你了....要判断还非得一行一行比较了...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式