NerakSeven Ответов: 2

Как получить имена столбцов не начинается с первой строки с OLEDB


Привет ,
У меня есть этот код, но я импортирую данные только тогда, когда имя столбца начинается в первой строке. Мои имена столбцов начинаются от столбца 2 до строки столбца 6 Как я решил эту проблему? Я знаю, что мне нужен диапазон, но я не знаю кода для этого, я пробую это

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

ataTable dt = new DataTable();
                conString = string.Format(conString, filePath);

                using (OleDbConnection connExcel = new OleDbConnection(conString))
                {
                    using (OleDbCommand cmdExcel = new OleDbCommand())
                    {
                        using (OleDbDataAdapter odaExcel = new OleDbDataAdapter())
                        {
                            cmdExcel.Connection = connExcel;

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

                            // TRY THIS BUT NOT WORKS
                            // string Range = 
                            //cmdExcel.CommandText = "SELECT * From [" + sheetName + "$B6:C10]";
                            //cmdExcel.CommandText = "SELECT * From [" + sheetName + Range +"]";
                            connExcel.Open();
                            cmdExcel.CommandText = "SELECT * From ["+ sheetName +"]"; 
                            
                            odaExcel.SelectCommand = cmdExcel;
                            odaExcel.Fill(dt);
                            connExcel.Close();
                        }
                    }
                }

                conString = ConfigurationManager.ConnectionStrings["Constring"].ConnectionString;
                using (SqlConnection con = new SqlConnection(conString))
                {
                    using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                    {
                        //Set the database table name.
                        sqlBulkCopy.DestinationTableName = "dbo.Tipo_Adquisicion";

                        //[OPTIONAL]: Map the Excel columns with that of the database table
                        sqlBulkCopy.ColumnMappings.Add("CÓDIGO EMPRESA", "Tipo_Adquisicion");
                        sqlBulkCopy.ColumnMappings.Add("PERÍODO INFORMACIÓN", "descripcion");
                       // sqlBulkCopy.ColumnMappings.Add("Country", "Country");

                        con.Open();
                        sqlBulkCopy.WriteToServer(dt);
                        con.Close();
                    }
                }
            }

Maciej Los

Поставщик OleDb может читать заголовок одной строки. Если заголовок содержит больше строк, то эти строки рассматриваются как данные.

2 Ответов

Рейтинг:
2

Maciej Los

Пожалуйста, прочтите мой комментарий к этому вопросу. Вы не можете прочитать (загрузить) многострочный заголовок через поставщика OleDb.

Если вы хотите читать данные с листа, начиная со второй строки, вы должны определить его в SELECT заявление, например:

SELECT * FROM [Sheet1$a2:d]


Для получения более подробной информации, пожалуйста, смотрите: Строки подключения Excel - ConnectionStrings.com[^]

Кроме того, вы можете читать данные Excel с помощью:
- Инструкции OpenXML SDK для[^]
- Библиотека EPPlus [^]


Richard Deeming

Не стал бы a5:d начните с самого начала пятый гребите, а не то второй скандалить? :)

Maciej Los

Да, это должно быть 2 вместо 5.

NerakSeven

Я пытаюсь с этим примером, но не работает :(

Maciej Los

Этот ответ совсем не описателен!

Рейтинг:
0

NerakSeven

Я решил с помощью этого кода ниже :)

cmdExcel.CommandText = "Select * from [" + "4.3" + "$A6:D10]";
                           odaExcel.SelectCommand = cmdExcel;


Maciej Los

Итак, вы сделали именно то, что я сказал.

NerakSeven

да, спасибо!