首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跳过用于SqlBulkCopy的第一行SqlBulkCopy

跳过用于SqlBulkCopy的第一行SqlBulkCopy
EN

Stack Overflow用户
提问于 2016-06-15 00:38:55
回答 1查看 2.9K关注 0票数 1

我一直在编写这段代码以创建一个可以通过webapp完成的CSV导入,现在我遇到的是CSV文件的第一行有头,当我进行导入时,第一行不是SqlBulkCopy中的第一行。这是密码。

代码语言:javascript
复制
public partial class CS : System.Web.UI.Page
{
    protected void Upload(object sender, EventArgs e)
    {
        //Upload and save the file
        string csvPath = Server.MapPath("~/Files/") + Path.GetFileName(FileUpload1.PostedFile.FileName);
        FileUpload1.SaveAs(csvPath);

        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[15] { new DataColumn("ORGANIZATION_ID", typeof(int)),
            new DataColumn("INVENTORY_ITEM_ID", typeof(int)),
            new DataColumn("ITEM_CODE", typeof(char)),
            new DataColumn("SUBINVENTORY_CODE", typeof(char)),
            new DataColumn("LOCATOR_ID", typeof(int)),
            new DataColumn("LOCATOR_CODE", typeof(char)),
            new DataColumn("QTY", typeof(int)),
            new DataColumn("FLOWRACK", typeof(char)),
            new DataColumn("LOCATOR_POSITION", typeof(char)),
            new DataColumn("LOCATOR_BIN_LEVEL", typeof(char)),
            new DataColumn("PICKING_ORDER", typeof(int)),
            new DataColumn("ITEM_BOX_QUANTITY", typeof(int)),
            new DataColumn("AVAILABLE_BOX_QTY", typeof(int)),
            new DataColumn("AVAILABLE_MOD_QTY", typeof(int)),
            new DataColumn("CreateTime", typeof(DateTime)) });
        string csvData = File.ReadAllText(csvPath);
        foreach (string row in csvData.Split('\n'))
        {
            if (!string.IsNullOrEmpty(row) )
            {
                dt.Rows.Add();
                int i = 0;
                    foreach (string cell in row.Split(','))
                {
                        dt.Rows[dt.Rows.Count - 1][i] = cell;
                        i++;

                }
            }   
        }

        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.Inventory";
                con.Open();
                sqlBulkCopy.WriteToServer(dt);
                con.Close();
            }
        }
    }
}

现在我得到的错误是

异常详细信息: System.FormatException:输入字符串格式不正确。

源错误:

第46行: row.Split(',‘)线47:{第48行: dt.Rowsdt.Rows.Count -1=单元格;第49行: i++;第50行:

我也在使用server 2008,有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-15 00:42:55

使用File.ReadAllLines()代替File.ReadAllText(csvPath)。这有助于您跳过拆分操作以及第一行;请参见下面的代码:

代码语言:javascript
复制
List<string> csvDataList = File.ReadAllLines(csvPath).Skip(1).ToList();

现在,csvDataList是除第一行之外的行列表,您可以迭代这些行并执行相同的函数:

迭代示例:

代码语言:javascript
复制
 foreach (string Csv in csvDataList)
 {
     DataRow dRow = dt.NewRow();
     int i = 0;
     foreach (string cell in Csv.Split(','))
     {
           if (dRow[i].GetType() == typeof(int))
           {
               int cellValue = 0;
               if (Int32.TryParse(cell, out cellValue))
               {
                  dRow[i++] = cellValue;
               }
            }
            else if (dRow[i].GetType() == typeof(char) && cell.Length == 1)
            {
                dRow[i++] = cell[0];
            }
            else // Which means that the cell is of type int
                dRow[i++] = (int)Char.GetNumericValue(cell[0]);
     }
     dt.Rows.Add(dRow);
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37824334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档