«Открыт исключительно другим пользователем» при чтении данных из CSV с помощью C # - PullRequest
0 голосов
/ 17 января 2019

Я запускаю приведенный ниже код в решении asp.net 4.5 и выдает ошибку:

Ядро базы данных Microsoft Jet не может открыть файл ''. это уже открыт исключительно другим пользователем, или вам нужно разрешение на просмотреть его данные.

Код следует:

private static string FileConnectionString(string filePath)
{
    return string.Format(WebConfigurationManager.AppSettings["DataFileCSV"].ToString(), filePath);
}

string DataUploadFolder = WebConfigurationManager.AppSettings["DataFileUploadFolder"].ToString();
string filePath = HttpContext.Current.Server.MapPath(DataUploadFolder);

OleDbConnection fileConnection = new OleDbConnection(FileConnectionString(filePath));
try
{
    fileConnection.Open();
    string columnList = "Col1, Col2, Col3, Col4, Col5";
    DataTable fileDataTable = new DataTable();
    OleDbCommand command =  new OleDbCommand(string.Format("SELECT {0} FROM [{1}]",                                                                   
                                             columnList,
                                             FileUploadControl.FileName), 
                                fileConnection);
    OleDbDataAdapter da = new OleDbDataAdapter(command);
    da.Fill(fileDataTable); //Exception occurs here !!
}
catch (Exception ex)
{

}
finally
{
    fileConnection.Close();
}

Web.config:

 <add key="DataFileCSV" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='text;HDR=Yes;FMT=Delimited';" />

Обратите внимание, что файл CSV нигде не открыт. На самом деле ни один файл не открыт, только Visual Studio открыта. Я могу открыть файл, изменить и сохранить его. «Каждый» имеет право «полный контроль» над файлом.

Не могу понять, почему происходит ошибка, не могу найти способ ее исправить. Видел много страниц с этой ошибкой, но до сих пор не удалось решить проблему. Любая помощь будет принята с благодарностью.

Редактировать: В aspx я использую: <asp:FileUpload ID="FileUploadControl" runat="server" Width="400px" />

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Потратив один день на эту проблему, я наконец нашел решение.

Необходимо выполнить два шага:

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

FileUploadControl.SaveAs(filePath + fileName); //This is the line
OleDbConnection fileConnection = new OleDbConnection(FileConnectionString(filePath, fileName));
fileConnection.Open();

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

2- Во временной папке (папке) должен быть NETWORK SERVICE в качестве пользователя.Перейдите в настройки папки -> Безопасность -> Добавить пользователя -> Добавить сетевой сервис с правами чтения и записи.

Тогда вам будет хорошо идти.Спасибо @Bran и @techturtle за то, что вдохновили меня в комментариях.

0 голосов
/ 17 января 2019

Ваша проблема, вероятно, сводится к плохой обработке исключений. Прямо в примере кода вы проглатываете исключения, не регистрируете их содержимое и переходите к фатальным. Любая из них является фатальной ошибкой обработки исключений. И я полагаю, что остальная часть вашего кода имеет аналогичные проблемы.

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

...