【问题标题】:SqlParameter vs ObjectParameterSqlParameter 与 ObjectParameter
【发布时间】:2015-10-17 17:30:40
【问题描述】:

SqlParameterObjectParameter 的主要区别是什么?

ObjectParameter[] parameters =
{
           new ObjectParameter("MainUserName", user.MainUserName),
           new ObjectParameter("MainUserFirstName",user.MainUserFirstName),
           new ObjectParameter("MainUserLastName",user.MainUserLastName),
           new ObjectParameter("DOJoin", DateTime.Now),
};

SqlParameter[] parameters =
       {
           new SqlParameter("@MainUserName", user.MainUserName),

           new SqlParameter("@MainUserFirstName",user.MainUserFirstName),

           new SqlParameter("@MainUserLastName",user.MainUserLastName),



            new SqlParameter("@DOJoin", DateTime.Now),

       };

我正在编写 MVC 代码 首先,我想通过存储过程与我的数据库进行通信。 那么哪一种是将参数传递给SP的最佳方法? 上次我尝试通过传递 Sql 参数来执行 SP,但遇到以下异常

Procedure or function 'InsertUser' expects parameter '@MainUserName', which was not supplied

我试图通过尝试不同的场景来解决它,但没有运气。 最后我想我应该使用对象参数而不是 Sql 参数。 但不知道这些之间的主要区别是什么?

编辑 我想使用ExecuteSqlCommandAsync 运行下面的代码,它期望object[] parameters

 public async Task InsertAsync(ActionCriteria obj)
{
    await _dbCOntext.Database.ExecuteSqlCommandAsync(obj.SpName, obj.SqlParameter) ;
}

public Task<int> ExecuteSqlCommandAsync(string sql, params object[] parameters);

那么我将如何将 sqlperameters 传递给 ExecuteSqlCommandAsync,以便它可以使用提供的 SqlParameters 而不是 ObjectParameters

执行 SP

【问题讨论】:

    标签: asp.net-mvc stored-procedures entity-framework-6 code-first


    【解决方案1】:

    SqlParameter 是 ADO.NET 的一部分,如果底层数据库是 SQL Server,它可能在 EF 中使用。例如在context.Database.SqlQuery 方法中。

    ObjectParameter 是 EF 的一部分(查看它的程序集名称),EF 可以与许多 DBMS 一起使用(当然,每种情况都有特殊的提供程序)。 ObjectParameter 不需要 SQL Server。 SqlParameter 会。

    这两个类都用于执行 SP 和原始 SQL 查询。我建议在 SQL Server 数据库的情况下,这些类之间没有概念上的区别。

    【讨论】:

      【解决方案2】:

      嗯, 你几乎是对的,但是 sqlParameter 是 SQL 注入安全 而 objectParameter 允许你注入任何你想要的字符串,这有很大的不同。

      【讨论】:

        猜你喜欢
        • 2016-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 2011-07-20
        相关资源
        最近更新 更多