从CSV中删除逗号,以便正确存储在sql db中

时间:2015-09-09 11:40:04

标签: asp.net csv comma

所以我导入了一个CSV文件,其中导入的地址单元格包含逗号,因此它自然会尝试将每个单独的逗号分隔值分配到行中的新单元格中,当然它会失败。我已经尝试查找解决方案,但没有发现任何与我当前导入方法共存的内容。

CSV导入代码:

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[13] { new DataColumn("ID", typeof(int)),
            new DataColumn("ZooplaURL", typeof(string)),
            new DataColumn("Branch",typeof(string)),
            new DataColumn("HouseNumber",typeof(string)),
            new DataColumn("PropAddress",typeof(string)),
            new DataColumn("Town",typeof(string)),
            new DataColumn("County",typeof(string)),
            new DataColumn("Postcode",typeof(string)),
            new DataColumn("Price",typeof(string)),
            new DataColumn("PropType",typeof(string)),
            new DataColumn("Beds",typeof(string)),
            new DataColumn("PropStatus",typeof(string)),
            new DataColumn("Weeks",typeof(string))  });

            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["TortoiseDBConnectionString"].ConnectionString;
                using (SqlConnection con = new SqlConnection(consString))
                {
                    using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                    {
                        //Set the database table name
                        sqlBulkCopy.DestinationTableName = "dbo.Zoopla";
                        con.Open();
                        sqlBulkCopy.WriteToServer(dt);
                        con.Close();
                    }
                }
            }

CSV如下所示:

38041001,http://www.zoopla.co.uk/for-sale/details/38041001,Connells – Hampton, PE7,,New Lakeside,Peterborough,,PE7 8HU,215000,Detached,4,For Sale,0

38040800,http://www.zoopla.co.uk/for-sale/details/38040800,Peter Lane, PE1,,Rothbart Way,Peterborough,,PE7 8DZ,300000,Detached,5,For Sale,0

38025706,http://www.zoopla.co.uk/for-sale/details/38025706,Connells – Hampton, PE7,,Hornbeam Road,Peterborough,,PE7 8FY,190000,Semi-detached,3,For Sale,0

1 个答案:

答案 0 :(得分:0)

您需要使用某些字符转义CSV文件中的逗号(例如:" \") 然后当你来分割这一行时,使用一个正则表达式,该正则表达式分解每个逗号前面没有转义字符(" \")。

编辑:此正则表达式将检测到任何前面没有" \"的逗号。字符" 的" [^ \]"