C#批量添加数据的问题

    最近在考试系统的二期维护中,负责IP的部分。其中涉及到了批量添加IP的问题。

    起初,维护的初衷为是了实现IP与考场的绑定。大家知道,维护的过程就是在优化,在一期中已经能够实现批量添加IP的功能,利用的是循环逐条添加IP。但是存在这样一个问题,就是在批量添加IP之前,需要验证IP是否已经存在。其实验证是非常简单的,关键是验证IP是否存在和添加IP都嵌套在循环中,如果单纯在If逻辑语句中调用查询函数,会导致这样的情况:就是添加多少条记录(假定这几条记录数据库中都存在),就会弹出多少个对话框提示“您添加的IP已经存在!”。这样不符合实际的要求。而且为了使用户体验度提高,要提示出具体哪些IP是已经存在的,以确保用户能够准确识别IP添加成功与否。

    因为批量添加IP是嵌套在一个for循环中,所以每次只能来一条记录,我们的目的是先验证IP是否存在,如果存在则捕获这些存在的IP,不存在的则添加到数据库中。所以起初的代码是这样写的

 for (int i = int.Parse(txtStart4.Text.Trim()); i < int.Parse(txtEnd4.Text.Trim()) + 1; i++)
{
	string strIP = txtStart1.Text.Trim() + "." + txtStart2.Text.Trim() + "." + txtStart3.Text.Trim() + ".";             

	//收集IP信息
	strIP = strIP + i.ToString().Trim();
	string strLike = " IP Like '%" + strIP.ToString().Trim() + "%' and IsNoShow='True'";
	EControlIP.IsNoShow = "True";   //获取是否显示IP
	EControlIP.IsNoAccept = true;   //获取是否进行IP控制
	EControlIP.IP = strIP.ToString().Trim();   //获取IP的值
	EControlIP.College = DropDep.Text.Trim();   //获取学院的值
	EControlIP.Course = DropCourse.Text.Trim();  //获取课程的值
	EControlIP.ExamMainID = DropExam.Text.Trim();  //获取考试的值
	EControlIP.ExamPlaceID = DropExamRoom.Text.Trim();  //获取考场的值
                      
	//添加IP                         
	//判断要添加的IP是否存在
	dtIP = admUserManager.QueryIP(strLike);
	if (dtIP.Rows.Count!=0)
	{                         
		lblShowIP.Text = "";  //清空文本框
		string strRepeatIP;
		strRepeatIP = dtIP.Rows[0]["IP"].ToString().Trim();
		arr.Add(strRepeatIP);
		j = j + 1;
		//在文本框中显示重复的IP
		for (int h = 0; h < arr.Count; h++)
		{                           
			lblShowIP.Text += (string)arr[h] + "\r\n";
                            
		}                                                    
 	}
	//如果要添加的IP存在则提示信息
	else
	{
		 //如果不存在则调用添加IP函数
		flag = admUserManager.AddIp(EControlIP);
		//如果返回值为True则出现提示信息添加成功
		if (flag)
		{
			Response.Write("<script Language='JavaScript'>alert('添加成功!');window.location.href='AdmQueryIP.aspx';</script>");
		}
		//否则提示添加失败
		else
		{
			Response.Write("<script Language='JavaScript'>alert('添加失败!')</script>");
		}
	 } 
}    

    但是问题又出现了,就是如果我批量添加的IP中有部分重复,如果最后一条IP数据库中不存在,那么界面就会直接跳转成“添加成功”,而直接略过了检索重复IP的界面,用户也不会看到哪些IP已经存在不能添加。举个例子,假设数据库中已经存在192.168.24.1——192.168.24.5,但是当我添加192.168.24.1——192.168.24.10的时候,出现的界面就是“添加成功”,而本应该的检索已经存在的IP值就会直接被跳转过去,用户看不到。所以又做了下面的调整。

 for (int i = int.Parse(txtStart4.Text.Trim()); i < int.Parse(txtEnd4.Text.Trim()) + 1; i++)
{
	string strIP = txtStart1.Text.Trim() + "." + txtStart2.Text.Trim() + "." + txtStart3.Text.Trim() + ".";             

	//收集IP信息
	strIP = strIP + i.ToString().Trim();
	string strLike = " IP Like '%" + strIP.ToString().Trim() + "%' and IsNoShow='True'";
	EControlIP.IsNoShow = "True";   //获取是否显示IP
	EControlIP.IsNoAccept = true;   //获取是否进行IP控制
	EControlIP.IP = strIP.ToString().Trim();   //获取IP的值
	EControlIP.College = DropDep.Text.Trim();   //获取学院的值
	EControlIP.Course = DropCourse.Text.Trim();  //获取课程的值
	EControlIP.ExamMainID = DropExam.Text.Trim();  //获取考试的值
	EControlIP.ExamPlaceID = DropExamRoom.Text.Trim();  //获取考场的值
                      
	//添加IP                         
	//判断要添加的IP是否存在
	dtIP = admUserManager.QueryIP(strLike);
	if (dtIP.Rows.Count!=0)
	{                         
		lblShowIP.Text = "";  //清空文本框
		string strRepeatIP;
		strRepeatIP = dtIP.Rows[0]["IP"].ToString().Trim();
		arr.Add(strRepeatIP);
		j = j + 1;		                                                   
 	}
	//如果要添加的IP存在则提示信息
	else
	{
		 //如果不存在则调用添加IP函数
		flag = admUserManager.AddIp(EControlIP);		
	 } 
}  
//如果数组里的长度大于0,证明数组中有重复的IP,则将重复的IP显示在文本框
if (arr.Capacity > 0)
{	
	//在文本框中显示重复的IP
	for (int h = 0; h < arr.Count; h++)
	{
	//出现提示信息提示您添加的IP已存在或部分存在
	MessageBox.Show(this, "您添加的IP已存在或部分存在,已存在的IP显示在界面下方,请您查看!");
	//将重复的IP显示在界面下面文本框中
	lblShowIP.Text += (string)arr[h] + "\r\n";
	//Response.Write("<script Language='JavaScript'>alert('添加失败!')</script>");
	}
}
//返回值为False则证明没有重复存在的IP,则提示信息添加成功!
else
{
	Response.Write("<script Language='JavaScript'>alert('添加成功!');window.location.href='AdmQueryIP.aspx';</script>");
}        

    解决的方案是嵌套一个小循环在验证IP的部分,但是小循环的初始值等定义需要定义在大循环的外部,不然每进行一次大循环小循环就要重新被写一遍,把初始值等定义部分放到大循环外部,就会避免这种问题。与此同时,在整个循环进行结束之后,判断数组的长度,如果数组长度大于0,则证明要添加的IP有部分存在或全部存在,这时候要在界面中显示出来以提示用户。相反如果数组长度等于0,则证明添加的IP没有重复,则提示添加成功。这样就解决了批量添加IP已经存在的问题了

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值