using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Data.Sqlite; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.IO; namespace WinFormNet5.Controllers { public class DataController : Controller { private readonly IWebHostEnvironment _env; private readonly ILogger _logger; public DataController(IWebHostEnvironment env, ILogger logger) { _env = env; _logger = logger; } [Route("/api/data")] public IActionResult Data(string query, int pageIndex = 1, int pageSize = 10, bool fetchAll = false) { var response = new ResponseMessage { PageIndex = pageIndex, PageSize = pageSize }; if (!string.IsNullOrWhiteSpace(query)) { try { var baseDir = this._env.WebRootPath; using var connection = new SqliteConnection($"Data Source={Path.Combine(baseDir, "data.copy.db")}"); connection.Open(); var command = connection.CreateCommand(); command.CommandText = fetchAll ? query : $"{query} limit {pageSize} offset {(pageIndex - 1) * pageSize}"; var results = new List>(); var list = new List(); using (var reader = command.ExecuteReader()) { while (reader.Read()) { var item = new Dictionary(); for (int i = 0; i < reader.FieldCount; i++) { item.Add(reader.GetName(i), reader.IsDBNull(i) ? null : reader.GetValue(i)); } results.Add(item); } } response.Success = true; response.Total = results.Count; response.Data = results; } catch (Exception ex) { this._logger.LogError(ex.ToString()); response.Message = ex.Message; } } return Json(response); } private class ResponseMessage { public bool Success { get; set; } public string Message { get; set; } public int Total { get; set; } public int PageIndex { get; set; } public int PageSize { get; set; } public object Data { get; set; } } } }