2

asp.net Web サイトで Excel シートを読み込もうとしています。ファイルはユーザーによってアップロードされ、それを読み取って結果をグリッド ビューに表示します。Visual Studio 環境で実行すると、すべて正常に動作します。しかし、IIS で同じコードを試したところ、 Exception が発生し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

コードの更新またはこのタスクを実行できるその他の方法を提案してください。

編集:スタックトレースを提供し、例外が発生するコメント付きの行をマークしました

4

4 に答える 4

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();
于 2012-08-18T06:31:01.250 に答える
1

私は OleDb-provider for Excel を数回使用しましたが、私に言わせれば、それは本当に恐ろしいことです。Excel ファイルを操作する必要があった私の最後のプロジェクトでは、OleDb バリアントと比較して速度と使いやすさの両方で優れたマネージ ライブラリであるhttp://epplus.codeplex.com/を使用しました。欠点は、(.xsl ではなく) .xslx ファイルのみをサポートすることですが、それなしで生活できる場合は、はるかに優れた方法です。

于 2012-08-18T07:01:48.593 に答える
-1

権限と設定を確認してください。

于 2014-05-23T08:14:49.897 に答える