-4

mvc4 のデータベースからデータを選択するための SQL ステートメントを作成しました。

私がしようとしているのは、値と比較するすべてのデータを選択することです。

ここに意味があります:

@{
    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 パターンを壊しているため、ビューにデータ アクセス コードを配置することは避けてください。

次に、そのコードをコントローラーのアクションに移動すると、次のことができます。

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 に答える