首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与DataTable相比,SqlBulkCopy创建的行数更多

与DataTable相比,SqlBulkCopy创建的行数更多
EN

Stack Overflow用户
提问于 2016-08-11 23:21:12
回答 1查看 147关注 0票数 0

我使用SqlBulkCopy从CSV导入大约66k行。CSV被导入到DataTable中,然后传递到下面的方法中。

它似乎会无限期地将相同的行复制到数据库中(或在到达末尾时重置)。Debug运行了大约30分钟,创建了接近350k的记录,将DataTable中的每一行复制了大约5次。

我可以确认DataTable中的行数是正确的,所以我一定遗漏了什么,有什么想法吗?

注意:我添加s.BatchSize的目的是希望它只导入该数量,但事实并非如此。

代码语言:javascript
复制
  /*
     * StoreImportedData()
     * This method will store all of the imported data from the datatable to the SQL server database.
     * 
     *  
     */

    private Boolean StoreImportedData(DataTable csvFileData)
    {
        try
        {
            using (SqlConnection dbConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            {
                dbConnection.Open();
                using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
                {
                    s.DestinationTableName = "Staging";
                    // Amount of rows to issue in the batch: (currently value is around 60k)
                    s.BatchSize = csvFileData.Rows.Count;
                    s.ColumnMappings.Add("remark", "ReportDate");
                    s.ColumnMappings.Add("ipAddress", "IPAddress");
                    s.ColumnMappings.Add("hostName", "HostName");
                    s.ColumnMappings.Add("macAddress", "MacAddress");
                    s.ColumnMappings.Add("deviceName", "PrinterName");
                    s.ColumnMappings.Add("comment", "CenterCode");
                    s.ColumnMappings.Add("userName", "CustomerCode");
                    s.ColumnMappings.Add("userDisplayName", "CustomerName");
                    s.ColumnMappings.Add("printerBlackTotal", "TPrintBw");
                    s.ColumnMappings.Add("printerColorTotal", "TPrintCol");
                    s.ColumnMappings.Add("copyBlackTotal", "TCopyBw");
                    s.ColumnMappings.Add("copyColorTotal", "TCopyCol");
                    s.ColumnMappings.Add("scanTotal", "TScan");
                    s.ColumnMappings.Add("faxBlackTotal", "TFaxBw");
                    s.WriteToServer(csvFileData);
                }
            }
        }
        catch (Exception e)
        {
            throw new Exception("An error has occured with the import SQL operation: " + e.Message);
        }
        return true;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-08-11 23:24:54

试试这个:

代码语言:javascript
复制
s.WriteToServer(csvFileData.CreateDataReader());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38900368

复制
相关文章

相似问题

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