您的位置:首页 > 运维架构 > 网站架构

已解决问题:从Excel中读数据到数据库,本地VS运行都成功,网站发布后不能读取数据

2013-05-13 01:19 866 查看
问题如标题:先上代码

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐