SqlParameter
和ObjectParameter
之间的主要区别是什么?
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 Perameters来执行SP,但遇到了以下异常
Procedure or function 'InsertUser' expects parameter '@MainUserName', which was not supplied
我尝试通过尝试不同的方案解决它,但没有运气。 最后我想我应该使用Sql Perameters的Object Perameters intead。 但不知道这些之间的主要区别是什么?
Edite
我想使用期望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
答案 0 :(得分:5)
SqlParameter是ADO.NET的一部分,如果底层数据库是SQL Server,则可能在EF中使用。例如,在context.Database.SqlQuery
方法中。
ObjectParameter是EF的一部分(查看它的程序集名称),EF可以与许多DBMS一起使用(当然,每个案例都有特殊的提供者)。 ObjectParameter
不需要SQL Server。 SqlParameter
确实如此。
这两个类都用于执行SP和原始SQL查询。我建议在SQL Server数据库的情况下,这些类之间没有概念上的区别。
答案 1 :(得分:1)
好吧, 您几乎是正确的,但是sqlParameter是 SQL注入安全,而objectParameter允许您注入所需的任何字符串。