我正在尝试在我的asp.net网站上阅读Excel表格。
文件由用户上传,然后我阅读它并在网格视图中显示结果。
当我在Visual Studio环境中运行它时,每件事都可以正常工作。
但是当我在IIS上尝试相同的代码时,它会产生异常Unspecified Error
。
我使用以下代码:
string excelConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+Server.MapPath("~/doc/")+ filepath+";Extended Properties="+ "\"" + "Excel 12.0;HDR=YES;" + "\"";
string query = "select * from [Sheet1$]";
OleDbConnection con = new OleDbConnection(connection);
con.Open(); // Exceptionoccurs here
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.CommandType = CommandType.Text;
OleDbDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
testGrid.DataSource = dt;
testGrid.DataBind();
异常堆栈跟踪:
[OleDbException (0x80004005): Unspecified error]
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +351
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +86
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +31
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +76
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +126
System.Data.OleDb.OleDbConnection.Open() +43
DataBaseSolution.DbSolution.select(String connection, String providername, String query) in F:\vs backup\DataBaseSolution\DataBaseSolution\DbSolution.cs:63
_Default.insertDb(String filepath) in c:\inetpub\wwwroot\test\Default.aspx.cs:82
_Default.checkButton_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\test\Default.aspx.cs:39
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563
请建议我更新代码或我可以执行此任务的任何其他方法。
编辑:提供了堆栈跟踪和带有注释的标记行,其中发生异常
答案 0 :(得分:6)
检查权限 - >安全 要么 检查您的应用程序池 - >高级设置 - >启用32个应用程序 - >真
答案 1 :(得分:2)
首先确保你有一个MS。安装Oledb驱动程序,然后尝试此代码
OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file + ";Extended Properties=Excel 12.0;");
OleDbCommand command = new OleDbCommand("SELECT * FROM [Sheet1$]", connection);
OleDbDataReader dr;
connection.Open();
dr = command.ExecuteReader(CommandBehavior.CloseConnection);
//dbo.Employees
cn.Open();
dt.Load(dr);
cn.Close();
答案 2 :(得分:1)
我曾经和OleDb提供商一起工作过几次,如果你问我这真的太可怕了。在我需要使用Excel文件的上一个项目中,我使用了http://epplus.codeplex.com/这是一个托管库,与OleDb变体相比,它在速度和易用性方面都获得了成功。缺点是它只支持.xslx文件(不是.xsl),但是如果没有它,那么这是一个更好的方法。
答案 3 :(得分:-1)
请检查您的权限和设置。