【问题标题】:Generic way to insert some data into a table将一些数据插入表的通用方法
【发布时间】:2013-06-15 11:24:49
【问题描述】:

我一直在使用 nhibernate ORM 将数据从应用程序插入到 sql 表中。 但最近我尝试在 Ado.net 上阅读,发现建议使用存储过程而不是 sqlcommand.executenonQuery().

在这种情况下,每个表插入都需要不同的存储过程。一个 100 个表的应用程序将需要 100 个存储过程。我的理解正确还是有更好的方法以更通用的方式进行?

请提出建议。

【问题讨论】:

    标签: ado.net


    【解决方案1】:

    一个简单的单行命令可以是通过参数化的 Command 类直接在 .NET 代码中给出的 INSERT。比如:

    using (SqlConnection sqlConn = new SqlConnection(connectionString)) {
            using (SqlCommand sqlCmd = new SqlCommand("INSERT INTO MyTable (Field1, Field2) VALUES (@Param1, @Param2)", sqlConn)) {
                sqlCmd.Parameters.AddWithValue("@Param1", someValue1);  
                sqlCmd.Parameters.AddWithValue("@Param2", someValue2); 
                sqlConn.Open();  
                sqlCmd.ExecuteNonQuery();  
            }  
        }  
    

    所以它不必是每个命令的存储过程。您可以拥有一个或多个专用于 DB 访问的类(db 访问层),并使用各种方法填充它以从 DB 读取/写入。您甚至可以拥有一个通用方法,自动为 INSERT/UPDATE 命令派生参数。

    当然,如果它超过 1-2 个命令或涉及某些逻辑 - 这要求存储过程。

    顺便说一句,这是我个人的看法,但我认为 ORM 是邪恶的。

    【讨论】:

      【解决方案2】:

      您是否听说过,这是一个执行查询并将结果映射到强类型列表的强大工具。 Dapper 还支持存储过程,请查看this

      示例:

      dbConnection.Query<return type>("yourSP", parameters, 
              commandType: CommandType.StoredProcedure).First();
      

      还需要一些时间来检查这个SO question

      【讨论】:

        【解决方案3】:

        如果我有超过 5 个不同的表可供选择和/或插入,我个人会使用 ORM。如果公交车站就在门前,为什么要步行 100 英里?

        也就是说,ORM 是一种访问数据的通用方式。如果您想手动编写所有代码,您当然可以编写带有可选参数的存储过程,但我不推荐它。

        【讨论】:

        • 感谢您的建议。当我阅读“使用存储过程插入数据”时,我以为我遗漏了一些东西,并且可以编写一些通用的存储过程来做到这一点。
        猜你喜欢
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        • 2017-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多