正在 Asp.Net 中的数据库中插入数据。哪种方式更好?
Inserting data in database in Asp.Net . Which way is better?
我正在 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 实体数据模型,然后在按钮单击事件中创建最近添加的数据模型的对象,并且然后调用特定的存储过程并将数据插入数据库。
using (ETrafficChallanSystemEntities eTrafficChallanSystemEntities = new ETrafficChallanSystemEntities())
{
eTrafficChallanSystemEntities.AddInfraction(Description.Text,
Convert.ToInt16(Penalty.Text), Convert.ToInt16(Points.Text));
}
哪一个是在数据库中插入数据的最佳方式。
这两种方法都可以很好地向数据库中插入数据。使用参数化查询始终是一个不错的选择。我建议使用第二种方法,因为您已经在项目中添加了 ADO.NET 实体模型。
如前所述,这应该是您的偏好。然而,随着微服务模式的最新趋势,将较少的应用程序逻辑绑定到数据库产品可能会更好。实际上取决于应用程序的用途以及后端转移的频率
这个问题没有绝对的答案。任何程序(应用程序)都有自己的要求,但我考虑了使用每种方法的一些要点。
A) 使用存储过程优点:
- 第一次运行很慢,下次就这么快了。
- 数据处理逻辑独特且完整,所以改变就是
如此简单、易懂、快速、可靠且干净。
- 从一个 IDE/Language/Maybe 框架迁移到另一个框架很容易,因为大多数业务逻辑都在 DB 层,所以很多 cod 更改转换为新语言的存储过程调用。
B) 使用实体数据模型优点:
没有花时间编写安全强大的存储过程。
数据处理逻辑可以通过编码慢慢改变
进度.
对数据库实体(Tables/Views和
关系)在编码时间。
在某些场景下可以更改数据库架构,例如
代码优先编程。
毕竟,我认为对于 大多数 changeable/front-end related/little 流程 [=41= 保留实体模型方式可能更好] 部分和使用存储过程 persistent/Deep 后端 related/Huge 和多进程 部分。
我不建议将存储过程用于简单的 read/write 查询,原因如下:
- 一些逻辑是在数据库中实现的,不在您的源代码控制范围内
- 更难维护
- 项目更冗长
针对您的情况Entity Framework(Microsoft 数据库框架)几乎可以涵盖 90% 的情况。
如果你想更好地控制你的 Sql 查询,你可以使用像 Sql Kata 这样的查询生成器(我是这个库的作者)
我正在 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 实体数据模型,然后在按钮单击事件中创建最近添加的数据模型的对象,并且然后调用特定的存储过程并将数据插入数据库。
using (ETrafficChallanSystemEntities eTrafficChallanSystemEntities = new ETrafficChallanSystemEntities())
{
eTrafficChallanSystemEntities.AddInfraction(Description.Text,
Convert.ToInt16(Penalty.Text), Convert.ToInt16(Points.Text));
}
哪一个是在数据库中插入数据的最佳方式。
这两种方法都可以很好地向数据库中插入数据。使用参数化查询始终是一个不错的选择。我建议使用第二种方法,因为您已经在项目中添加了 ADO.NET 实体模型。
如前所述,这应该是您的偏好。然而,随着微服务模式的最新趋势,将较少的应用程序逻辑绑定到数据库产品可能会更好。实际上取决于应用程序的用途以及后端转移的频率
这个问题没有绝对的答案。任何程序(应用程序)都有自己的要求,但我考虑了使用每种方法的一些要点。
A) 使用存储过程优点:
- 第一次运行很慢,下次就这么快了。
- 数据处理逻辑独特且完整,所以改变就是 如此简单、易懂、快速、可靠且干净。
- 从一个 IDE/Language/Maybe 框架迁移到另一个框架很容易,因为大多数业务逻辑都在 DB 层,所以很多 cod 更改转换为新语言的存储过程调用。
B) 使用实体数据模型优点:
没有花时间编写安全强大的存储过程。
数据处理逻辑可以通过编码慢慢改变 进度.
对数据库实体(Tables/Views和 关系)在编码时间。
在某些场景下可以更改数据库架构,例如 代码优先编程。
毕竟,我认为对于 大多数 changeable/front-end related/little 流程 [=41= 保留实体模型方式可能更好] 部分和使用存储过程 persistent/Deep 后端 related/Huge 和多进程 部分。
我不建议将存储过程用于简单的 read/write 查询,原因如下:
- 一些逻辑是在数据库中实现的,不在您的源代码控制范围内
- 更难维护
- 项目更冗长
针对您的情况Entity Framework(Microsoft 数据库框架)几乎可以涵盖 90% 的情况。
如果你想更好地控制你的 Sql 查询,你可以使用像 Sql Kata 这样的查询生成器(我是这个库的作者)