Faran Saleem Ответов: 1

Импорт данных в SQL из excel с помощью ASP.NET пропуская n строк


Привет,

Я использую следующий код для экспорта данных из excel в SQL с помощью ASP.NET.

protected void Upload(object sender, EventArgs e)
    {
        //Upload and save the file
        string excelPath = Server.MapPath("~/Files") + Path.GetFileName(FileUpload1.PostedFile.FileName);
        FileUpload1.SaveAs(excelPath);

        string conString = string.Empty;
        string extension = Path.GetExtension(FileUpload1.PostedFile.FileName);
        switch (extension)
        {
            case ".xls": //Excel 97-03
                conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
                break;
            case ".xlsx": //Excel 07 or higher
                conString = ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString;
                break;
        }
        conString = string.Format(conString, excelPath);
        using (OleDbConnection excel_con = new OleDbConnection(conString))
        {
            excel_con.Open();
            string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString();
            DataTable dtExcelData = new DataTable();

            //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default.
            dtExcelData.Columns.AddRange(new DataColumn[3] 
            { 
                new DataColumn("ID", typeof(string)),
                new DataColumn("Name", typeof(DateTime)),
                new DataColumn("Designation",typeof(DateTime))});

            using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con))
            {
                oda.Fill(dtExcelData);
            }
            excel_con.Close();

            string consString = ConfigurationManager.ConnectionStrings["TestConnection"].ConnectionString;
            using (SqlConnection con = new SqlConnection(consString))
            {
                using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                {
                   
                    //Set the database table name
                    sqlBulkCopy.DestinationTableName = "dbo.Employee";

                    //[OPTIONAL]: Map the Excel columns with that of the database table
                    sqlBulkCopy.ColumnMappings.Add("ID", "ID");
                    sqlBulkCopy.ColumnMappings.Add("Name", "Name");
                    sqlBulkCopy.ColumnMappings.Add("Designation", "Designation");
                    
                    con.Open();
                    sqlBulkCopy.WriteToServer(dtExcelData);
                    con.Close();
                }
            }
        }
    }



Проблема в том, что в моем файле Excel фактические данные начинаются со строки 7.
Таким образом, он не работает, но всякий раз, когда я перемещаю данные в строку 1, он извлекает и загружает данные в SQL просто отлично.
Поэтому я хочу заранее определить в своем коде, что выбрать данные из строки 7 в файле excel.
Пожалуйста, помогите, так как я действительно застрял здесь.


ОБНОВЛЕНИЕ

Кроме того, просто еще один запрос о том, что мое имя заголовка листов SQL и Excel отличается, поэтому, если оба заголовка не совпадают, он не выбирает данные, так что в любом случае я могу сохранить заголовок другим и все равно получить данные?

Спасибо

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

Не так много помощи доступно в интернете по этому поводу

1 Ответов

Рейтинг:
2

Maciej Los

Вам не нужно пропускать 6 строк. Вы можете определить диапазон для получения данных, например:

SELECT * FROM [Sheet1$A7:d]


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