sagar dindorkar Ответов: 1

Первый столбец не возвращается при чтении листа excel с помощью oledb reader


Привет,
Я столкнулся с проблемой чтения листа excel с помощью oledb reader, первый столбец не возвращается читателем и показывает последнюю головку столбца F14, а столбец был пуст.
но когда я открываю лист excel и дважды щелкаю по границе строки заголовка для автоматической настройки и автоматического повторного размера, сохраняйте excel и снова Читайте, а затем все столбцы возвращаются идеально.

Лист Excel, который я пытаюсь прочитать, который генерирует с помощью php-приложения, и после загрузки этого excel мы ставим на мое приложение для чтения данных из excel, но выше проблема приходит.

Я уже сделал много исследований и разработок, даже я даю ширину в листе excel при создании excel с помощью веб-приложения. Мой код выглядит так

private bool Import_To_Grid(string FilePath, string Extension)
       {
           try
           {
               string conStr = "";
               switch (Extension)
               {
                   case ".xls": //Excel 97-03
                       conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"]
                                .ConnectionString;
                       break;
                   case ".xlsx": //Excel 07 and above
                       conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"]
                                 .ConnectionString;
                       break;
               }
               conStr = String.Format(conStr, FilePath);
               OleDbConnection connExcel = new OleDbConnection(conStr);
               OleDbCommand cmdExcel = new OleDbCommand();
               OleDbDataAdapter oda = new OleDbDataAdapter();

               cmdExcel.Connection = connExcel;

               //Get the name of First Sheet
               connExcel.Open();
               Exceldt = new DataTable();
               DataTable dtExcelSchema;
               dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
               string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
               connExcel.Close();

               //Read Data from First Sheet
               connExcel.Open();
               cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
               oda.SelectCommand = cmdExcel;

               oda.Fill(Exceldt);
               connExcel.Close();

               //Bind Data to GridView
               dgv_showexcel.DataSource = Exceldt;
               BindDataToCmbClass(); //binddata to class for filter
               cmb_userclass.SelectedIndex = 0;
               return true;
           }
           catch (Exception ex) { MessageBox.Show("Its Error" + " " + ex.ToString()); return false; }
       }


конфиг
<add name="Excel03ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';" />
  <add name="Excel07ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';" />



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


Ошибка:
"No value given for one or more required parameters."

   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
   at ImageMetaDataApplier.Home.Import_To_Grid(String FilePath, String Extension) in h:\Meharwan Singh\Desktop Application\ImageMetaCreator\ImageMetaDataApplier\home.cs:line 71


[/РЕДАКТИРОВАТЬ]

Maciej Los

Удалять IMEX=1 и попробуй еще раз.
Новые подробности здесь[^]

sagar dindorkar

Я удалил IMEX=1 все еще сталкиваясь с той же проблемой

Maciej Los

Использование именованных столбцов: SELECT Col1, Col2, Col3, ... Col13 FROM [SheetName].

sagar dindorkar

Привет Мацей,
да, я сделал это таким образом, но через ошибку параметра не прошел достаточно.

Maciej Los

Какая ошибка? Не понимать...

sagar dindorkar

--- содержание было перенесено на вопрос ---
Мацей Лос

sagar dindorkar

--- содержание было перенесено на вопрос ---
Мацей Лос

sagar dindorkar

Спасибо!!!
пожалуйста, помогите мне!!
Я устал от последних дней буксировки, чтобы найти этот вопрос

nilesh sawardekar

Вы не получаете первую строку или первый столбец..?

sagar dindorkar

Первая Колонка

nilesh sawardekar

удивительно что ваш код работает в моем vs

nilesh sawardekar

вам нужен первый заголовок или следующий столбец?

sagar dindorkar

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

sagar dindorkar

Я хочу прочитать все данные, существующие в файле excel

sagar dindorkar

Я не получу первую колонку

CHill60

Когда вы связываете данные, вы устанавливаете значения для свойств DataPropertyName столбцов - может быть, вы пропустили одно из них?

sagar dindorkar

Я использую это, которое включено здесь в запрос всех столбцов
Строка sCommand = @"SELECT [Username],[Password],[Season],[Project_id],[Class],[School],[First_name],[Last_name],[Address],[Postalcode],[Town],[Telephone],[Date_of_birth],[Student_id] из ["+SheetName+"]";

CHill60

Извините - я имел в виду, что в свойствах datagridview вы можете определить, какой столбец из вашего запроса отображается в каждом столбце сетки.

sagar dindorkar

Все столбцы и я проверяю с помощью считывателя данных точки останова не возвращая первый столбец

sagar dindorkar

дайте мне знать одну вещь, если мы создадим файл excel с помощью нашей программы, что первый столбец времени был заблокирован программой или что-то в этом роде??
клево, когда я использую

Выберите * из [рабочего листа$]
затем я получаю данные всех столбцов, но я не получил имя первого столбца и данные этого столбца.
и
Второй случай заключается в том, что когда я открываю файл Excel и дважды щелкаю строку столбца заголовка(любую), то после сохранения этого листа excel снова получаю все данные столбцов идеально

rajah rajah

Привет, Санкар, у тебя есть решение для этой проблемы ? я тоже застрял с той же проблемой. Пожалуйста дайте мне знать если у вас есть решение

1 Ответов

Рейтинг:
1

Maciej Los

Во-первых, вы не предоставили достаточно информации о своей проблеме. Я знаю, Трудно быть более конкретным в том случае, когда в последние несколько дней вы не можете найти причину ошибки. Тем не менее...

Во-вторых, я предлагаю вам ознакомиться с этими статьями:
Доступ к данным Microsoft Office из .Сетевые приложения[^]
Как пользоваться ADO.NET получение и изменение записей в книге Excel с помощью Visual Basic .NET[^] - это VB.NET, но это похоже на C#


А теперь взгляните сюда: Как получить данные из нескольких книг с помощью одного OleDbConnection?[^]
Я использую простейший код для извлечения данных из книги MS Excel.

String sConnString = "Your_Connection_String";
OleDbConnection oConn = new OleDbConnection(sConnString);
oConn.Open();
String sCommand  = @"SELECT <list_of_columns>" + Environment.NewLine +
            "FROM [SheetName$]" ;
OleDbCommand oComm = new OleDbCommand(sCommand, oConn);
OleDbDataReader oRdr = oComm.ExecuteReader();
DataTable oTbl = new DataTable();
oTbl.Load(oRdr);

//now, you can bind data 


Проверить его. Дай мне знать, если это не поможет...


sagar dindorkar

@Maciej Los возникает та же ошибка "нет значения для одного или нескольких обязательных параметров."

Maciej Los

Пожалуйста проверить select заявление. Пользуетесь ли вы [SheetName$] или [SheetName]?
Отладьте программу и покажите мне строку, в которой возникает ошибка.

vamsirays

Большое вам спасибо, вы сэкономили мне время

Maciej Los

Всегда пожалуйста ;)

sagar dindorkar

Я использую рабочий лист$
в этой строке появляется ошибка
И oledbdatareader oRdr = осоммбыл.Метода executereader();

дайте мне знать одну вещь, если мы создадим файл excel с помощью нашей программы, что первый столбец времени был заблокирован программой или что-то в этом роде??
клево, когда я использую

Выберите * из [рабочего листа$]
затем я получаю данные всех столбцов, но я не получил имя первого столбца и данные этого столбца.
и
Второй случай заключается в том, что когда я открываю файл Excel и дважды щелкаю строку столбца заголовка(любую), то после сохранения этого листа excel снова получаю все данные столбцов идеально