paul_vin Ответов: 2

Ошибка при вставке данных листа excel в базу данных


The Microsoft Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.



в следующем коде он выдает ошибку при
excelConnection.Open();


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

Таблица базы данных содержит следующие столбцы
1) Id
2) имя
Обозначение



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace WebApplication5
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnSend_Click(object sender, EventArgs e)
        {
            String strConnection = "Data Source=DESKTOP-HL3PK63;Initial Catalog=Demo;Integrated Security=True";
            //file upload path
            string path = fileuploadExcel.PostedFile.FileName;
            //Create connection string to Excel work book
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False";
            //Create Connection to Excel work book
            OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
            //Create OleDbCommand to fetch data from Excel
            OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Designation] from [Sheet1$]", excelConnection);
            excelConnection.Open();
            OleDbDataReader dReader;
            dReader = cmd.ExecuteReader();
            SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection);
            //Give your Destination table name
            sqlBulk.DestinationTableName = "Excel_table";
            sqlBulk.WriteToServer(dReader);
            excelConnection.Close();
        }
    }
}

2 Ответов

Рейтинг:
2

Richard Deeming

Цитата:
string path = fileuploadExcel.PostedFile.FileName;
string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False";

Ваш код работает на сервере.

То FileName свойство возвращает путь - а иногда и просто имя-файла на клиенте.

Код, запущенный на сервере, имеет нет доступа в файловую систему клиента.

Может быть появиться для работы при отладке кода в Visual Studio. Но это только потому, что сервер и клиент в данном конкретном случае одинаковы.

Вам нужно сохранить опубликованный файл где-нибудь на сервере, а затем использовать путь к серверу для чтения файла:
string excelPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid().ToString("N") + ".xls");

fileuploadExcel.SaveAs(excelPath);

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties=Excel 12.0;Persist Security Info=False";

try
{
    ...
}
finally
{
    System.IO.File.Delete(excelPath);
}


Рейтинг:
1

Michael_Davies

Попробуйте добавить Mode=Read to only open as read only;

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Mode=Read;Extended Properties=Excel 12.0;Persist Security Info=False";


paul_vin

строки excelConnectionString = @"поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=" + путь + ";режим=читать;расширенные свойства=значение Excel 12.0;сохранять сведения о безопасности=false в";

Даже после попытки Mode=Read it giving error
как
Компонент Microsoft Access database engine не может открыть или записать файл ". Он уже открыт исключительно другим пользователем, или вам нужно разрешение на просмотр и запись его данных.

Michael_Davies

Вы уверены, что это excelConnection?Откройте ошибку, затем, поскольку ошибка, по-видимому, связана с базой данных Access, в strConnection нет имени файла, только то, что выглядит как сетевое имя ПК, и ошибка показывает имя файла Как " которое не является именем.