当前位置:  开发笔记 > 编程语言 > 正文

没有参数的C#存储过程

如何解决《没有参数的C#存储过程》经验,为你挑选了1个好方法。

我正在尝试使用从dbcontext继承的类来运行不带参数的存储过程。这是我的代码:

MyDBContext _myDBContext = new MyDBContext();
_myDBContext.Database.SqlQuery("MyStoredProcedure", new SqlParameter());

但这不起作用,因为它正在寻找错误的过载。即使我使用的是字符串,也可以使用object []。

如果我在那里有参数,它就可以工作。我已经用其他存储过程做到了这一点,例如:

IEnumerable tempMyClass =
_myDbContext.Database.SqlQuery(
    "myStoredProcedure @ID",
    new SqlParameter("@ID", 5));

知道我要去哪里错了吗?

MyDBContext定义

class MontagueDBContext : DbContext, IUnitOfWork 
{ 
    public MontagueDBContext() : base("name=MontigueApp") 
    { 
        AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Directory.GetCurrentDirectory()); 
    } 

    public IDbSet Permits { get; set; } 

    public void ChangeEntityState(TEntity item, EntityState entityState) where TEntity : class 
    { 
        this.Entry(item).State = entityState; 
    } 

    public EntityState GetEntityState(TEntity item) where TEntity : class 
    { 
        return this.Entry(item).State; 
    } 

    public new int SaveChanges() 
    { 
        return base.SaveChanges(); 
    } 
}

RB... 5

您正在告诉EF只有一个参数(尽管没有名称或值!)。

将您的代码更改为以下内容:

_myDBContext.Database.SqlQuery("MyStoredProcedure");

背景

所述PARAMS关键字是一个特殊的关键字,它允许一个方法采取零个或多个参数。

编辑

您可以通过多种方式执行原始SQL语句,但这可能是最适合您的方案的(执行不返回任何结果且未绑定到特定表的存储过程)。

context.Database.ExecuteSqlCommand("EXEC MyStoredProcedure"); 

有关更多背景信息和各种替代方法,请参见本文。



1> RB...:

您正在告诉EF只有一个参数(尽管没有名称或值!)。

将您的代码更改为以下内容:

_myDBContext.Database.SqlQuery("MyStoredProcedure");

背景

所述PARAMS关键字是一个特殊的关键字,它允许一个方法采取零个或多个参数。

编辑

您可以通过多种方式执行原始SQL语句,但这可能是最适合您的方案的(执行不返回任何结果且未绑定到特定表的存储过程)。

context.Database.ExecuteSqlCommand("EXEC MyStoredProcedure"); 

有关更多背景信息和各种替代方法,请参见本文。

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有