将一些数据插入表中的通用方法

时间:2013-06-19 03:47:43

标签: ado.net

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

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

请建议。

3 个答案:

答案 0 :(得分: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是邪恶的。

答案 1 :(得分:1)

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

示例:

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

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

答案 2 :(得分:0)

如果我有超过5个不同的表来选择和/或插入,我个人会使用ORM。如果公共汽车站就在门的正前方,你为什么要走100英里?

那说 ORM 是访问数据的通用方式。如果你想手动编写所有代码,你肯定可以用可选参数编​​写存储过程,但我不推荐它。