我在这里做错了什么?
...
using (var ctx = ObjectContextManager<MyDataContext>.GetManager("MyDataContext"))
{
var idsToUpdate = "2,3";
var parameters = new[]
{
new SqlParameter("DesiredEndDate", SqlDbType.DateTime).Value = newUpperLimit,
new SqlParameter("TasksToUpdate", SqlDbType.NVarChar).Value = idsToUpdate
};
ctx.ObjectContext.ExecuteStoreCommand("UPDATE dbo.Tasks SET DesiredEndDate = @DesiredEndDate WHERE Id IN (SELECT Id FROM dbo.fn_Split(@TasksToUpdate, N','))", parameters);
ctx.ObjectContext.SaveChanges();
}
...
我得到错误
必须声明标量变量“ @DesiredEndDate”。
必须声明标量变量“ @TasksToUpdate”。
但是我看不到我的代码出了什么问题:/
最佳答案
问题是您的代码:
var parameters = new[]
{
new SqlParameter("DesiredEndDate", SqlDbType.DateTime).Value = newUpperLimit,
new SqlParameter("TasksToUpdate", SqlDbType.NVarChar).Value = idsToUpdate
};
不是创建
SqlParameter
的数组-实际上是创建2个Value
属性的数组。您可以通过将代码更改为此(不会编译)来确认这一点:var parameters = new SqlParameter[]
{
new SqlParameter("DesiredEndDate", SqlDbType.DateTime).Value = newUpperLimit,
new SqlParameter("TasksToUpdate", SqlDbType.NVarChar).Value = idsToUpdate
};
这(将编译)
var parameters = new SqlParameter[]
{
new SqlParameter("DesiredEndDate", SqlDbType.DateTime),
new SqlParameter("TasksToUpdate", SqlDbType.NVarChar)
};
parameters[0].Value = newUpperLimit;
parameters[1].Value = idsToUpdate;
您也可以这样做:
var param1 = new SqlParameter("DesiredEndDate", SqlDbType.DateTime);
param1.Value = newUpperLimit;
var param2 = new SqlParameter("TasksToUpdate", SqlDbType.NVarChar);
param2.Value = idsToUpdate;
ctx.ObjectContext.ExecuteStoreCommand("...", param1, param2);
关于c# - ObjectContext.ExecuteStoreCommand无法识别参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18122157/