Механизм базы данных Microsoft Office Access не может найти объект

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

Механизм базы данных Microsoft Office Access не смог найти объект "sheet1$". Убедитесь, что объект существует, и что вы правильно написали его имя и путь.

Мой код:

 protected void importdatafromexcel(string filepath)
    {
        string sqltable = "PFDummyExcel";
        string exceldataquery = "select EmployeeId,EmployeeName,Amount from [Sheet1$]";
        string excelconnectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0;Persist Security Info=False";
        string sqlconnectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["HRGold"].ConnectionString;
        SqlConnection con = new SqlConnection(sqlconnectionstring);
        OleDbConnection oledb = new OleDbConnection(excelconnectionstring);
        OleDbCommand oledbcmd = new OleDbCommand(exceldataquery, oledb);
        oledb.Open();
        OleDbDataReader dr = oledbcmd.ExecuteReader();
        SqlBulkCopy bulkcopy = new SqlBulkCopy(sqlconnectionstring);
        bulkcopy.DestinationTableName = sqltable;
        while (dr.Read())
        {
            bulkcopy.WriteToServer(dr);
        }
        oledb.Close();
    }

Пожалуйста, скажите мне, как я решаю это..

2 ответа

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

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

string  filePath = "your file path";

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

OleDbConnection Connection  = new OleDbConnection(excelconnectionstring); 


DataTable activityDataTable = Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

if(activityDataTable != null)
{
    //validate worksheet name.
    var itemsOfWorksheet = new List<SelectListItem>();
    string worksheetName;
    for (int cnt = 0; cnt < activityDataTable.Rows.Count; cnt++)
    {
        worksheetName = activityDataTable.Rows[cnt]["TABLE_NAME"].ToString();

        if (worksheetName.Contains('\''))
        {
            worksheetName = worksheetName.Replace('\'', ' ').Trim();
        }
        if (worksheetName.Trim().EndsWith("$"))
            itemsOfWorksheet.Add(new SelectListItem { Text = worksheetName.TrimEnd('$'), Value = worksheetName });
    }
}

// itemsOfWorksheet : all worksheet name is added in this

так что вы можете использовать itemsOfWorksheet[0] в качестве имени листа вместо "sheet1"

У меня была похожая проблема, я разобрался с

  1. Сохранение файла excel из fileuploader во временную папку внутри папки сайта.
  2. Используя путь к этому файлу в моей строке подключения

Все остальное было таким же, и теперь ошибка: ядро базы данных Microsoft Office Access не может найти объект 'sheet1$'.

Другие вопросы по тегам