Я пытаюсь добавить файл Excel в свою программу, чтобы работать с данными и экспортировать их. Я использую OleDB для доступа к файлу доступа и пытаюсь передать его в таблицу данных, чтобы я мог просматривать его и работать с ним в winform. Вот код, который я использую:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Windows;
using System.Windows.Forms;
using System.Globalization;
using System.Runtime.Versioning;
using System.Threading;
namespace DataImportServices
{
public class ExcelImport : IDataImport
{
public DataTable ImportData(OpenFileDialog openFile)
{
var dataTable = new DataTable();
string query;
var hasHeaders = false;
var HDR = hasHeaders ? "Yes" : "No";
string connectionString;
if (openFile.FileName.Substring(openFile.FileName.LastIndexOf(".")).ToLower() == ".xlsx")
{
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + openFile.FileName + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
}
else
{
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openFile.FileName + ";Extended Properties=\"Excel 8.0;HDR=" + HDR + ";IMEX=0\"";
}
using (OleDbConnection cn = new OleDbConnection(connectionString))
{
cn.Open();
DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
DataRow schemaRow = schemaTable.Rows[0];
string sheet = schemaRow["TABLE_NAME"].ToString();
if (!sheet.EndsWith("_"))
{
query = "SELECT * FROM [" + openFile.FileName + "]";
using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, cn))
{
dataTable.Locale = CultureInfo.CurrentCulture;
dataAdapter.Fill(dataTable); //The error occurs here with a "" is not an acceptable. If I put a name ie "Data" it says its not an adorecord.
}
}
}
return (dataTable);
}
}
}
Ошибка, которую я получаю, возникает, когда я пытаюсь заполнить таблицу данных с помощью OleDBAdapter (dataAdapter). Он выдает исключение, запрашивающее набор записей ADODB, несмотря на переопределение только для DataTable. Как я могу обойти это? Или я что-то упускаю?
Заранее спасибо.