SQL语句 - 从条件 - MVC4中选择数据库中的数据

时间:2013-07-31 16:51:50

标签: asp.net asp.net-mvc

我编写了一个sql语句,用于从mvc4中选择数据库中的数据。

我尝试选择所有与数值比较的数据。

这是什么意思:

@{
    var db = Database.Open("DefaultConnection");
    var data = db.Query("SELECT * FROM Mag WHERE mytitle= model=>model.title");
}

我想提出过滤数据的条件。

然后在html中执行此操作:

 <ol>
        @foreach (var image in data)
        { 
           <li>
               <img src="@Url.Content(image.picpath)"/>
           </li>
        }
    </ol>

任何人都知道它是如何运作的?我经常搜索但不能做任何事情。

感谢任何帮助:

1 个答案:

答案 0 :(得分:1)

首先,将该代码移出视图并将其放入Controller中。您应该避免将数据访问代码放在View中,因为您正在破坏MVC模式。

其次,如果将该代码移动到Controller中的Action,则可以执行以下操作:

public ActionResult Index()
{
    var myModel = GetMyModel();//However you do it
    var db = Database.Open("DefaultConnection");
    //DON'T USE THE ACTUAL QUERY BELOW. IT EXPOSES YOU TO SQL INJECTION
    //USE PARAMETERS INSTEAD. I'm sure your db OBJECT allows you to use them. 
    var data = db.Query("SELECT * FROM Mag WHERE mytitle= model='{0}'",myModerl.Title);

    return View("YourView", data);
}

现在你的观点可以强烈输入:

@model IEnumerable<YourModel> 

<ol>
     @foreach (var image in Model)
     { 
        <li>
             <img src="@Url.Content(image.picpath)"/>
        </li>
     }
</ol>

最后,正如我在代码注释中提到的,不要使用字符串连接来构建SQL语句。我确信无论您使用什么来访问数据,都可以指定参数。

此外,永远不要select * from ...。只选择您需要的列,不再选择。如果将来某个列添加到该表中(例如,一个巨大的BLOB),您将不必要地检索该列。