-4

我已经编写了一个 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>

有人知道它是如何工作的吗?我搜索了很多,但什么都没有。

任何帮助表示赞赏:

4

1 回答 1

1

首先,将该代码移出视图并将其放入控制器中。您应该避免将数据访问代码放在视图中,因为您破坏了 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),您也将不必要地检索该列。

于 2013-07-31T17:04:08.147 回答