首页 > 解决方案 > 我将超过 900 个数据集行的数据发送到 web api 导致超时。使用 Asp.net MVC

问题描述

我想连续发送它除以 100 行。我没有被截肢的知识。C# 这是我用来调用 web api 的代码。

public static string AddPlanningAPI(string planNo, string jobNo, string bDate, string eDate, string progId, string timeGroup, string userId, string stationId)
{
    DataSet ds = dsConfirmBookingAPI(planNo, jobNo, bDate, eDate, progId, timeGroup, userId, stationId);

    RSWSJobOrder.DataJobOrderSoapClient rsWsJobOrder = new RSWSJobOrder.DataJobOrderSoapClient();

    try
    {        
        string iResult = rsWsJobOrder.AddPlaning_Return_JsonString(ds, userId);
        return iResult;
    }
    catch (Exception tmp_ex) { throw tmp_ex; }
}



public string AddPlaning_Return_JsonString(System.Data.DataSet SendDs, string createBy) {
            return base.Channel.AddPlaning_Return_JsonString(SendDs, createBy);
        }



标签: c#asp.net-mvc

解决方案


所以你基本上想批量上传你的行。下面将实现这一点,您将定义每个“批次”的项目数量并将它们上传到这些组中。

每一行的解释请参考代码中的注释。

注意:如果您的 DataTable 需要一个名称(或者您在 中有多个表DataSet),您需要修改以下内容以满足这些要求。

public void BatchUpload(DataSet ds)
    {
        int numberPerBatch = 100;   //  Define the number per batch

        for (int skip = 0; skip < ds.Tables[0].Rows.Count; skip += numberPerBatch)  //  Group the batches
        {
            DataTable batchDT = new DataTable();    //  Create a new DataTable for the batch
            var batch = ds.Tables[0].Rows.Cast<System.Data.DataRow>().Skip(skip).Take(numberPerBatch);  //  LINQ to create the batch off existing set.

            foreach (var row in batch)  //  Import rows to new datatable
            {
                batchDT.Rows.Add(row);
            }

            DataSet batchDS = new DataSet();    //  Create a new DataSet
            batchDS.Tables.Add(batchDT);    //  Add datatable to dataset

            string iResult = rsWsJobOrder.AddPlaning_Return_JsonString(batchDS, userId);    //  send the batch off
        }
    }

推荐阅读