ele*_*eep 240 c# sql ado.net linq-to-entities entity-framework-ctp5
我有一个存储过程有三个参数,我一直在尝试使用以下命令返回结果:
context.Database.SqlQuery<myEntityType>("mySpName", param1, param2, param3);
Run Code Online (Sandbox Code Playgroud)
起初我尝试使用SqlParameter对象作为参数,但这不起作用并抛出SqlException以下消息:
过程或函数'mySpName'需要参数'@ param1',这是未提供的.
所以我的问题是你如何使用这个方法与期望参数的存储过程?
谢谢.
Dev*_*art 371
您应该以下列方式提供SqlParameter实例:
context.Database.SqlQuery<myEntityType>(
"mySpName @param1, @param2, @param3",
new SqlParameter("param1", param1),
new SqlParameter("param2", param2),
new SqlParameter("param3", param3)
);
Run Code Online (Sandbox Code Playgroud)
Dan*_*ork 126
此外,您可以使用"sql"参数作为格式说明符:
context.Database.SqlQuery<MyEntityType>("mySpName @param1 = {0}", param1)
Run Code Online (Sandbox Code Playgroud)
Tom*_*day 71
此解决方案(仅)用于SQL Server 2005
你们是救生员,但正如@Dan Mork所说,你需要在混合中加入EXEC.绊倒我的是:
:
context.Database.SqlQuery<EntityType>(
"EXEC ProcName @param1, @param2",
new SqlParameter("param1", param1),
new SqlParameter("param2", param2)
);
Run Code Online (Sandbox Code Playgroud)
Thu*_*ram 13
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}",
new object[] { param1, param2, param3 });
Run Code Online (Sandbox Code Playgroud)
//要么
using(var context = new MyDataContext())
{
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}",
new object[] { param1, param2, param3 }).ToList();
}
Run Code Online (Sandbox Code Playgroud)
//要么
using(var context = new MyDataContext())
{
object[] parameters = { param1, param2, param3 };
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}",
parameters).ToList();
}
Run Code Online (Sandbox Code Playgroud)
//要么
using(var context = new MyDataContext())
{
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}",
param1, param2, param3).ToList();
}
Run Code Online (Sandbox Code Playgroud)
大多数答案都很脆弱,因为它们依赖于SP参数的顺序。最好命名存储的Proc的参数,并为其赋予参数化的值。
为了在调用SP时使用命名参数,而不必担心参数的顺序
将SQL Server命名参数与ExecuteStoreQuery和ExecuteStoreCommand一起使用
描述最佳方法。比丹·莫克的答案要好。
例如:
var cmdText = "[DoStuff] @Name = @name_param, @Age = @age_param";
var sqlParams = new[]{
new SqlParameter("name_param", "Josh"),
new SqlParameter("age_param", 45)
};
context.Database.SqlQuery<myEntityType>(cmdText, sqlParams)
Run Code Online (Sandbox Code Playgroud)
db.Database.SqlQuery<myEntityType>("exec GetNewSeqOfFoodServing @p0,@p1,@p2 ", foods_WEIGHT.NDB_No, HLP.CuntryID, HLP.ClientID).Single()
Run Code Online (Sandbox Code Playgroud)
或者
db.Database.SqlQuery<myEntityType>(
"exec GetNewSeqOfFoodServing @param1, @param2",
new SqlParameter("param1", param1),
new SqlParameter("param2", param2)
);
Run Code Online (Sandbox Code Playgroud)
或者
var cmdText = "exec [DoStuff] @Name = @name_param, @Age = @age_param";
var @params = new[]{
new SqlParameter("name_param", "Josh"),
new SqlParameter("age_param", 45)
};
db.Database.SqlQuery<myEntityType>(cmdText, @params)
Run Code Online (Sandbox Code Playgroud)
或者
db.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}",
new object[] { param1, param2, param3 }).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
296375 次 |
| 最近记录: |