在Asp.Net中的数据库中插入数据。哪种方法更好?

时间:2018-11-10 13:52:32

标签: c# sql asp.net stored-procedures ado.net-entity-data-model

我正在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));
}

哪种方法是在数据库中插入数据的最佳方法。

4 个答案:

答案 0 :(得分:1)

如前所述,这应该是您的偏好。但是,随着微服务模式的最新趋势,最好将较少的应用程序逻辑与数据库产品联系在一起。真正取决于应用程序的用途以及后端转移的频率

答案 1 :(得分:1)

出于以下原因,我不建议将存储过程用于简单的读/写查询:

  • 某些逻辑在数据库中实现,并且不在您的源代码控制范围之内
  • 要维护
  • 该项目的详细程度

对于您的案例,Entity Framework(Microsoft数据库框架)可以涵盖几乎90%的案例。

如果您想对自己的Sql查询进行更多控制,则可以使用Sql Kata之类的查询生成器(我是该库的作者)

答案 2 :(得分:0)

这两种方法都可以在数据库中插入数据。使用参数化查询始终是一个不错的选择。我建议您使用第二种方法,因为您已经在项目中添加了ADO.NET实体模型。

答案 3 :(得分:0)

这个问题没有绝对答案。任何程序(应用程序)都有自己的要求,但是我认为使用每种方法都需要注意几点。

A)使用存储过程专家:

  • 第一次运行很慢,但是下次运行非常快。
  • 数据处理逻辑是唯一且集成的,因此更改 如此简单,易于理解,快速,可靠和干净。
  • 从一个IDE /语言/也许框架迁移到另一个框架很容易,因为大多数业务逻辑都在DB层中,所以许多鳕鱼更改了用新语言转换存储过程的调用。

B)使用实体数据模型专家:

  • 没有花时间来编写安全而强大的存储过程。

  • 可以通过编码缓慢更改数据处理逻辑 进度。

  • 对数据库实体具有有意义且清晰的视野(表/视图和 关系)。在编码时间。

  • 在某些情况下,可以更改
  • 的数据库架构 代码优先编程。

毕竟,我认为最好为 最易变/与前端相关/小的过程 部分和使用存储过程作为 持久/深层后端相关/巨大和多进程 部分。