asp.net 正由另一个进程,因此该进程无法访问此文件

Z_X_S_ 2012-03-21 10:58:56
private void DaochuEXCEl(DataTable dt)
{
// 根据模板文件创建副本
string filePath = Server.MapPath("~/excel/Fuben.xls");
File.Copy(Server.MapPath("~/excel/demo.xls"), filePath);
// 使用OleDb驱动程序连接到副本
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0;");
using (conn)
{
conn.Open();
foreach (DataRow row in dt.Rows)
{
// 增加记录
OleDbCommand cmd = new OleDbCommand("INSERT INTO [Sheet1$]([serial], [quyu], [name],[addr],[faren],[企业负责人],[质量负责人],[经营方式],[经营范围],[仓库地址],[许可证号],[发证机关],[许可证发证日期],[许可证有效日期],[药品养护人数],[药品验收人数],[质量管理人数],[药品保管人数],[岗位总人数],[在职情况]) VALUES(@serial,@quyu,@name,@addr,@faren,@企业负责人,@质量负责人,@经营方式,@经营范围,@仓库地址,@许可证号,@发证机关,@许可证发证日期,@许可证有效日期,@药品养护人数,@药品验收人数,@质量管理人数,@药品保管人数,@岗位总人数,@在职情况)", conn);
cmd.Parameters.AddWithValue("@serial", row["serial"].ToString());
cmd.Parameters.AddWithValue("@quyu", row["quyu"].ToString());
cmd.Parameters.AddWithValue("@name", row["name"].ToString());
cmd.Parameters.AddWithValue("@addr", row["addr"].ToString());
cmd.Parameters.AddWithValue("@faren", row["faren"].ToString());
cmd.Parameters.AddWithValue("@企业负责人", row["企业负责人"].ToString());
cmd.Parameters.AddWithValue("@质量负责人", row["质量负责人"].ToString());
cmd.Parameters.AddWithValue("@经营方式", row["经营方式"].ToString());
cmd.Parameters.AddWithValue("@经营范围", row["经营范围"].ToString());
cmd.Parameters.AddWithValue("@仓库地址", row["仓库地址"].ToString());
cmd.Parameters.AddWithValue("@许可证号", row["许可证号"].ToString());
cmd.Parameters.AddWithValue("@发证机关", row["发证机关"].ToString());
cmd.Parameters.AddWithValue("@许可证发证日期", row["许可证发证日期"].ToString());
cmd.Parameters.AddWithValue("@许可证有效日期", row["许可证有效日期"].ToString());
cmd.Parameters.AddWithValue("@药品养护人数", row["药品养护人数"].ToString());
cmd.Parameters.AddWithValue("@药品验收人数", row["药品验收人数"].ToString());
cmd.Parameters.AddWithValue("@质量管理人数", row["质量管理人数"].ToString());
cmd.Parameters.AddWithValue("@药品保管人数", row["药品保管人数"].ToString());
cmd.Parameters.AddWithValue("@岗位总人数", row["岗位总人数"].ToString());
cmd.Parameters.AddWithValue("@在职情况", row["在职情况"].ToString());
cmd.ExecuteNonQuery();
}
}
// 输出副本的二进制字节流
Response.ContentType = "application/ms-excel";
Response.AppendHeader("Content-Disposition", "attachment;filename=info.xls");
conn.Close();
conn.Dispose();
Response.BinaryWrite(File.ReadAllBytes(filePath));
// 删除副本
File.Delete(filePath);
} private void DaochuEXCEl(DataTable dt)
{
// 根据模板文件创建副本
string filePath = Server.MapPath("~/excel/Fuben.xls");
File.Copy(Server.MapPath("~/excel/demo.xls"), filePath);
// 使用OleDb驱动程序连接到副本
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0;");
using (conn)
{
conn.Open();
foreach (DataRow row in dt.Rows)
{
// 增加记录
OleDbCommand cmd = new OleDbCommand("INSERT INTO [Sheet1$]([serial], [quyu], [name],[addr],[faren],[企业负责人],[质量负责人],[经营方式],[经营范围],[仓库地址],[许可证号],[发证机关],[许可证发证日期],[许可证有效日期],[药品养护人数],[药品验收人数],[质量管理人数],[药品保管人数],[岗位总人数],[在职情况]) VALUES(@serial,@quyu,@name,@addr,@faren,@企业负责人,@质量负责人,@经营方式,@经营范围,@仓库地址,@许可证号,@发证机关,@许可证发证日期,@许可证有效日期,@药品养护人数,@药品验收人数,@质量管理人数,@药品保管人数,@岗位总人数,@在职情况)", conn);
cmd.Parameters.AddWithValue("@serial", row["serial"].ToString());
cmd.Parameters.AddWithValue("@quyu", row["quyu"].ToString());
cmd.Parameters.AddWithValue("@name", row["name"].ToString());
cmd.Parameters.AddWithValue("@addr", row["addr"].ToString());
cmd.Parameters.AddWithValue("@faren", row["faren"].ToString());
cmd.Parameters.AddWithValue("@企业负责人", row["企业负责人"].ToString());
cmd.Parameters.AddWithValue("@质量负责人", row["质量负责人"].ToString());
cmd.Parameters.AddWithValue("@经营方式", row["经营方式"].ToString());
cmd.Parameters.AddWithValue("@经营范围", row["经营范围"].ToString());
cmd.Parameters.AddWithValue("@仓库地址", row["仓库地址"].ToString());
cmd.Parameters.AddWithValue("@许可证号", row["许可证号"].ToString());
cmd.Parameters.AddWithValue("@发证机关", row["发证机关"].ToString());
cmd.Parameters.AddWithValue("@许可证发证日期", row["许可证发证日期"].ToString());
cmd.Parameters.AddWithValue("@许可证有效日期", row["许可证有效日期"].ToString());
cmd.Parameters.AddWithValue("@药品养护人数", row["药品养护人数"].ToString());
cmd.Parameters.AddWithValue("@药品验收人数", row["药品验收人数"].ToString());
cmd.Parameters.AddWithValue("@质量管理人数", row["质量管理人数"].ToString());
cmd.Parameters.AddWithValue("@药品保管人数", row["药品保管人数"].ToString());
cmd.Parameters.AddWithValue("@岗位总人数", row["岗位总人数"].ToString());
cmd.Parameters.AddWithValue("@在职情况", row["在职情况"].ToString());
cmd.ExecuteNonQuery();
}
}
// 输出副本的二进制字节流
Response.ContentType = "application/ms-excel";
Response.AppendHeader("Content-Disposition", "attachment;filename=info.xls");
conn.Close();
conn.Dispose();
Response.BinaryWrite(File.ReadAllBytes(filePath));
// 删除副本
File.Delete(filePath);
}
要是datatable数据少的时候,就不报错,要是数据一多就在 Response.BinaryWrite(File.ReadAllBytes(filePath));
这个地方报错“正由另一个进程,因此该进程无法访问此文件”什么情况
...全文
498 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
A小树A 2014-02-18
  • 打赏
  • 举报
回复
把OleDbCommand 也using一下就好了 大家可以试试
A小树A 2013-11-02
  • 打赏
  • 举报
回复
给大家说说啊 我也等答案呢。。。。
whoo529 2012-07-07
  • 打赏
  • 举报
回复
需要断掉这个进程先
sanfanghuang 2012-06-27
  • 打赏
  • 举报
回复
求解决方法,楼主是怎么解决的啊
Z_X_S_ 2012-03-21
  • 打赏
  • 举报
回复
问题解决了
能说话的哑巴 2012-03-21
  • 打赏
  • 举报
回复
呵呵 这个问题我以前做文件上传的时候也遇到过,也不知道是什么原因,等待结果看.......
xuan.ye 2012-03-21
  • 打赏
  • 举报
回复
using (conn)
{}
conn.Close();

这样不会出错吗?有点不理解
jiuhexuan 2012-03-21
  • 打赏
  • 举报
回复
因为每一次对这个页面的请求一个线程,都会执行方法,但操作都是同一个文件。
另外你的副本并没有起到作用,即使操作的是副本也会冲突。
因为可能你的创建和删除都在进行,因为副本名字相同
你可以给每个副本文件的名字加当前操作的标识符,比如累加的操作次数,sessionid,等不重复的,避免多线程操作一个文件的标识
能说话的哑巴 2012-03-21
  • 打赏
  • 举报
回复
怎么解决的?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧