导入CSV文件到数据库不工作的asp

时间:2015-06-11 07:13:37

标签: c# sql asp.net sql-server csv

我正在尝试使用asp将CSV文件导入数据库,此代码来自http://www.aspsnippets.com/Articles/Import-Upload-CSV-file-data-to-SQL-Server-database-in-ASPNet-using-C-and-VBNet.aspx

try
{
    //Upload and save the file
    string csvPath = Server.MapPath("/upload/") + Path.GetFileName(FileUpload2.PostedFile.FileName);
    FileUpload2.SaveAs(csvPath);

    DataTable dt = new DataTable();
    dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
    new DataColumn("Name", typeof(string)),
    new DataColumn("Country",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["TOP2000_IAO4B_GROEP5ConnectionString"].ConnectionString;
    using (SqlConnection con = new SqlConnection(consString))
    {
        using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
        {
            //Set the database table name
            sqlBulkCopy.DestinationTableName = "[Customers]";
            con.Open();
            sqlBulkCopy.WriteToServer(dt);
            con.Close();
        }
    }
}
catch(Exception ex)
{
    Response.Write(ex);
}

然而,当我进入调试模式并且我看看字符串csvData的值是什么时,它是一个空字符串:/我想知道是什么导致这个,因为显然没有这样插入数据

这是CSV

1,John Hammond,United States
2,Mudassar Khan,India
3,Suzanne Mathews,France
4,Robert Schidner,Russia

CSV简单易用,任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

由于您在调试时提到了CsvData,我怀疑问题出在csvData.Split('\n')语句上。

我刚刚修改了那个特定的逻辑,应该适合你。

try
{      
    //Upload and save the file
    string csvPath = Server.MapPath("/upload/") + Path.GetFileName(FileUpload2.PostedFile.FileName);
    FileUpload2.SaveAs(csvPath);

    DataTable dt = new DataTable();
    dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
                                           new DataColumn("Name", typeof(string)),
                                           new DataColumn("Country",typeof(string)) });

    foreach (string row in File.ReadAllLines(csvPath))
    {
        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["TOP2000_IAO4B_GROEP5ConnectionString"].ConnectionString;
    using (SqlConnection con = new SqlConnection(consString))
    {
        using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
        {
            //Set the database table name
            sqlBulkCopy.DestinationTableName = "[Customers]";
            con.Open();
            sqlBulkCopy.WriteToServer(dt);
            con.Close();
        }
    }      

}
catch(Exception ex)
{
    Response.Write(ex); 
}

答案 1 :(得分:0)

我猜您的问题在于拆分CSV数据。 试试这段代码:

 private string[] SplitString(string inputString)
 {
      System.Text.RegularExpressions.RegexOptions options = ((System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace | System.Text.RegularExpressions.RegexOptions.Multiline)
                        | System.Text.RegularExpressions.RegexOptions.IgnoreCase);
     Regex reg = new Regex("(?:^|,)(\\\"(?:[^\\\"]+|\\\"\\\")*\\\"|[^,]*)", options);
     MatchCollection coll = reg.Matches(inputString);
     string[] items = new string[coll.Count];
     int i = 0;
     foreach (Match m in coll)
     {
        items[i++] = m.Groups[0].Value.Trim('"').Trim(',').Trim('"').Trim();
     }
      return items;
 }