简体   繁体   English

如何在asp.net mvc中编写纯SQL?

[英]How to write pure SQL in asp.net mvc?

I've created a controller class as below: 我创建了一个控制器类,如下所示:

public class CelebrityController : Controller
{
    private MyDatabase db = new MyDatabase();

    public ActionResult Index()
    {
        var query = db.tableCelebrity.Include(t => t.tableMovie);
        return View(query.ToList());
    }
}

Now I want to do the same thing, but using a pure SQL query in the Index method. 现在我想做同样的事情,但在Index方法中使用纯SQL查询。 I am trying to replace code as below: 我试图替换代码如下:

public class CelebrityController : Controller
    {
        private MyDatabase db = new MyDatabase();

        public ActionResult Index()
        {
            IEnumerable<tableCelebrity> results = db.ExecuteQuery<tableCelebrity>
            (@"SELECT c1.celebid as CelebrityID, t1.movieName as MovieName
                FROM tableCelebrity as c1, tableMovie as t1
                WHERE c1.celebid = t1.celebid");
        }
    }

But this gives me an error at the line db.ExecuteQuery<tableCelebrity> : 但这在db.ExecuteQuery<tableCelebrity>行给出了一个错误:

Error 'MyProject.Models.MyDatabase' does not contain a definition for 'ExecuteQuery' and no extension method 'ExecuteQuery' accepting a first argument of type 'MyProject.Models.MyDatabase' could be found 错误'MyProject.Models.MyDatabase'不包含'ExecuteQuery'的定义,并且没有扩展方法'ExecuteQuery'接受类型为'MyProject.Models.MyDatabase'的第一个参数'

Is it possible with ASP.NET MVC?? 是否可以使用ASP.NET MVC? If yes, then what changes I have to perform in the method? 如果是,那么我必须在方法中执行哪些更改?

Please help me to do that. 请帮我这样做。

I am created Details method as below

public ActionResult ShortDetails(int? id, string tagname)
    {
        tblCelebrity tblcelebrity = db.tblCelebrities.SqlQuery<tblCelebrity>("SELECT * FROM dbo.tblCelebrity WHERE Celebrity_ID =" + id);

        if (tblcelebrity == null)
        {
            return HttpNotFound();
        }
        return View(tblcelebrity);
    }

And Details View accepting type as 和详细信息查看接受类型为

@model MyProject.Models.tblCelebrity

I also created tblCelebrity class in my project 我还在我的项目中创建了tblCelebrity类

But `tblCelebrity tblcelebrity = db.tblCelebrities.SqlQuery("SELECT * FROM dbo.tblCelebrity WHERE Celebrity_ID =" + id); 但是`tblCelebrity tblcelebrity = db.tblCelebrities.SqlQuery(“SELECT * FROM dbo.tblCelebrity WHERE Celebrity_ID =”+ id); this line gives error as The non-generic method 'System.Data.Entity.DbSet.SqlQuery(string, params object[])' cannot be used with type arguments 此行给出错误,因为非泛型方法'System.Data.Entity.DbSet.SqlQuery(string,params object [])'不能与类型参数一起使用

You want something similar to this : 你想要类似的东西:

using (var context = new BloggingContext())
{
    var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}

You can find tutorial for that here : http://msdn.microsoft.com/en-us/data/jj592907.aspx 你可以在这里找到教程: http//msdn.microsoft.com/en-us/data/jj592907.aspx

When I have received the error previously, it was because the user in the connection string did not have execute permissions on the DB. 当我之前收到错误时,这是​​因为连接字符串中的用户没有对DB的执行权限。 Once I used a user that had permissions, or used a "GRANT EXECUTION" statement into the query, everything resolved perfectly. 一旦我使用了具有权限的用户,或者在查询中使用了“GRANT EXECUTION”语句,一切都完美地解决了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM