错误 - 在Parallel.Invoke方法

时间:2016-10-24 13:06:24

标签: c# .net task-parallel-library

我正在尝试使用以下代码导出所有Excel文件。我正在使用不同的参数值调用一个方法。

它给了我一个Sheet()方法的ExecuteNonQuery跟随错误。

  

检测到RaceOnRCWCleanup   已经尝试释放正在使用的RCW。 RCW正在活动线程或另一个线程上使用。尝试释放正在使用的RCW可能会导致损坏或数据丢失。

这项操作可行吗?如果是,请给我一个提示或解决方案,我将在我的代码中尝试

Action[] actionsArray = new Action[]
{
    () => InsertDataToExcelSheet(oleDBcmd,"sheet1",dataTable1),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet2",dataTable2),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet3",dataTable3),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet4",dataTable4),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet5",dataTable5),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet6",dataTable6),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet7",dataTable7),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet8",dataTable8),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet9",dataTable9),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet10",dataTable10),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet11",dataTable11),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet12",dataTable12),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet13",dataTable13),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet14",dataTable14),
    () => InsertDataToExcelSheet(oleDBcmd,"sheet15",dataTable15)
};

Parallel.Invoke(actionsArray);

private static object InsertDataToExcelSheet(OleDbCommand cmd, string sheet, DataTable dt)
{            
    sheet = sheet.Replace(".", "#");
    switch (sheet)
    {
        case "Sheet1":
            Sheet1(cmd, dt, sheet);
            break;
        case "Sheet2":
            Sheet2(cmd, dt, sheet);
            break;
        case "Sheet3":
            Sheet3(cmd, dt, sheet);
            break;

    }
}   

//sheet1,sheet2 ans sheet3 methods are like follows
 private static void Sheet1(OleDbCommand cmd, DataTable dt, string sheet)
{
    int rowNum = 3;
    foreach (DataRowView row in dt)
    {

        string InsertQuery = @"Insert Into [" + sheet + "$A" + rowNum + ":D" + rowNum + "]" +
                            " Values('" + row[0] + "','" + row[1] + "','" + row[2] + "','" +
                                          row[3] + "');";


        cmd.CommandText = InsertQuery;
        cmd.ExecuteNonQuery();
        rowNum++;
    }
}       

1 个答案:

答案 0 :(得分:0)

我想以更快的方式将数据写入excel文件。我现在正在使用 SSIS ,它非常有效。谢谢你的帮助。