我正在Asp.Net网站上插入数据库中的数据。在互联网上阅读了不同的文章后,建议我们使用参数化查询,因为它可以防止SQL注入攻击。
所以我想知道哪种方法更好:
在数据库中使用参数创建存储过程,然后在按钮单击事件中调用它,以将数据插入数据库中,例如
CREATE PROCEDURE AddInfraction
@Description varchar(255), @Penalty money, @Points int
AS
BEGIN
INSERT INTO Infractions (Description, Penalty, Points)
VALUES (@Description, @Penalty, @Points)
END
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
using (SqlCommand command = new SqlCommand("AddInfraction"))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("Description", Description.Text);
command.Parameters.AddWithValue("Penalty", Convert.ToInt16(Penalty.Text));
command.Parameters.AddWithValue("Points", Convert.ToInt16(Points.Text));
connection.Open();
queryResult = command.ExecuteNonQuery();
if (queryResult == 0)
{
return;
}
}
connection.Close();
}
或者也许首先通过在数据库中添加 ADO.NET实体数据模型,然后在按钮click事件中创建最近添加的数据模型的对象,然后调用特定的存储过程并在数据库中插入数据。
using (ETrafficChallanSystemEntities eTrafficChallanSystemEntities = new ETrafficChallanSystemEntities())
{
eTrafficChallanSystemEntities.AddInfraction(Description.Text,
Convert.ToInt16(Penalty.Text), Convert.ToInt16(Points.Text));
}
哪种方法是在数据库中插入数据的最佳方法。
答案 0 :(得分:1)
如前所述,这应该是您的偏好。但是,随着微服务模式的最新趋势,最好将较少的应用程序逻辑与数据库产品联系在一起。真正取决于应用程序的用途以及后端转移的频率
答案 1 :(得分:1)
出于以下原因,我不建议将存储过程用于简单的读/写查询:
对于您的案例,Entity Framework(Microsoft数据库框架)可以涵盖几乎90%的案例。
如果您想对自己的Sql查询进行更多控制,则可以使用Sql Kata之类的查询生成器(我是该库的作者)
答案 2 :(得分:0)
这两种方法都可以在数据库中插入数据。使用参数化查询始终是一个不错的选择。我建议您使用第二种方法,因为您已经在项目中添加了ADO.NET实体模型。
答案 3 :(得分:0)
这个问题没有绝对答案。任何程序(应用程序)都有自己的要求,但是我认为使用每种方法都需要注意几点。
A)使用存储过程专家:
B)使用实体数据模型专家:
没有花时间来编写安全而强大的存储过程。
可以通过编码缓慢更改数据处理逻辑 进度。
对数据库实体具有有意义且清晰的视野(表/视图和 关系)。在编码时间。
的数据库架构 代码优先编程。
毕竟,我认为最好为 最易变/与前端相关/小的过程 部分和使用存储过程作为 持久/深层后端相关/巨大和多进程 部分。