c# - EF调用存储过程出现 "must declare the scalar variable @var"错误如何解决?

标签 c# wpf entity-framework

我想执行存储过程使用 Entity Framework 并返回我的模型类型的结果列表:

我在数据库中的存储过程是:

CREATE procedure [dbo].myProc
(
    @myParam1 int,
    @myParam2 nvarchar(max)   
)
as
BEGIN
    SELECT myCol1,myCol2 FROM
    MyTable Where x = @myParam1 And y = @myParam2
END

我的模型返回结果类型是:

public class MyModel
{
    public int? myCol1 { get; set; }
    public string myCol2 { get; set; }
}

我执行程序的方法是:

public List<MyModel> MyProc(int? p1, string p2)
{
    var myParam1Parameter = new SqlParameter("@myParam1", SqlDbType.Int).Value = p1.HasValue ? (object)p1.Value : DBNull.Value;
    var myparam2Parameter = new SqlParameter("@myparam2", SqlDbType.NVarChar, -1).Value = (object)p2 ?? DBNull.Value;

    return
            _context.Database.SqlQuery<MyModel>(
                "Exec [dbo].[myProc] @myParam1, @myParam2 ",
                myParam1Parameter, myparam2Parameter).ToList<MyModel>();
}

当运行程序并执行我的方法时抛出如下所示的异常:

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.SqlServer.dll

Additional information: Must declare the scalar variable "@myParam1".

最佳答案

我发现了我的问题,他应该使用以下来定义参数:

var myParam1Parameter = new SqlParameter("@myParam1", SqlDbType.Int) 
{
    Value = p1.HasValue ? (object)p1.Value : DBNull.Value
};
var myparam2Parameter = new SqlParameter("@myparam2", SqlDbType.NVarChar,1)
{
    Value = (object)p2 ?? DBNull.Value
} 

return _context.Database.SqlQuery<MyModel>(
            "[dbo].[myProc] @myParam1, @myParam2 ",
            myParam1Parameter, myparam2Parameter).ToList<MyModel>();

关于c# - EF调用存储过程出现 "must declare the scalar variable @var"错误如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544411/

相关文章:

c# - 我可以在运行时将 ConnectionStrings 添加到 ConnectionStringCollection 吗?

c# - SmtpException 和 SmtpFailedRecipientException 之间有什么区别

c# - 自定义依赖属性不起作用

c# - WPF:在派生自 WPF TextBox 的控件中,没有为空格键调用 OnKeyDown()

wpf - 垂直和水平网格分割器

c# - 有人可以解释这个程序的输出吗?

wpf - 每个模块的菜单项,模块内容使用 Prism 或 MEF 动态加载

c# - 在 Microsoft.AspNet.Identity 中使用 UserManager 和 RoleManager;

c# - 无法在 LINQ to Entities 查询中构造实体

entity-framework - DB2 Entity Framework