Ошибка неверного пути к файлу в asp.net - PullRequest
0 голосов
/ 17 июля 2009

Я использую простой элемент управления FileUpload, чтобы выбрать файл Excel, получить данные и сохранить их в БД. Когда я пытаюсь загрузить файл после выбора файла, я получаю эту ошибку. Но путь к файлу правильный.

«FilePath» не является допустимым путем. Делать уверен, что имя пути пишется правильно и что вы связаны на сервер, на котором файл проживает

Используемый код:

  <add key="OleDbConnection" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= FilePath ;Extended Properties=&quot;Excel 8.0;HDR=Yes;IMEX=1&quot;"/>

     string OleDbConnection = 
         ConfigurationManager.AppSettings["OleDbConnection"].Replace("FilePath",
             fileUpload.PostedFile.FileName).Trim();

       Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
       Excel.Workbooks xlWorkBooks = (Excel.Workbooks)xlApp.Workbooks;
    Excel.Workbook wb = xlWorkBooks._Open(fileUpload.PostedFile.FileName, Type.Missing, false, Type.Missing, "", "", true, Excel.XlPlatform.xlWindows, "\t", true, false, Type.Missing, true);

        string strSheetName = ((Excel.Worksheet)wb.Sheets[1]).Name.ToString();
        xlWorkBooks.Close();
        xlApp.Quit();

        oledbCommand = new OleDbCommand();
        oledbAdapter = new OleDbDataAdapter();

        DataSet dsExcellData = new DataSet();
        oledbConnection = new OleDbConnection(OleDbConnection); 
        oledbConnection.Open();

        oledbCommand.Connection = oledbConnection;
        oledbCommand.CommandText = "Select * from [" + strSheetName + "$]"; 

        oledbAdapter.SelectCommand = oledbCommand;
        oledbAdapter.Fill(dsExcellData);

        return dsExcellData;

Ответы [ 3 ]

1 голос
/ 17 июля 2009

Измените строку на

string OleDbConnection = ConfigurationManager.AppSettings["OleDbConnection"].ToString().Replace("FilePath", Server.MapPath(fileUpload.PostedFile.FileName)).Trim();

Возможно, у вас есть относительный путь, вам нужен физический путь с Server.MapPath

Попробуйте следующий код: я успешно выполнил запрос на листе в размещенной среде, используя вашу идею выше.

private OleDbConnectionStringBuilder BuildXLConnString(string DSource)
{
    OleDbConnectionStringBuilder connBuild = new OleDbConnectionStringBuilder();
    connBuild.Provider = "Microsoft.Jet.OLEDB.4.0";
    connBuild.DataSource = DSource;
    connBuild.Add("Extended Properties", "Excel 8.0;IMEX=1;HDR=Yes;");
    return connBuild;
}
1 голос
/ 17 июля 2009

Вы пытались обернуть путь к файлу в Server.MapPath (FileName)?

Как выглядит ваша строка подключения, если вы отвечаете. Записать ее на страницу?

0 голосов
/ 17 июля 2009

Вам не хватает "использующих" блоков:

var xlApp = new Excel.ApplicationClass();
var xlWorkBooks = (Excel.Workbooks) xlApp.Workbooks;
Excel.Workbook wb = xlWorkBooks._Open(
    fileUpload.PostedFile.FileName, Type.Missing, false,
    Type.Missing, "", "", true, Excel.XlPlatform.xlWindows, "\t",
    true, false, Type.Missing, true);

string strSheetName =
    ((Excel.Worksheet) wb.Sheets[1]).Name.ToString();
xlWorkBooks.Close();
xlApp.Quit();

var dsExcellData = new DataSet();

var oleDbConnectionString =
    ConfigurationManager.AppSettings["OleDbConnection"].Replace(
        "FilePath", fileUpload.PostedFile.FileName).Trim();
var commandText = "Select * from [" + strSheetName + "$]";
using (
    var oledbConnection = new OleDbConnection(oleDbConnectionString)
    )
{
    oledbConnection.Open();
    using (var oledbCommand = new OleDbCommand())
    {
        oledbCommand.Connection = oledbConnection;
        oledbCommand.CommandText = commandText;
        {
            using (var oledbAdapter = new OleDbDataAdapter())
            {
                oledbAdapter.SelectCommand = oledbCommand;
                oledbAdapter.Fill(dsExcellData);
                return dsExcellData;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...