OleDbDataReader – Нет значения для одного или нескольких требуемых параметров

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

Вот код, который я использую для получения и сохранения целевого файла Excel (с помощью элемента управления FileUpload):

protected void btnGetFile_click(object sender, EventArgs e) { if (this.FileUpload1.HasFile) { this.FileUpload1.SaveAs(Server.MapPath("~/temp/") + this.FileUpload1.FileName); ImportFromExcel(Server.MapPath("~/temp/") + this.FileUpload1.FileName); } } 

И это код, который я использую, чтобы прочитать файл и выполнить объемную вставку:

  public void ImportFromExcel(string excelFilePath) { // Get connection string to database from web.config string strConnDB = ConfigurationManager.ConnectionStrings["strConnectToDB"].ConnectionString; // Connection string for selected Excel file string strConnExcel = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFilePath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; string strExcelBatchQuery = "select LabBatch from [LabBatch$]"; OleDbConnection connExcel = new OleDbConnection(strConnExcel); connExcel.Open(); OleDbCommand cmdExcel = new OleDbCommand(strExcelBatchQuery, connExcel); OleDbDataReader rdrExcel = cmdExcel.ExecuteReader(); SqlBulkCopy bulkCopy = new SqlBulkCopy(strConnDB); bulkCopy.DestinationTableName = "_trasher_excel_batch"; while (rdrExcel.Read()) { bulkCopy.WriteToServer(rdrExcel); } connExcel.Close(); } 

Но когда я пытаюсь выполнить этот код, я получаю сообщение об ошибке «System.Data.OleDb.OleDbException: Нет значения для одного или нескольких требуемых параметров». по этой строке:

 OleDbDataReader rdrExcel = cmdExcel.ExecuteReader(); 

Я просмотрел все, но это, кажется, правильный синтаксис. Даже запись в MSDN говорит, что это правильно.

Таблица существует в моей базе данных, и я дважды проверил таблицы, рабочие листы и имена полей. В электронной таблице нет нулей (несколько ответов на похожие сообщения в Stackoverflow говорят, что это может быть проблемой).

Любая помощь? Благодарю.

Вы указываете этот параметр «[LabBatch $]» в своем SQL, но вы не предоставляете ему значение.

РЕДАКТИРОВАТЬ

 private static void ShowExcelWorksheetNames(OleDbConnection m_connexcel, string Filepath) { try { DataTable ExcelSheets = m_connexcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); foreach (DataRow row in ExcelSheets.Rows) { MessageBox.Show(row.Item("TABLE_NAME")); } } catch (Exception ex) { throw new Exception(ex.Message); } } 

Для тех, кто приходит после:

Синтаксис SQL, который я опубликовал, похоже, работает с SELECT *, но не с SELECT [некоторые поля]. Я понятия не имею, почему, но если у вас такая же проблема, вы можете импортировать все поля в файл Excel и затем написать свой код, чтобы использовать только те данные, которые вам действительно нужны.

Я уверен, что есть лучший ответ, этот обходной путь заставил моего босса с моей спины.

В строке подключения вы устанавливаете «первая строка с именем столбца» (HDR) на «НЕТ», поэтому выбор может работать только с «*».

Пытаться:

 string strConnExcel = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFilePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1';"; 
Давайте будем гением компьютера.