SQLBulkcopy - 数据表的标头插入数据库表中

时间:2015-01-29 17:13:11

标签: c# asp.net asp.net-mvc sqlbulkcopy npoi

数据表的标题将作为记录插入表中。我正在递增行号,但仍插入标题。有人能告诉我这是什么问题吗?如果你看到我正在做的行下面的代码.MoveNext。

        XSSFWorkbook xssfwb;
        using (FileStream file = new FileStream(excelPath, FileMode.Open, FileAccess.Read))
        {
            xssfwb = new XSSFWorkbook(file);
        }


        var sheet = xssfwb.GetSheetAt(0); // Change this to the worksheet you want to import.
        var rows = sheet.GetRowEnumerator();

        var dtExcelData = new DataTable();
        var linenumber = 0;
        DataRow dr;


        dtExcelData.Columns.AddRange(new DataColumn[3] { 
        new DataColumn("AccountNumber", typeof(string)),
        new DataColumn("Amount", typeof(decimal)),
        new DataColumn("Sedol",typeof(string)) });



        while (rows.MoveNext())
        {
            IRow row = (XSSFRow)rows.Current;
            linenumber++;

            row.GetCell(4).SetCellType(CellType.Numeric);

            if (row.GetCell(0) != null)
            {
                dr = dtExcelData.NewRow();
                dr["AccountNumber"] = row.GetCell(1).ToString();
                dr["Amount"] = decimal.Parse(row.GetCell(4).ToString());
                //dr["Amount"] = (decimal)row.GetCell(4).NumericCellValue;
                dr["Sedol"] = row.GetCell(11).ToString();


                dtExcelData.Rows.Add(dr);
            }
        }

        //DealingContext.ExecuteCommand("TRUNCATE TABLE [dbDealing].[MESSAGING].[Rebate]");
        DealingContext.ExecuteCommand("TRUNCATE TABLE [dbo].[Testxyz]");




        //Set the database table name
        using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(DealingContext.Connection.ConnectionString))
        {
            //sqlBulkCopy.DestinationTableName = "[dbo].[Testxyz]";
            sqlBulkCopy.DestinationTableName = "[dbo].[Testxyz]";

            //[OPTIONAL]: Map the Excel columns with that of the database table

            sqlBulkCopy.ColumnMappings.Add("AccountNumber", "AccountNumber");
            sqlBulkCopy.ColumnMappings.Add("Amount", "Amount");
            sqlBulkCopy.ColumnMappings.Add("Sedol", "Sedol");
            sqlBulkCopy.WriteToServer(dtExcelData);


        }

1 个答案:

答案 0 :(得分:0)

标题是从rows返回的第一行,只是在导入时跳过该行。

//(snip)
    dtExcelData.Columns.AddRange(new DataColumn[3] { 
    new DataColumn("AccountNumber", typeof(string)),
    new DataColumn("Amount", typeof(decimal)),
    new DataColumn("Sedol",typeof(string)) });


    //Makes the header row the current row.
    rows.MoveNext();

    //Moves to the first row with data and loops till done.
    while (rows.MoveNext())
    {
        IRow row = (XSSFRow)rows.Current;
        linenumber++;

        row.GetCell(4).SetCellType(CellType.Numeric);

        if (row.GetCell(0) != null)
        {
//(snip)