c# EXCEL 导入到数据库

u010703853 2015-12-16 07:26:56
RT,我在程序debug调试的时候 可以将excel导入到数据库中,可是访问网页的时候,再导入就不行了。
其中 excel为2003 数据库为SQL 2005 服务器为 win XP系统,X64位
代码如下:

protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string fileName = Server.HtmlEncode(FileUpload1.FileName);
string extension = System.IO.Path.GetExtension(fileName);
if ((extension == ".xlsx") || (extension == ".xls"))
{
ExalToSql();
}
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "msg", "<script>alert('请选择需要上传的Excel!!!')</script>");
return;
}
}

private void ExalToSql()
{
string sheet = FileUpload1.FileName.ToString();
string path = Server.MapPath(FileUpload1.FileName);
FileUpload1.PostedFile.SaveAs(path);//保存文件
string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";Extended Properties='Excel 8.0;IMEX=1'";
//建立EXCEL的连接
OleDbConnection objConn = new OleDbConnection(sConnectionString);
int count = 0;//用来记录出错的条数
try
{
string strCom = string.Format("select * from [upload$] ", sheet);
objConn.Open();

OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, objConn);
DataSet ds = new DataSet();
myCommand.Fill(ds, "[upload$]");
DataTable dt = ds.Tables[0];

foreach (DataRow myDrv in dt.Rows)
{
count++;
if (!string.IsNullOrWhiteSpace(myDrv[1].ToString().Trim()))
{
/////// 先判断一下 是否已经上传过该笔数据
string XXX = "0";
string sqlXXX = " select COUNT(*) TOT from plate_issue_upload WHERE UP_SCORD=" + myDrv[1].ToString().Trim() + " AND UP_SORD=" + myDrv[2].ToString().Trim() + " AND " +
" UP_LINE=" + myDrv[3].ToString().Trim() + " AND UP_MORD='" + myDrv[4].ToString().Trim() + "' AND UP_MPROD='" + myDrv[5].ToString().Trim() + "' AND " +
" UP_QTY=" + myDrv[6].ToString().Trim() + " AND UP_MWHS='" + myDrv[7].ToString().Trim() + "' AND UP_MLLOC='" + myDrv[8].ToString().Trim() + "'";
SqlDataReader myreader;
myreader = SQL.GetMDCSQL(sqlXXX);
while (myreader.Read())
{
XXX = myreader["TOT"].ToString(); //0表示没有上传过该笔数据 1 表示已经上传过该笔记录
}
myreader.Close();
if (XXX == "0")
{
string sql = @"insert into plate_issue_upload (up_time,up_scord,up_sord,up_line,up_mord,up_mprod,up_qty,up_mwhs,up_mlloc,up_flag,UP_ISSUE) " +
"values ( GETDATE(), " +
"" + myDrv[1].ToString().Trim() + ", " +
"" + myDrv[2].ToString().Trim() + ", " +
"" + myDrv[3].ToString().Trim() + ", " +
"'" + myDrv[4].ToString().Trim() + "', " +
"'" + myDrv[5].ToString().Trim() + "', " +
"" + myDrv[6].ToString().Trim() + ", " +
"'" + myDrv[7].ToString().Trim() + "', " +
"'" + myDrv[8].ToString().Trim() + "', " +
"'A',0)";
SQL.ExcutesMDCSQL(sql);
}
}
}
}
catch
{
ClientScript.RegisterStartupScript(this.GetType(), "msg", "<script>alert('第" + count.ToString() + "条数据出错,请核对!!!')</script>");
return;
}
finally
{
objConn.Close();//关闭EXCEL的连接
ClientScript.RegisterStartupScript(this.GetType(), "msg", "<script>alert('上传成功!!!')</script>");
}
}
...全文
218 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 11 楼 From_TaiWan 的回复:
同时,你程序里也注解掉try catch,让问题暴露。Exception不如去掉try catch来的直接
谢谢你,启发了我,我把try catch去掉了,然后运行程序,提示的错误为:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。 最后的我的解决办法为:在对应的 IIS 应用程序池中,“设置应用程序池默认属性”/“常规”/”启用32位应用程序” 设置为true即可!!! (服务器为X64位 ,当时默认32位为false)
秋的红果实 2015-12-17
  • 打赏
  • 举报
回复
我猜想,你应该将excel文件放到服务器(放站点文件的那台计算机)里相应的目录下 你在你本机debug时,站点和excel都在你本机,发布网站后,就不同了,网页文件在服务器,而excel还在你的电脑
  • 打赏
  • 举报
回复
引用 6 楼 From_TaiWan 的回复:
服务端安装excel了吗 对于xlsx,驱动是Provider=Microsoft.ACE.OLEDB.12.0;,分情况处理
安装了excel 2003
  • 打赏
  • 举报
回复
引用 7 楼 From_TaiWan 的回复:
还有,你是上传excel后,马上导入数据库,想办法能有个间隔,上传文件毕竟需要时间,进程有可能超时而终止
Thread.Sleep(8000); 我延时的8秒 还是同样的问题。调试的时候,可以上传到数据库,可是在访问服务器web上 还是不行呀
秋的红果实 2015-12-17
  • 打赏
  • 举报
回复
还有,你是上传excel后,马上导入数据库,想办法能有个间隔,上传文件毕竟需要时间,进程有可能超时而终止
秋的红果实 2015-12-17
  • 打赏
  • 举报
回复
服务端安装excel了吗 对于xlsx,驱动是Provider=Microsoft.ACE.OLEDB.12.0;,分情况处理
  • 打赏
  • 举报
回复
引用 3 楼 andywangguanxi 的回复:
什么叫Debug的时候行,访问网页不行。 你是Web项目,Debug的时候难道不是从网页上上传你的Excel表格进行导入的吗? 你的意思是web项目发布到服务器之后,再上传就无效了吗
恩,是的。web项目发布到服务器之后,再上传就无效了,但是服务器上有上传的excel。
秋的红果实 2015-12-17
  • 打赏
  • 举报
回复
同时,你程序里也注解掉try catch,让问题暴露。Exception不如去掉try catch来的直接
秋的红果实 2015-12-17
  • 打赏
  • 举报
回复
先捕捉错误吧 首先确定文件是不是上传成功 其次IIS里不要指定页面错误转向(在ASP.NET和iis里都操作),让错误暴露出来;同时,浏览器启用错误调试,还有不显示友好错误 再次在你的服务器里,上传一个文件,看会不会成功,服务器里的浏览器,也照上面设置;你可以手动在指定目录放一个excel文件,看能不能成功,这样就可以确定问题在上传,还是在写数据库
EdsionWang 2015-12-16
  • 打赏
  • 举报
回复
什么叫Debug的时候行,访问网页不行。 你是Web项目,Debug的时候难道不是从网页上上传你的Excel表格进行导入的吗? 你的意思是web项目发布到服务器之后,再上传就无效了吗
江南小鱼 2015-12-16
  • 打赏
  • 举报
回复
让catch捕捉下Exception,看报错了么?报什么错
abz7676 2015-12-16
  • 打赏
  • 举报
回复
再导入的时候报什么错?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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