Sql server 在实体框架中使用SqlQuery
sql存储过程中sql参数的顺序必须与SqlSquery中使用的sql参数的顺序匹配,这是真的吗Sql server 在实体框架中使用SqlQuery,sql-server,entity-framework,Sql Server,Entity Framework,sql存储过程中sql参数的顺序必须与SqlSquery中使用的sql参数的顺序匹配,这是真的吗 var Parameter = new List<SqlParameter>(); Parameter.Add(new SqlParameter("@ParamOne", 1)); Parameter.Add(new SqlParameter("@ParamTwo", 2)); Parameter.Add(new SqlParameter("@ParamThree", 3));
var Parameter = new List<SqlParameter>();
Parameter.Add(new SqlParameter("@ParamOne", 1));
Parameter.Add(new SqlParameter("@ParamTwo", 2));
Parameter.Add(new SqlParameter("@ParamThree", 3));
context.Database.SqlQuery<myEntityType>("exec sp_Stored_Procedure @ParamOne, @ParamTwo, @ParamThree", Parameter.ToArray()).ToList<myEntityType>();
结果集是否为空
这可能会引发许多问题,我想问的是,在这种情况下,我是否遗漏了一些东西?这实际上可能是双向的 如果您有疑问:
"exec sp_Stored_Procedure @p0, @p1, @p2"
"exec sp_Stored_Procedure @username, @password"
您的参数数组将按顺序分配
但是,如果您有查询:
"exec sp_Stored_Procedure @p0, @p1, @p2"
"exec sp_Stored_Procedure @username, @password"
使用SqlParameter数组,例如新的SqlParameter(“@password”,userSuppliedPassword),则顺序是不相关的。我一开始不知道这种情况 类似这样的方法可以解决您的问题:
var Parameter = new List<SqlParameter>();
Parameter.Add(new SqlParameter("@p1", 1));
Parameter.Add(new SqlParameter("@p2", 2));
Parameter.Add(new SqlParameter("@p3", 3));
context.Database.SqlQuery<myEntityType>("exec sp_Stored_Procedure @ParamOne = @p1, @ParamTwo = @p2, @ParamThree = @p3", Parameter.ToArray()).ToList<myEntityType>();
var参数=新列表();
添加(新的SqlParameter(“@p1”,1));
添加(新的SqlParameter(“@p2”,2));
添加(新的SqlParameter(“@p3”,3));
context.Database.SqlQuery(“exec sp_storage_Procedure@ParamOne=@p1,@paramtow2=@p2,@paramtree=@p3”,Parameter.ToArray()).ToList();
旁注:您不应该在存储过程中使用sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀@马克:我同意。我只是将其用作默认存储过程名称。除了param name之外,这两个名称之间没有真正的区别。本文对参数的变化进行了更好的描述:我更改了代码,以便您更好地理解问题。哦,我明白您的建议了。我会用变通方法更新我的答案。