#c# #sql #reactjs #asp.net-web-api #webapi
Вопрос:
Я новичок в реагировании и новичок в веб-API. Я загружаю данные в табулятор в интерфейсе react из значения, которое я передаю через веб-API. Я передаю значение через функцию getReports следующим образом:
[HttpPost]
[Route("GetReports")]
public IHttpActionResult GetReports(string jwt, List<object> data)
{
if (!Common.VerificationToken.VerifyJWToken(jwt))
{
return null;
}
var to = data[0];
var from = data[1];
DateTime toDate = Convert.ToDateTime(to);
DateTime fromDate = Convert.ToDateTime(from);
var ReportData = db.T_CQL_COIL_DESC.Where(t => t.CCD_CREATED_ON >= toDate amp;amp;
t.CCD_CREATED_ON <= fromDate).ToList();
ReportsDTO dto = new ReportsDTO();
List<ReportsDTO> ReportDTO = new List<ReportsDTO>();
try
{
foreach (var report in ReportData)
{
List<vehicledetail> vehicle = new List<vehicledetail>();
var imgurl = "https://firebasestorage.googleapis.com/v0/b/tsl-coil-qlty-
monitoring-dev.appspot.com/";
dto = new ReportsDTO();
dto.Type = report.CCD_OP_TYPE;
dto.ID = report.CCD_COIL_ID;
vehicle = GetVehicleID(dto.ID);
vehicledetail vehicledetails = vehicle[0];
dto.vehicleno = vehicledetails.vehicleno.ToString();
dto.wagonno = vehicledetails.wagonno.ToString();
dto.Active = report.CCD_ACTIVE;
dto.ImgURL = report.CCD_IMAGE_URL != null ? imgurl report.CCD_IMAGE_URL : "NA";
dto.Desc = report.CCD_VIEW_DESC != null ? report.CCD_VIEW_DESC : "NA";
ReportDTO.Add(dto);
}
return Ok(ReportDTO);
}
catch (Exception ex)
{
return Content(HttpStatusCode.NoContent, "Something went wrong");
}
}
Данные в vehicledetail в vehicledetail vehicledetails = транспортное средство[0]; заполняются с помощью этой функции:
public List<vehicledetail> GetVehicleID(string coilID)
{
List<vehicledetail> vehicle = new List<vehicledetail>();
vehicledetail vehicledetails = new vehicledetail();
string oradb = Utilities.STAR_DB;
OracleConnection conn = new OracleConnection(oradb);
string query = "SELECT a.Vbeln, b.WAGON_NO FROM sapr3.lips a, sapr3.ZVTRRDA b WHERE
a.MANDT='600' AND a.CHARG='" coilID "' AND a.LFIMG > 0 AND a.MANDT = b.MANDT AND
a.VBELN = b.VBELN";
OracleDataAdapter da = new OracleDataAdapter(query, conn);
conn.Open();
DataTable dt = new DataTable();
da.Fill(dt);
foreach (DataRow row in dt.Rows)
{
vehicledetails.vehicleno = row["VBELN"].ToString();
vehicledetails.wagonno = row["WAGON_NO"].ToString();
}
conn.Close();
vehicle.Add(vehicledetails);
return (vehicle);
}
Он работает нормально, но для загрузки приведенных ниже данных требуется 30 секунд:
Как мне это оптимизировать? Пожалуйста, помогите. Примечание: для загрузки этих данных требуется 30 секунд
Комментарии:
1. Кроме того, попробуйте использовать параметризованные запросы. Построение запроса БД с использованием конкатенации строк может быть — и часто является — уязвимостью.
2. можете ли вы привести пример этого
Ответ №1:
Помимо нескольких других вещей, основная проблема, по-видимому, заключается в том, что вы запрашиваете базу данных для каждого транспортного средства.
- В этом конкретном сценарии, возможно, было бы лучше выбрать все идентификаторы транспортных средств и запросить их все.
var Идентификаторы транспортных средств = Данные отчета.Выбор множества(t => t.ID);
Затем вы можете сформировать запрос, в котором будут собраны все сведения о транспортном средстве. Это сократит количество вызовов базы данных и может оказать огромное влияние на время.
- Еще одна вещь, которую следует проверить, — это наличие какого-либо индекса, созданного в столбце идентификатора транспортного средства в базе данных, поскольку это также может помочь ускорить процесс.
Комментарии:
1. можете ли вы привести пример, приведенный в коде