比我目前使用的更好的获取 SQL 数据的方法
A better way to obtain SQL data than I am currently using
我需要从外部 SQL 服务器数据库检索数据并在我的 ASP.NET MVC 应用程序中查看(而不是存储)。我可以连接到服务器的唯一方法是使用服务器名称、端口号和访问服务器所有者提供的 SQL 服务器存储过程。
目前我知道的唯一方法是:
a) 编写 .sql
脚本来检索数据。请注意,我看不到任何 SQL 服务器表,我只有存储过程的名称和条件。我将结果保存为 .txt
文件
EXEC dbo.listData @Criteria = '<Portal><Data Name="Data" Format="Narrow" Interval="5m">
<Where>
<Column Name="Point" Project="XXX" Value="XXXX" Operator="LIKE" />
<Column Name="Point" Project="YYY" Value="YYYY" Operator="LIKE" />
</Where>
</Data>
</Portal>'
, @StartDateTime = '12/28/2020',
@EndDateTime = '12/29/2020'
b) 创建模型 class
public class Alarm_DataModel
{
public string Project { get; set; }
public string Point { get; set; }
}
c) 创建控制器将数据放入模型传递给视图
public ActionResult Index()
{
string[] texts = System.IO.File.ReadAllLines(Server.MapPath("~/App_Data/Test/test.txt"));
texts = texts.Skip(2).ToArray();
List<Alarm_DataModel> Alarm_Data = new List<Alarm_DataModel>();
foreach (string row in texts)
{
if (!string.IsNullOrEmpty(row))
{
int x = row.Length;
Alarm_Data.Add(new Alarm_DataModel
{
Project = row.Substring(0, 25),
Point = row.Substring(26, 60), 6
});
}
}
ViewBag.Data = texts;
return View(Alarm_Data);
}
我的问题可能已经回答了很多次,但我已经看过但找不到任何我可以解释的内容。
有没有一种方法可以使用我的控制器获取数据,而不必依赖 运行 中的 .sql
脚本并生成 .txt
文件?
由于我对数据库的访问权限有限,使用提供的存储过程进行查询并填充模型以传递给视图的最佳方式是什么?
使用 Dapper,代码看起来像这样:
using Dapper;
using System.Data.SqlClient;
using System.Linq;
private IEnumerable<Alarm_DataModel> GetAlarmList()
{
var sql = @"EXEC dbo.listData @Criteria = '<Portal><Data Name=""Data"" Format=""Narrow"" Interval=""5m"">
<Where>
<Column Name=""Point"" Project=""XXX"" Value=""XXXX"" Operator=""LIKE"" />
<Column Name=""Point"" Project=""YYY"" Value=""YYYY"" Operator=""LIKE"" />
</Where>
</Data>
</Portal>'";
using( var connection = new SqlConnection("(connecting string here)") )
{
var values = new { StartDateTime = "2017.1.1", EndDateTime = "2017.12.31" };
return connection.Query<Alarm_DataModel>(sql, values).ToList();
}
}
[HttpGet]
public ActionResult Index()
{
var alarmList = GetAlarmList();
ViewBag.Data = "texts";
return View(alarmList);
}
如果存储过程可以执行并回复一些数据,则一切都在使用您提供的凭据。这是正常的生产安全设置。
您还想查看表,这是一个不同的问题,可以使用不同的凭据或访问另一台服务器来解决。
谢谢 Frank Nielsen,您推荐的代码仅对标准值进行了一些小的修改。出于某种原因,我需要将它们包含在查询中才能正常工作。
非常感谢,谢谢
这是最终代码:
public class AlarmDataController : Controller
{
// GET: AlarmData
private IEnumerable<Alarm_DataModel> GetAlarmList()
{
var sql = @"EXEC dbo.listData @Criteria = '<Portal><Data Name=""Data"" Format=""Narrow"" Interval=""5m"">
<Where>
<Column Name=""Point"" Project=""XX"" Value=""XXXX"" Operator=""LIKE"" />
<Column Name=""Point"" Project=""YY"" Value=""YYYY"" Operator=""LIKE"" />
</Where>
</Data>
</Portal>', @StartDateTime = '12/28/2020',@EndDateTime = '12/29/2020'";
string connectionString = "Integrated Security=True;Data Source=XXXX;Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
using (var connection = new SqlConnection(connectionString))
{
return connection.Query<Alarm_DataModel>(sql).ToList();
}
}
[HttpGet]
public ActionResult Index()
{
var alarmList = GetAlarmList();
return View(alarmList);
}
}
我需要从外部 SQL 服务器数据库检索数据并在我的 ASP.NET MVC 应用程序中查看(而不是存储)。我可以连接到服务器的唯一方法是使用服务器名称、端口号和访问服务器所有者提供的 SQL 服务器存储过程。
目前我知道的唯一方法是:
a) 编写 .sql
脚本来检索数据。请注意,我看不到任何 SQL 服务器表,我只有存储过程的名称和条件。我将结果保存为 .txt
文件
EXEC dbo.listData @Criteria = '<Portal><Data Name="Data" Format="Narrow" Interval="5m">
<Where>
<Column Name="Point" Project="XXX" Value="XXXX" Operator="LIKE" />
<Column Name="Point" Project="YYY" Value="YYYY" Operator="LIKE" />
</Where>
</Data>
</Portal>'
, @StartDateTime = '12/28/2020',
@EndDateTime = '12/29/2020'
b) 创建模型 class
public class Alarm_DataModel
{
public string Project { get; set; }
public string Point { get; set; }
}
c) 创建控制器将数据放入模型传递给视图
public ActionResult Index()
{
string[] texts = System.IO.File.ReadAllLines(Server.MapPath("~/App_Data/Test/test.txt"));
texts = texts.Skip(2).ToArray();
List<Alarm_DataModel> Alarm_Data = new List<Alarm_DataModel>();
foreach (string row in texts)
{
if (!string.IsNullOrEmpty(row))
{
int x = row.Length;
Alarm_Data.Add(new Alarm_DataModel
{
Project = row.Substring(0, 25),
Point = row.Substring(26, 60), 6
});
}
}
ViewBag.Data = texts;
return View(Alarm_Data);
}
我的问题可能已经回答了很多次,但我已经看过但找不到任何我可以解释的内容。
有没有一种方法可以使用我的控制器获取数据,而不必依赖 运行 中的 .sql
脚本并生成 .txt
文件?
由于我对数据库的访问权限有限,使用提供的存储过程进行查询并填充模型以传递给视图的最佳方式是什么?
使用 Dapper,代码看起来像这样:
using Dapper;
using System.Data.SqlClient;
using System.Linq;
private IEnumerable<Alarm_DataModel> GetAlarmList()
{
var sql = @"EXEC dbo.listData @Criteria = '<Portal><Data Name=""Data"" Format=""Narrow"" Interval=""5m"">
<Where>
<Column Name=""Point"" Project=""XXX"" Value=""XXXX"" Operator=""LIKE"" />
<Column Name=""Point"" Project=""YYY"" Value=""YYYY"" Operator=""LIKE"" />
</Where>
</Data>
</Portal>'";
using( var connection = new SqlConnection("(connecting string here)") )
{
var values = new { StartDateTime = "2017.1.1", EndDateTime = "2017.12.31" };
return connection.Query<Alarm_DataModel>(sql, values).ToList();
}
}
[HttpGet]
public ActionResult Index()
{
var alarmList = GetAlarmList();
ViewBag.Data = "texts";
return View(alarmList);
}
如果存储过程可以执行并回复一些数据,则一切都在使用您提供的凭据。这是正常的生产安全设置。
您还想查看表,这是一个不同的问题,可以使用不同的凭据或访问另一台服务器来解决。
谢谢 Frank Nielsen,您推荐的代码仅对标准值进行了一些小的修改。出于某种原因,我需要将它们包含在查询中才能正常工作。
非常感谢,谢谢
这是最终代码:
public class AlarmDataController : Controller
{
// GET: AlarmData
private IEnumerable<Alarm_DataModel> GetAlarmList()
{
var sql = @"EXEC dbo.listData @Criteria = '<Portal><Data Name=""Data"" Format=""Narrow"" Interval=""5m"">
<Where>
<Column Name=""Point"" Project=""XX"" Value=""XXXX"" Operator=""LIKE"" />
<Column Name=""Point"" Project=""YY"" Value=""YYYY"" Operator=""LIKE"" />
</Where>
</Data>
</Portal>', @StartDateTime = '12/28/2020',@EndDateTime = '12/29/2020'";
string connectionString = "Integrated Security=True;Data Source=XXXX;Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
using (var connection = new SqlConnection(connectionString))
{
return connection.Query<Alarm_DataModel>(sql).ToList();
}
}
[HttpGet]
public ActionResult Index()
{
var alarmList = GetAlarmList();
return View(alarmList);
}
}