0

次のコードを使用してデータをロードしようとしています。

string path = System.IO.Path.GetFullPath(uploadExcelFile.PostedFile.FileName);
            string connString = "provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Rizwan shahid\\Desktop\\DataUpload\\Req.xls;Extended Properties=Excel 12.0;";
            OleDbConnection oledbConn = new OleDbConnection(connString);
            try
            {
                oledbConn.Open();
                OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", oledbConn);
                OleDbDataAdapter oleda = new OleDbDataAdapter();
                oleda.SelectCommand = cmd;
                DataSet ds = new DataSet();
                oleda.Fill(ds, "Table");
                return ds.Tables[0];
            }
            catch
            {
                return null;
            }
            finally
            {
                oledbConn.Close();
            }

32 ビット オペレーティング システムで動作していましたが、このコードを 64 ビット OS で実行すると、次のエラーが発生します。

The Microsoft Access database engine could not find the object 'Sheet1$'. Make sure the object exists and that you spell its name and the path name correctly. If 'Sheet1$' is not a local object, check your network connection or contact the server administrator.

管理者モードで VS を実行していますが、Sheet1 をファイル名に置き換えたり、ファイルを C ドライブに配置したりするなど、多くの解決策を見つけましたが、それでも同じエラーが発生します。

4

2 に答える 2

0

これは機能します (「ダミー」パスから始めて、実際のランタイム パスを適用します)。

OleStringBuilder =
        new OleDbConnectionStringBuilder(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';");

OleStringBuilder.DataSource = MapPath(@"~\App_Data\MyExcelWorksheet.xls");
于 2012-08-20T15:25:55.897 に答える
0

ここから Jet の最新バージョンをダウンロードできます

http://www.microsoft.com/en-us/download/search.aspx?q=jet

于 2012-08-20T15:17:04.997 に答える