C# 如何在控制器中编写SQL语句以从用户输入(HTML)检索数据并在datatable中执行多重筛选?
我需要对数据表中的记录进行多次搜索/筛选,但我不知道如何启动它。我试图编写C# 如何在控制器中编写SQL语句以从用户输入(HTML)检索数据并在datatable中执行多重筛选?,c#,asp.net-mvc,asp.net-core,highcharts,C#,Asp.net Mvc,Asp.net Core,Highcharts,我需要对数据表中的记录进行多次搜索/筛选,但我不知道如何启动它。我试图编写GetSearchList()函数以获取用户输入(查看html),但出现了错误。我不知道如何修理它们。错误显示: 严重性代码描述项目文件行抑制状态 错误CS0103当前上下文中不存在名称“date”MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\MIMOS\Controllers\HomeController.cs 98 N/A 严重性代码说明项目文件行抑制状态 错误CS010
GetSearchList()
函数以获取用户输入(查看html),但出现了错误。我不知道如何修理它们。错误显示:
严重性代码描述项目文件行抑制状态
错误CS0103当前上下文中不存在名称“date”MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\MIMOS\Controllers\HomeController.cs 98 N/A
严重性代码说明项目文件行抑制状态
错误CS0103当前上下文MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\Controllers\HomeController.cs 98中不存在名称“Analytical\u id”
严重性代码说明项目文件行抑制状态
错误CS0103当前上下文MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\Controllers\HomeController.cs 98中不存在名称“time\u from”
严重性代码说明项目文件行抑制状态
错误CS0103当前上下文MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\Controllers\HomeController.cs 98中不存在名称“time\u to”
我的代码应该根据用户输入显示图表。例如,我有date、analysisid、time from、time to和analysis period参数。如果用户选择了这些项目,则输出应显示基于用户输入内容的图表。我的总体想法是从用户输入中检索数据,然后将其传递给控制器;在控制器中执行一些查询,然后像我前面提到的那样显示输出。我看过一些使用AJAX进行过滤记录的教程,但我不知道如何在代码中实现该技术。
输出示例:
型号:
使用Microsoft.AspNetCore.Mvc.Rendering;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
名称空间MIMOS.Models
{
公共类下拉列表
{
公共列表statlist{get;set;}
公共列表分析列表{get;set;}
公共列表搜索列表{get;set;}
}
公共类统计表
{
公共int id{get;set;}
公共int解析_id{get;set;}
公共字符串日期{get;set;}
公共字符串时间{get;set;}
公共字符串计数器{get;set;}
公共int摄像机_id{get;set;}
公共int vehi_1{get;set;}
公共int vehi_2{get;set;}
公共int vehi_3{get;set;}
公共int vehi_4{get;set;}
公共int vehi_5{get;set;}
公共int vehi_6{get;set;}
公共整数总计{get;set;}
公共十进制平均车速{get;set;}
公共十进制平均车辆间距{get;set;}
}
公共类分析列表
{
公共int解析_id{get;set;}
}
公共类搜索列表
{
公共int id{get;set;}
公共int解析_id{get;set;}
公共字符串日期{get;set;}
公共字符串时间{get;set;}
公共字符串计数器{get;set;}
公共int摄像机_id{get;set;}
公共int vehi_1{get;set;}
公共int vehi_2{get;set;}
公共int vehi_3{get;set;}
公共int vehi_4{get;set;}
公共int vehi_5{get;set;}
公共int vehi_6{get;set;}
公共整数总计{get;set;}
公共十进制平均车速{get;set;}
公共十进制平均车辆间距{get;set;}
}
}
家庭控制器:
使用系统;
使用System.Collections.Generic;
使用系统诊断;
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.Extensions.Logging;
使用MIMOS模型;
使用Microsoft.Extensions.Configuration;
使用System.IO;
使用MySql.Data.MySqlClient;
使用Microsoft.AspNetCore.Mvc.Rendering;
名称空间MIMOS.Controllers
{
公共类HomeController:控制器
{
专用只读ILogger\u记录器;
公共IConfigurationRoot配置{get;}
公共IConfigurationRootGetConnection()
{
var builder=new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile(“appSettings.json”).Build();
返回生成器;
}
/*公共家庭控制器(ILogger记录器)
{
_记录器=记录器;
}*/
公共IActionResult索引()
{
Dropdownlist multi_Dropdownlist=新的Dropdownlist
{
statlist=GetStatistics(),
analyticlist=GetAnalytical(),
//searchlist=GetSearchList()
};
返回视图(多下拉列表);
}
公共列表GetSearchList()
{
var connection=GetConnection().GetSection(“ConnectionStrings”).GetSection(“DefaultConnection”).Value;
MySqlConnection con=新的MySqlConnection(连接);
MySqlCommand cmd=new MySqlCommand(“从统计数据中选择时间,其中日期=”+“日期+”,分析id=“+分析id+”和时间>=”+“时间从+"“还有时间如果你能够创建HTML表,这里有一个演示,可以帮助你在Highcharts中实现HTML表。@SebastianWędzel我已经成功地在highchart中实现了HTML表。现在我需要根据分析id、时间等来过滤数据表。这部分对我来说有点困难,因为我不知道如何操作。不要从用户输入生成sql字符串。始终绑定参数。@JeremyLakeman我可以知道如何绑定参数吗?对不起,我对这一点有点陌生,所以我的知识有点有限。
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace MIMOS.Models
{
public class Dropdownlist
{
public List<Statistic_list> statlist { get; set; }
public List<Analytic_list> analyticlist { get; set; }
public List<Search_list> searchlist { get; set; }
}
public class Statistic_list
{
public int id { get; set; }
public int analytic_id { get; set; }
public string date { get; set; }
public string time { get; set; }
public string counter { get; set; }
public int camera_id { get; set; }
public int vehi_1 { get; set; }
public int vehi_2 { get; set; }
public int vehi_3 { get; set; }
public int vehi_4 { get; set; }
public int vehi_5 { get; set; }
public int vehi_6 { get; set; }
public int total_vehicle { get; set; }
public decimal avg_vehicle_speed { get; set; }
public decimal avg_vehicle_gap { get; set; }
}
public class Analytic_list
{
public int analytic_id { get; set; }
}
public class Search_list
{
public int id { get; set; }
public int analytic_id { get; set; }
public string date { get; set; }
public string time { get; set; }
public string counter { get; set; }
public int camera_id { get; set; }
public int vehi_1 { get; set; }
public int vehi_2 { get; set; }
public int vehi_3 { get; set; }
public int vehi_4 { get; set; }
public int vehi_5 { get; set; }
public int vehi_6 { get; set; }
public int total_vehicle { get; set; }
public decimal avg_vehicle_speed { get; set; }
public decimal avg_vehicle_gap { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using MIMOS.Models;
using Microsoft.Extensions.Configuration;
using System.IO;
using MySql.Data.MySqlClient;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace MIMOS.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public IConfigurationRoot Configuration { get; }
public IConfigurationRoot GetConnection()
{
var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appSettings.json").Build();
return builder;
}
/*public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}*/
public IActionResult Index()
{
Dropdownlist multi_Dropdownlist = new Dropdownlist
{
statlist = GetStatistics(),
analyticlist = GetAnalytic(),
//searchlist = GetSearchList()
};
return View(multi_Dropdownlist);
}
public List<Search_list> GetSearchList()
{
var connection = GetConnection().GetSection("ConnectionStrings").GetSection("DefaultConnection").Value;
MySqlConnection con = new MySqlConnection(connection);
MySqlCommand cmd = new MySqlCommand("SELECT time FROM statistics WHERE date = '" + date + "' and analytic_id =" + analytic_id + " and time>='" + time_from + "' and time<'" + time_to + "'; ", con);
con.Open();
var reader = cmd.ExecuteReader();
List<Search_list> searchlist = new List<Search_list>();
if (reader.HasRows)
{
while (reader.Read())
{
searchlist.Add(new Search_list()
{
vehi_1 = Convert.ToInt32(reader["vehi_1"]),
date = reader["date"].ToString(),
time = reader["time"].ToString(),
analytic_id = Convert.ToInt32(reader["analytic_id"]),
vehi_2 = Convert.ToInt32(reader["vehi_2"]),
vehi_3 = Convert.ToInt32(reader["vehi_3"]),
vehi_4 = Convert.ToInt32(reader["vehi_4"]),
vehi_5 = Convert.ToInt32(reader["vehi_5"]),
vehi_6 = Convert.ToInt32(reader["vehi_6"]),
total_vehicle = Convert.ToInt32(reader["total_vehicle"]),
avg_vehicle_speed = Convert.ToDecimal(reader["avg_vehicle_speed"]),
avg_vehicle_gap = Convert.ToDecimal(reader["avg_vehicle_gap"])
});
}
}
con.Close();
return searchlist;
}
public List<Statistic_list> GetStatistics()
{
var connection = GetConnection().GetSection("ConnectionStrings").GetSection("DefaultConnection").Value;
MySqlConnection con = new MySqlConnection(connection);
MySqlCommand cmd = new MySqlCommand("Select * from statistics", con);
con.Open();
var reader = cmd.ExecuteReader();
List<Statistic_list> list = new List<Statistic_list>();
if (reader.HasRows)
{
while (reader.Read())
{
list.Add(new Statistic_list()
{
time = reader["time"].ToString(),
vehi_1 = Convert.ToInt32(reader["vehi_1"]),
vehi_2 = Convert.ToInt32(reader["vehi_2"]),
vehi_3 = Convert.ToInt32(reader["vehi_3"]),
vehi_4 = Convert.ToInt32(reader["vehi_4"]),
vehi_5 = Convert.ToInt32(reader["vehi_5"]),
vehi_6 = Convert.ToInt32(reader["vehi_6"]),
total_vehicle = Convert.ToInt32(reader["total_vehicle"]),
avg_vehicle_speed = Convert.ToDecimal(reader["avg_vehicle_speed"]),
avg_vehicle_gap = Convert.ToDecimal(reader["avg_vehicle_gap"])
});
}
}
con.Close();
return list;
}
public List<Analytic_list> GetAnalytic()
{
var connection = GetConnection().GetSection("ConnectionStrings").GetSection("DefaultConnection").Value;
MySqlConnection con = new MySqlConnection(connection);
MySqlCommand cmd = new MySqlCommand("Select distinct analytic_id from statistics;", con);
con.Open();
var reader = cmd.ExecuteReader();
List<Analytic_list> list = new List<Analytic_list>();
if (reader.HasRows)
{
while (reader.Read())
{
list.Add(new Analytic_list()
{
analytic_id = Convert.ToInt32(reader["analytic_id"])
});
}
}
con.Close();
return list;
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
<p style="font-family:verdana;text-align:center;"><b>Report Parameter</b></p><hr>
<form class="form-inline" action="Index" method="get">
<div class="form-group">
<label for="date">Date:</label>
<input type="date" class="form-control" id="date" placeholder="Select date" name="date">
</div>
<div class="form-group">
<label for="analytic_id">Analytics ID:</label>
@Html.DropDownListFor(model => model.analyticlist, new SelectList(Model.analyticlist, "analytic_id", "analytic_id"))
</div>
<div class="form-group">
<label for="time_from">Time From:</label>
<select name="time_from" class="form-control" id="time_from">
<option value="0000">12.00 am</option>
<option value="0030">12.30 am</option>
<option value="0100">1.00 am</option>
<option value="0130">1.30 am</option>
<option value="0200">2.00 am</option>
<option value="0230">2.30 am</option>
<option value="0300">3.00 am</option>
<option value="0330">3.30 am</option>
<option value="0400">4.00 am</option>
<option value="0430">4.30 am</option>
<option value="0500">5.00 am</option>
<option value="0530">5.30 am</option>
<option value="0600">6.00 am</option>
<option value="0630">6.30 am</option>
<option value="0700">7.00 am</option>
<option value="0730">7.30 am</option>
<option value="0800">8.00 am</option>
<option value="0830">8.30 am</option>
<option value="0900">9.00 am</option>
<option value="0930">9.30 am</option>
<option value="1000">10.00 am</option>
<option value="1030">10.30 am</option>
<option value="1100">11.00 am</option>
<option value="1130">11.30 am</option>
<option value="1200">12.00 pm</option>
<option value="1230">12.30 pm</option>
<option value="1300">1.00 pm</option>
<option value="1330">1.30 pm</option>
<option value="1400">2.00 pm</option>
<option value="1430">2.30 pm</option>
<option value="1500">3.00 pm</option>
<option value="1530">3.30 pm</option>
<option value="1600">4.00 pm</option>
<option value="1630">4.30 pm</option>
<option value="1700">5.00 pm</option>
<option value="1730">5.30 pm</option>
<option value="1800">6.00 pm</option>
<option value="1830">6.30 pm</option>
<option value="1900">7.00 pm</option>
<option value="1930">7.30 pm</option>
<option value="2000">8.00 pm</option>
<option value="2030">8.30 pm</option>
<option value="2100">9.00 pm</option>
<option value="2130">9.30 pm</option>
<option value="2200">10.00 pm</option>
<option value="2230">10.30 pm</option>
<option value="2300">11.00 pm</option>
<option value="2330">11.30 pm</option>
</select>
</div>
<div class="form-group">
<label for="time_to">Time To:</label>
<select name="time_to" class="form-control" id="time_to">
<option value="0000">12.00 am</option>
<option value="0030">12.30 am</option>
<option value="0100">1.00 am</option>
<option value="0130">1.30 am</option>
<option value="0200">2.00 am</option>
<option value="0230">2.30 am</option>
<option value="0300">3.00 am</option>
<option value="0330">3.30 am</option>
<option value="0400">4.00 am</option>
<option value="0430">4.30 am</option>
<option value="0500">5.00 am</option>
<option value="0530">5.30 am</option>
<option value="0600">6.00 am</option>
<option value="0630">6.30 am</option>
<option value="0700">7.00 am</option>
<option value="0730">7.30 am</option>
<option value="0800">8.00 am</option>
<option value="0830">8.30 am</option>
<option value="0900">9.00 am</option>
<option value="0930">9.30 am</option>
<option value="1000">10.00 am</option>
<option value="1030">10.30 am</option>
<option value="1100">11.00 am</option>
<option value="1130">11.30 am</option>
<option value="1200">12.00 pm</option>
<option value="1230">12.30 pm</option>
<option value="1300">1.00 pm</option>
<option value="1330">1.30 pm</option>
<option value="1400">2.00 pm</option>
<option value="1430">2.30 pm</option>
<option value="1500">3.00 pm</option>
<option value="1530">3.30 pm</option>
<option value="1600">4.00 pm</option>
<option value="1630">4.30 pm</option>
<option value="1700">5.00 pm</option>
<option value="1730">5.30 pm</option>
<option value="1800">6.00 pm</option>
<option value="1830">6.30 pm</option>
<option value="1900">7.00 pm</option>
<option value="1930">7.30 pm</option>
<option value="2000">8.00 pm</option>
<option value="2030">8.30 pm</option>
<option value="2100">9.00 pm</option>
<option value="2130">9.30 pm</option>
<option value="2200">10.00 pm</option>
<option value="2230">10.30 pm</option>
<option value="2300">11.00 pm</option>
<option value="2330">11.30 pm</option>
</select>
</div>
<div class="form-group">
<label for="analysis_period" id="analysis_period">Analysis Period:</label>
<select name="analysis_period" class="form-control">
<option value="five_min">5 mins</option>
<option value="half_hour">30 mins</option>
<option value="one_hour">1 hours</option>
</select>
</div>
<button type="submit" class="btn btn-default" id="search"><i class='fas fa-search' style='color:black'></i></button><br><br>
</form>
@model MIMOS.Models.Dropdownlist
<body>
<div class="row">
<div class="column" style="background-color: #ffffff;">
<figure class="highcharts-figure">
<div id="container_one"></div>
<script src="~/js/chart_one.js"></script>
<table id="datatable_one" style="display:none">
<tr>
<th>Time</th>
<th>C1</th>
<th>C2</th>
<th>C3</th>
<th>C4</th>
<th>C5</th>
<th>C6</th>
</tr>
@foreach (var item in Model.statlist)
{
<tr>
<td>@Html.DisplayTextFor(modelItem => item.time)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_1)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_2)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_3)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_4)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_5)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_6)</td>
</tr>
}
</table>
</figure>
</div>
<div class="column" style="background-color:#ffffff;">
<div id="container"></div>
<script src="~/js/chart_one.js"></script>
<figure class="highcharts-figure">
<table id="datatable" style="display:none">
<tr>
<th>Time</th>
<th>C1</th>
<th>C2</th>
<th>C3</th>
<th>C4</th>
<th>C5</th>
<th>C6</th>
<th>Total Vehicle</th>
</tr>
@foreach (var item in Model.statlist)
{
<tr>
<td>@Html.DisplayTextFor(modelItem => item.time)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_1)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_2)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_3)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_4)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_5)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_6)</td>
<td>@Html.DisplayTextFor(modelItem => item.total_vehicle)</td>
</tr>
}
</table>
</figure>
</div>
</div>
<div class="row">
<div class="column" style="background-color:#ffffff;">
<div id="container_two"></div>
<script src="~/js/chart_two.js"></script>
<figure class="highcharts-figure">
<table id="datatable_two" style="display:none">
<tr>
<th>Time</th>
<th>Average Speed</th>
</tr>
@foreach (var item in Model.statlist)
{
<tr>
<td>@Html.DisplayTextFor(modelItem => item.time)</td>
<td>@Html.DisplayTextFor(modelItem => item.avg_vehicle_speed)</td>
</tr>
}
</table>
</figure>
</div>
<div class="column" style="background-color:#ffffff;">
<div id="container_two"></div>
<script src="~/js/chart_two.js"></script>
<figure class="highcharts-figure">
<table id="datatable_two" style="display:none">
<tr>
<th>Time</th>
<th>C1</th>
<th>C2</th>
<th>C3</th>
<th>C4</th>
<th>C5</th>
<th>C6</th>
<th>Total Vehicle</th>
</tr>
@foreach (var item in Model.statlist)
{
<tr>
<td>@Html.DisplayTextFor(modelItem => item.time)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_1)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_2)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_3)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_4)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_5)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_6)</td>
<td>@Html.DisplayTextFor(modelItem => item.total_vehicle)</td>
</tr>
}
</table>
</figure>
</div>
</div>
<div class="row">
<div class="column" style="background-color: #ffffff;">
<figure class="highcharts-figure">
<div id="container_three"></div>
<script src="~/js/chart_three.js"></script>
<table id="datatable_three" style="display:none">
<tr>
<th>Time</th>
<th>Gap</th>
</tr>
@foreach (var item in Model.statlist)
{
<tr>
<td>@Html.DisplayTextFor(modelItem => item.time)</td>
<td>@Html.DisplayTextFor(modelItem => item.avg_vehicle_gap)</td>
</tr>
}
</table>
</figure>
</div>
<div class="column" style="background-color:#ffffff;">
<div id="container_two"></div>
<script src="~/js/chart_two.js"></script>
<figure class="highcharts-figure">
<table id="datatable_two" style="display:none">
<tr>
<th>Time</th>
<th>C1</th>
<th>C2</th>
<th>C3</th>
<th>C4</th>
<th>C5</th>
<th>C6</th>
<th>Total Vehicle</th>
</tr>
@foreach (var item in Model.statlist)
{
<tr>
<td>@Html.DisplayTextFor(modelItem => item.time)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_1)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_2)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_3)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_4)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_5)</td>
<td>@Html.DisplayTextFor(modelItem => item.vehi_6)</td>
<td>@Html.DisplayTextFor(modelItem => item.total_vehicle)</td>
</tr>
}
</table>
</figure>
</div>
</div>
</body>
</html>