已解决问题:从Excel中读数据到数据库,本地VS运行都成功,网站发布后不能读取数据
2013-05-13 01:19
866 查看
问题如标题:先上代码
经过跟踪,发现执行到 conn.Open()时就挂了,以前挂在另一个服务器上没问题,现在换了一个服务器就不行了,在本地VS里面调试也没问题,
--------------------------------------------
解决方法:
一、确认字符串拼写正确,例如:
string FileName = path + DateTime.Now.ToString("yyyyMMddHHmmss") + System.IO.Path.GetFileName(fuload.FileName);
二、
你传的是什么文件?xlsx?服务器是否安装Microsoft.ACE.OLEDB.12.0;和Microsoft.Jet.OLEDB.4.0;驱动
三、
如果服务器是64位系统的IIS7,则是因为Oledb.4.0在64位系统上不支持,在对应的 IIS 应用程序池中,“设置应用程序池默认属性”/“常规”/”启用32位应用程序”,设置为 true;
检查以上各个问题
-------------------------------------------
--------------------------------------------------
给出几个参考链接
C#读取Excel几种方法的体会:
http://developer.51cto.com/art/201302/380622.htm
Excel访问连接字符串中的的HDR=YES; IMEX=1含义
http://blog.csdn.net/ecnuzhangsq/article/details/5907689
Persist Security Info参数的作用:
http://sanduole.blog.51cto.com/101253/21259
CSDN论坛帖子
http://bbs.csdn.net/topics/390221016?page=1#post-394464344
提供与访问Excel表数据的连接字符串
http://www.connectionstrings.com/excel
.net如何读取客户端Excel文件
http://social.msdn.microsoft.com/Forums/zh-CN/2212/thread/a31ed577-7ad9-4f56-b8bc-54ea4aefb0eb/
ActiveXObject 对象
http://msdn.microsoft.com/zh-cn/library/6958xykx(VS.80).aspx
C#操作Excel(读取)
http://www.cnblogs.com/canyan3073/archive/2010/08/20/1804701.html
String path = Server.MapPath("~/UploadExcel/"); string FileName = path + DateTime.Now.ToString("yyyyMMddHHmmss") + fuload.FileName; fuload.PostedFile.SaveAs(FileName); string connstr2003 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; string connstr2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0;HDR=YES\""; OleDbConnection conn; if (fileExtenSion.ToLower() == ".xls") { conn = new OleDbConnection(connstr2003); } else { conn = new OleDbConnection(connstr2007); } conn.Open(); …………
经过跟踪,发现执行到 conn.Open()时就挂了,以前挂在另一个服务器上没问题,现在换了一个服务器就不行了,在本地VS里面调试也没问题,
--------------------------------------------
解决方法:
一、确认字符串拼写正确,例如:
string FileName = path + DateTime.Now.ToString("yyyyMMddHHmmss") + System.IO.Path.GetFileName(fuload.FileName);
二、
你传的是什么文件?xlsx?服务器是否安装Microsoft.ACE.OLEDB.12.0;和Microsoft.Jet.OLEDB.4.0;驱动
三、
如果服务器是64位系统的IIS7,则是因为Oledb.4.0在64位系统上不支持,在对应的 IIS 应用程序池中,“设置应用程序池默认属性”/“常规”/”启用32位应用程序”,设置为 true;
检查以上各个问题
-------------------------------------------
贴上一段运行成功的完整代码 /// <summary> /// 读取Excel文件到DataSet中 /// </summary> /// <param name="filePath">文件路径</param> /// <returns></returns> public static DataSet ToDataTable(string filePath) { string connStr = ""; string fileType = System.IO.Path.GetExtension(fileName); if (string.IsNullOrEmpty(fileType)) return null; if (fileType == ".xls") connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath+ ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; else connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath+ ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; string sql_F = "Select * FROM [{0}]"; OleDbConnection conn = null; OleDbDataAdapter da = null; DataTable dtSheetName= null; DataSet ds = new DataSet(); try { // 初始化连接,并打开 conn = new OleDbConnection(connStr); conn.Open(); // 获取数据源的表定义元数据 string SheetName = ""; dtSheetName= conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); // 初始化适配器 da = new OleDbDataAdapter(); for (int i = 0; i < dtSheetName.Rows.Count; i++) { SheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"]; if (SheetName .Contains("$") && !SheetName .Replace("'", "").EndsWith("$")) { continue; } da.SelectCommand = new OleDbCommand(String.Format(sql_F, SheetName ), conn); DataSet dsItem = new DataSet(); da.Fill(dsItem, tblName); ds.Tables.Add(dsItem.Tables[0].Copy()); } } catch (Exception ex) { } finally { // 关闭连接 if (conn.State == ConnectionState.Open) { conn.Close(); da.Dispose(); conn.Dispose(); } } return ds; }
--------------------------------------------------
给出几个参考链接
C#读取Excel几种方法的体会:
http://developer.51cto.com/art/201302/380622.htm
Excel访问连接字符串中的的HDR=YES; IMEX=1含义
http://blog.csdn.net/ecnuzhangsq/article/details/5907689
Persist Security Info参数的作用:
http://sanduole.blog.51cto.com/101253/21259
CSDN论坛帖子
http://bbs.csdn.net/topics/390221016?page=1#post-394464344
提供与访问Excel表数据的连接字符串
http://www.connectionstrings.com/excel
.net如何读取客户端Excel文件
http://social.msdn.microsoft.com/Forums/zh-CN/2212/thread/a31ed577-7ad9-4f56-b8bc-54ea4aefb0eb/
ActiveXObject 对象
http://msdn.microsoft.com/zh-cn/library/6958xykx(VS.80).aspx
C#操作Excel(读取)
http://www.cnblogs.com/canyan3073/archive/2010/08/20/1804701.html
相关文章推荐
- PHP 从数据库Mysql中读取数据生成excel(解决乱码问题,解决中文变问号问题)
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法
- .net网站关于导入excel,vs可以成功发布网站失败的问题
- PHP 从数据库Mysql中读取数据生成excel(解决乱码问题,解决中文变问号问题)
- 报表解决Excel导入数据不能根据显示值将实际值存入数据库的问题
- 数据库连接方式读取不到Excel数据值的解决方法
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- C# 导入excel数据,解决关闭excel后不能释放资源的问题
- 开发环境下调试没有问题,发布后运行却提示无法更新数据库 *.MDF,因为数据库是只读的解决方法
- 友盟分享到新浪微博,本地有新浪客户端不能分享成功,弹出文件不存在的问题的解决
- 用C#编程从数据库中读取图片数据导进Excel文件的方法(如何从数据库中读取保存的文件,直接打开,中间不保存到本地)
- 解决getHibernateTemplate().save ()不能将数据保存到数据库的问题
- Spring、Hibernate 数据不能插入到数据库问题解决
- 关于asp.net网站发布后,使用登录控件和注册控件时出现“数据库只读,无法进行数据更新”的解决方法
- 解决ADO读取Excel,数据丢失、数据错误、数据乱码问题
- 数据库连接方式读取不到Excel数据值的解决方法
- 关于asp.net MVC发布后,网站无法读取数据库的问题
- VS2012/13本地发布网站详细步骤(可带数据库)
- 网站发布成功上传以后数据不能删除和添加?
- 用C#编程从数据库中读取图片数据导进Excel文件的方法(如何从数据库中读取保存的文件,直接打开,中间不保存到本地)