You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.8 KiB
77 lines
2.8 KiB
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<DataController> _logger;
|
|
|
|
public DataController(IWebHostEnvironment env, ILogger<DataController> 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<Dictionary<string, object>>();
|
|
var list = new List<object>();
|
|
using (var reader = command.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
var item = new Dictionary<string, object>();
|
|
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; }
|
|
}
|
|
}
|
|
} |