asp.net通过DataSet循环插入数据 我在将Excle中的数据导入到SQL的时候,先通过DataSet作为缓存,然后再与数据库中的2张表中的数据逐条比较,没有则进行插入。但是DataSet中的数据与Excle是一致的,循环能够执行完成,但是不知道为什么数据库中始终只有10多条数据能够正确导入请求大神指点。在三层架构的条件下。网上看了有说是因为对数据库的断开过于频繁,导致数据丢失 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 网上看了有说是因为对数据库的断开过于频繁,导致数据丢失========================不会的,你在保存DataSet时跟踪一下,看看DataSet里到底有多少条记录?另外记录的行状态(即RowState)必须为Added时才插入到数据库 DataSet中的数据跟Excle内的数据时一致的 的确,rowstate的状态是unchanged,那 我该怎么做呢? 那你看看每条记录的行状态是不是Added,还有是不是有些记录不符合数据库结构,从而没插入进去,你把关键代码贴出来看看 for (int i = 0; i < studentCount; i++) { string stuNumber = dr[i]["学生学号"].ToString(); mquery.StuNumber = stuNumber; if (BLL.TeachingClassDetailsManager.Instance.Exists(mquery)) { continue; } else { Model.TeachingClassDetails model = new Model.TeachingClassDetails(); model.TeachingClassDetailsID = DateTime.Now.ToString(); model.StuNumber = stuNumber; model.TeachingClassID = classID; try { BLL.TeachingClassDetailsManager.Instance.Add(model); } catch (Exception ex) { } if (BLL.StudentInfoManager.Instance.Exists(stuNumber)) { continue; } else { stuModel.StuNumber = dr[i]["学生学号"].ToString(); stuModel.ICNumber = dr[i]["身份证号"].ToString(); stuModel.Name = dr[i]["姓名"].ToString(); stuModel.Sex = dr[i]["性别"].ToString(); stuModel.Password = Common.Method.MD5Encryption(dr[i]["学生学号"].ToString()); stuModel.MajorName = dr[i]["专业名称"].ToString(); stuModel.DepartmentName = dr[i]["院校名称"].ToString(); stuModel.ClassName = labClassName.Text.Trim(); stuModel.Memo = dr[i]["备注"].ToString(); BLL.StudentInfoManager.Instance.Add(stuModel); } } } stuModel每次不用new吗? else { stuModel=new Model.StudentInfo(); stuModel.StuNumber = dr[i]["学生学号"].ToString(); stuModel.ICNumber = dr[i]["身份证号"].ToString(); stuModel.Name = dr[i]["姓名"].ToString(); stuModel.Sex = dr[i]["性别"].ToString(); stuModel.Password = Common.Method.MD5Encryption(dr[i]["学生学号"].ToString()); stuModel.MajorName = dr[i]["专业名称"].ToString(); stuModel.DepartmentName = dr[i]["院校名称"].ToString(); stuModel.ClassName = labClassName.Text.Trim(); stuModel.Memo = dr[i]["备注"].ToString(); BLL.StudentInfoManager.Instance.Add(stuModel); } 这个不用NEW吧,我只需要检查数据库中有没有与学号相同的,有就不管,没有就把新的值给前面new好的model,然后提交回数据库吧,这样应该可以吧.... Model.TeachingClassDetails model = new Model.TeachingClassDetails(); model.TeachingClassDetailsID = DateTime.Now.ToString(); model.StuNumber = stuNumber; model.TeachingClassID = classID; try { BLL.TeachingClassDetailsManager.Instance.Add(model); }主要是这里的数据插入不了,只能插入几条。但是循环是完成了的,DateSet里面的数据也是跟Excle一致的 我调试循环的时候,用比较慢的速度,会没有问题,数据都能插入,但是直接在for断点,然后一直按下F5的时候,会弹登录超时,会不会是这样的问题? 用事务提交试试,这样情况下 我怎么感觉 是timeout 的问题 我清空过数据库的保证了表TeachingClassDetailsManager没有数据。事务的话。 遍历DataSet拼出sql语句,用事务一次提交,应该可以写进去数据的,试试看,我们做大批量数据导入时10000+都正常导入的! 如果只是往一张表里面提交,不检验是否存在记录可以拼接SQL或者使用SqlBulkCopy但是现在需要验证记录是否存在,而且是对2张表操作.... 问题解决了model.TeachingClassDetailsID = DateTime.Now.ToString();因为在同一时间插入的数据量太大,导致主键重复,所以被丢掉了很多数据。model.TeachingClassDetailsID = Guid.NewGuid().ToString().Replace("-","");这样就可以避免这个问题了 请教DataPager的用法 正则匹配关键字中间部分 通过httphandler获得执行方法参数的问题。 未将对象引用设置到对象的实例 asp.net 操作 iis 建虚拟目录 报“未知名称”错误。 请高手们解答一个数据库连接的问题。 引入WEB serviceS出错是怎么回事? 正则表达式问题 Web服务器中装了IIS5还要装Vs.Net7张碟中哪些东东才能运行Asp.Net文件(XXX.aspx)? 高分难题求解: 在Asp.net中服务端如何接收客户端<确认>窗口信息? 疑问:网站首页数据如何管理 动态生成按钮的doubleClick事件应该怎么写?
========================
不会的,你在保存DataSet时跟踪一下,看看DataSet里到底有多少条记录?另外记录的行状态(即RowState)必须为Added时才插入到数据库
还有是不是有些记录不符合数据库结构,从而没插入进去,你把关键代码贴出来看看
for (int i = 0; i < studentCount; i++)
{
string stuNumber = dr[i]["学生学号"].ToString();
mquery.StuNumber = stuNumber;
if (BLL.TeachingClassDetailsManager.Instance.Exists(mquery))
{
continue;
}
else
{
Model.TeachingClassDetails model = new Model.TeachingClassDetails();
model.TeachingClassDetailsID = DateTime.Now.ToString();
model.StuNumber = stuNumber;
model.TeachingClassID = classID;
try
{
BLL.TeachingClassDetailsManager.Instance.Add(model);
}
catch (Exception ex)
{
}
if (BLL.StudentInfoManager.Instance.Exists(stuNumber))
{
continue;
}
else
{
stuModel.StuNumber = dr[i]["学生学号"].ToString();
stuModel.ICNumber = dr[i]["身份证号"].ToString();
stuModel.Name = dr[i]["姓名"].ToString();
stuModel.Sex = dr[i]["性别"].ToString();
stuModel.Password = Common.Method.MD5Encryption(dr[i]["学生学号"].ToString());
stuModel.MajorName = dr[i]["专业名称"].ToString();
stuModel.DepartmentName = dr[i]["院校名称"].ToString();
stuModel.ClassName = labClassName.Text.Trim();
stuModel.Memo = dr[i]["备注"].ToString(); BLL.StudentInfoManager.Instance.Add(stuModel);
}
}
}
{
stuModel=new Model.StudentInfo();
stuModel.StuNumber = dr[i]["学生学号"].ToString(); stuModel.ICNumber = dr[i]["身份证号"].ToString();
stuModel.Name = dr[i]["姓名"].ToString();
stuModel.Sex = dr[i]["性别"].ToString();
stuModel.Password = Common.Method.MD5Encryption(dr[i]["学生学号"].ToString());
stuModel.MajorName = dr[i]["专业名称"].ToString();
stuModel.DepartmentName = dr[i]["院校名称"].ToString();
stuModel.ClassName = labClassName.Text.Trim();
stuModel.Memo = dr[i]["备注"].ToString(); BLL.StudentInfoManager.Instance.Add(stuModel);
}
Model.TeachingClassDetails model = new Model.TeachingClassDetails();
model.TeachingClassDetailsID = DateTime.Now.ToString();
model.StuNumber = stuNumber;
model.TeachingClassID = classID;
try
{
BLL.TeachingClassDetailsManager.Instance.Add(model);
}主要是这里的数据插入不了,只能插入几条。但是循环是完成了的,DateSet里面的数据也是跟Excle一致的
但是现在需要验证记录是否存在,而且是对2张表操作....
model.TeachingClassDetailsID = DateTime.Now.ToString();
因为在同一时间插入的数据量太大,导致主键重复,所以被丢掉了很多数据。
model.TeachingClassDetailsID = Guid.NewGuid().ToString().Replace("-","");
这样就可以避免这个问题了