Member 13076604 Ответов: 1

Как считывать данные из 6-й строки excel в SQL server?


Я хочу импортировать данные из 6-й строки excel. Есть заголовки от 1-й до 5-й строки excel. Когда я импортирую данные, значение равно null, потому что у меня нет никаких данных во 2-й строке excel.

public partial class Excelasp : System.Web.UI.Page
    {

        protected void Upload(object sender, EventArgs e)
        {
            //Upload and save the file
            string excelPath = Server.MapPath("~/Doc/") + 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("PersonId", typeof(int)),
                new DataColumn("Name", typeof(int)),
                new DataColumn("Salary",typeof(decimal)) });

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

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

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


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

excel_con.Открыть();
строка sheet1 = excel_con.GetOleDbSchemaTable (OleDbSchemaGuid.Таблицы, null).Строки[1] ["TABLE_NAME"].Метод toString();
DataTable dtExcelData = новый DataTable();

1 Ответов

Рейтинг:
2

Maciej Los

На основе примера, приведенного на Строки подключения Excel - ConnectionStrings.com[^] (Стандартная альтернатива раздел), вы должны изменить select оператор, определяющий диапазон для захвата данных, например:

SELECT *
FROM [SheetName$A6:D]

или по пропускание[^] первые 5 строк в коде (с использованием Linq):
sqlBulkCopy.WriteToServer(dtExcelData.AsEnumerable().Skip(5));