正在 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 这样的查询生成器(我是这个库的作者)