SqlParameter 与 ObjectParameter

SqlParameter vs ObjectParameter

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 Code First,我想通过存储过程与我的数据库进行通信。 那么将参数传递给 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

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

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

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

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