Ошибка при получении пути к папке с сервера.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, а затем выполните все остальные точки, которые он использует или на которые ссылается.