Как я могу улучшить производительность dataadapter.fill? - PullRequest
0 голосов
/ 11 января 2020

Я храню данные в DataTable, используя SqlDataAdapter.fill. Затем, возвращая эту таблицу как JSon.

При получении этого JSon в клиентском приложении (Excel), он работает очень медленно.

Любая идея, как я могу улучшить производительность .?

Код API:

 [Authorize]
        [Route("GetRecord")]
        public DataTable Records(DSModel model)
        {
            var table = new DataTable();
            using (var da = new SqlDataAdapter(model.qstring, model.ds))
            {
                da.Fill(table);
                return table;
            }
        }

Код клиента:

    DataTable dt = (DataTable)JsonConvert.DeserializeObject(records, (typeof(DataTable)));
    foreach (DataRow dr in dt.Rows)
    {
        rowcount += 1;
        for (int i = 1; i <= dt.Columns.Count; i++)
        {
            // on the first iteration we add the column headers
            if (rowcount == 3)
            {
                osheet.Cells[2, i] = dt.Columns[i - 1].ColumnName;
            }
            // Filling the excel file 
            osheet.Cells[rowcount, i] = dr[i - 1].ToString();
        }
    }

Для сравнения, если я запрашиваю те же данные из Excel, используя SQL Connection, требуется 2- 3 секунды С кодом выше, это почти 11-14 секунд для конкретной таблицы.

1 Ответ

0 голосов
/ 12 января 2020

Может ли клиент создать соединение с sql сервером? Если это так, вы можете записать результаты запроса в таблицу и вернуть клиенту базу данных и имя таблицы. Затем клиент может загрузить таблицу в Excel.

Для получения дополнительной информации см. Сообщение: Самый быстрый способ загрузки данных с SQL Сервер в Excel

...