Chriz12 Ответов: 2

Ошибка при получении пути к папке с сервера.mathpath


Привет,
Я использую следующий код для чтения файла excel и сохранения его в базе данных, основываясь на этом примере (Импорт данных из Excel в SQL Server 2008)
string FileName = lblFileName.Text;
string Extension = Path.GetExtension(FileName);
string FolderPath = Server.MapPath(ConfigurationManager.AppSettings["FolderPath"]);
string CommandText = "";

switch (Extension)
{
    case ".xls": //Excel 97-03
        CommandText = "Questionnaire.spx_ImportFromExcel03";
        break;
    case ".xlsx": //Excel 07
        CommandText = "Questionnaire.spx_ImportFromExcel07";
        break;
}

//Read Excel Sheet using Stored Procedure
//And import the data into Database Table
String strConnString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
SqlConnection con = new SqlConnection(strConnString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = CommandText;
cmd.Parameters.Add("@SheetName", SqlDbType.VarChar).Value =  ddlSheets.SelectedItem.Text;
cmd.Parameters.Add("@FilePath", SqlDbType.VarChar).Value = FolderPath + FileName;
cmd.Parameters.Add("@HDR", SqlDbType.VarChar).Value = rbHDR.SelectedItem.Text;
cmd.Parameters.Add("@TableName", SqlDbType.VarChar).Value = txtTable.Text;
cmd.Connection = con;

try
{
    con.Open();
    object count = cmd.ExecuteNonQuery();
}

catch (Exception ex)
{
    lblMessage.Text = ex.Message;
}
finally
{
    con.Close();
    con.Dispose();
}

Я заметил, что ошибка, которую я получаю, заключается в том, что путь к папке не является правильным. При печати файла FolderPath + FileName я получаю следующее:
C:Visual StudioTestTestTestAdminFilesExcel07.xlsx
вместо
C:\Visual Studio\Test\Test\Test\Admin\Files\Excel07.xlsx


Любая помощь будет оценена по достоинству, спасибо.

Что я уже пробовал:

Попробовал добавить руководство по пути, чтобы посмотреть, работает ли оно
string FolderPath = "C:\Visual Studio\Test\Test\Test\Admin\Files\Excel07.xlsx";
так оно и есть.

F-ES Sitecore

Это не связано с вашей проблемой, но это может сработать при разработке на вашем локальном компьютере, но только потому, что клиент и сервер-это одно и то же поле. Когда вы публикуете это на реальном веб-сервере, он не сможет получить доступ к файлам клиента.

Chriz12

Да, я знаю, я просто использовал статический физический путь, чтобы проверить проблему. Я использую сервер.MapPath(ConfigurationManager.AppSettings["FolderPath"]) для получения пути после загрузки файлов со стороны клиента в папку /Files на стороне сервера.

Jinto Jacob

вы пробовали использовать экранирование косой черты или добавление @ с помощью строки like somePath = @"C:\blah\blih\bluh.txt";

Chriz12

Я добавил@, Но это не имеет никакого значения.

Richard MacCutchan

Вам нужно проверить содержимое ваших AppSettings, чтобы увидеть, что находится в FolderPath.

Chriz12

AppSettings FolderPath является правильным, потому что я использую его в другом методе без каких-либо проблем. Моя проблема заключается в том, что по какой-то причине я теряю все "\" при отображении пути.

Richard MacCutchan

Информации недостаточно, чтобы догадаться, что происходит. Вам нужно захватить некоторые отладочные данные в каждой точке, где используется это поле. Начните с захвата его значения перед вызовом сервера.MapPath, а затем выполните все остальные точки, которые он использует или на которые ссылается.

2 Ответов

Рейтинг:
2

CHill60

Вместо использования folderpath+Filename используйте Путь.комбинированный метод[^] например

cmd.Parameters.Add("@FilePath", SqlDbType.VarChar).Value = 
                        Path.Combine(FolderPath,FileName);
Он будет помещен в сепараторы должным образом и только в случае необходимости


Рейтинг:
13

#realJSOP

Я верю Server.MapPath работает только в иерархии папок веб-сайта.

Если ваш клиент загружает файл, который затем импортируется в базу данных, вы должны предоставить папку для этих загруженных файлов клиентов в иерархии папок сайта. В этот момент, MapPath должно сработать так, как вы ожидаете.

В решении для веб-сайта добавьте папку под названием Uploads, а затем добавьте папку в uploads для этого клиента. Измените свой код, чтобы использовать эту папку для хранения/извлечения новых файлов.