web-dev-qa-db-fra.com

utilisation de requêtes simples dans ASP.NET MVC

J'ai vérifié google mais rien trouvé bon. Je cherche des requêtes traditionnelles SQL dans MVC au lieu du cadre Entity, etc. Ce serait donc bien si vous me fournissiez des exemples.

J'ai commencé à apprendre MVC mais beaucoup d'exemples utilisent des variables linq à SQL et EF etc. que je ne souhaite pas utiliser du tout. Je souhaite utiliser de vieilles requêtes SQL simples dans la couche modèle.

5
user3111824

Exemple le plus simple:

//Domain Class
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;

namespace BanjoOnMyKnee.Models
{
    public class DomainModel
    {
        public string connectionString = ".\\SQLEXPRESS; Initial-Catalog=YourDBName; Integrated-Security=true";
        public void CreateSomething(ViewModel model)
        {
            using(SqlConnection connection = new SqlConnection(connectionString))
            using (SqlCommand command = new SqlCommand("",connection))
            {
                command.CommandText = "insert into Names values(@Name)";
                command.Parameters.AddWithValue("@Name", model.Name);
                command.ExecuteNonQuery();
            }
        }

        public ViewModel FindSomething(int id)
        {
            var model = new ViewModel();
            using (SqlConnection connection = new SqlConnection(connectionString))
            using (SqlCommand command = new SqlCommand("", connection))
            {
                command.CommandText = "select * from Names where Id=@Id";
                command.Parameters.AddWithValue("@Id",id);
                SqlDataReader reader = command.ExecuteReader();
                model.Id = id;
                model.Name = reader["Name"].ToString();
            }
            return model;
        }

        public void DeleteSomething(ViewModel model)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            using (SqlCommand command = new SqlCommand("", connection))
            {
                command.CommandText = "delete from Names where Id=@Id";
                command.Parameters.AddWithValue("@Id", model.Id);
                command.ExecuteNonQuery();
            }
        }

        public void EditSomething(ViewModel model)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            using (SqlCommand command = new SqlCommand("", connection))
            {
                command.CommandText = "Update Names set Name=@Name where Id=@Id";
                command.Parameters.AddWithValue("@Name", model.Name);
                command.Parameters.AddWithValue("@Id", model.Id);
                command.ExecuteNonQuery();
            }
        }
    }
}

Et voici ma classe de contrôleur

//My Controller class
public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }

    //
    // GET: /Home/Create

    public ActionResult Create()
    {
        return View(new ViewModel());
    }

    //
    // POST: /Home/Create

    [HttpPost]
    public ActionResult Create(ViewModel vm)
    {
        try
        {
            var domainModel = new DomainModel();
            domainModel.CreateSomething(vm);
            return RedirectToAction("Index");
        }
        catch
        {
            return View(new ViewModel());
        }
    }

    //
    // GET: /Home/Edit/5

    public ActionResult Edit(int id)
    {
        ViewModel model = new DomainModel().FindSomething(id);
        return View(model);
    }


    [HttpPost]
    public ActionResult Edit(ViewModel editModel)
    {
        try
        {
            var dm = new DomainModel();
            dm.EditSomething(editModel);
            return RedirectToAction("Index");
        }
        catch
        {
            return View(new ViewModel());
        }
    }
 }

Ma classe ViewModel

//My ViewModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace BanjoOnMyKnee.Models
{
    public class ViewModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

Et ma vue "Créer"

//My view
@model BanjoOnMyKnee.Models.ViewModel

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using(Html.BeginForm()){
    @Html.HiddenFor(m => m.Id);
    <p> Name : 
        Html.EditorFor(m=>m.Name);</p>
    <input type="submit" value="Create" />
}
12
Aniket Inge

que diriez-vous d’écrire des procédures stockées et de simplement les invoquer en tant que méthodes en ajoutant simplement un LinQ to Sql Class dans votre projet, cela facilitera beaucoup le traitement de la base de données
après avoir effectué les procédures stockées nécessaires:

  • faites un clic droit dans votre projet puis ajoutez un nouvel élément puis choisissez une classe LinQ to SQL et nommez-le
  • faites glisser vos procédures stockées précédemment faites
  • créer une instance de votre linq to sql class

alors vous pouvez invoquer vos procédures stockées et les membres de cette classe
http://msdn.Microsoft.com/en-us/library/bb386946(v=vs.110).aspx ce lien peut également vous aider

0
Aya Mohammad

Il suffit donc d'ajouter un Helper class et d'écrire ce dont vous avez besoin (connexions SQL, commandes, requêtes ...), puis d'appeler ces méthodes d'assistance à partir de votre contrôleur. Ce n'est pas différent de l'ancien style

Classe d'assistance statique:

public static class HelperFunctions
{
    private static string connString = "your connection string";

    public static IEnumerable<User> GetAllUsers()
    {
        using (var conn = new SqlConnection(connString))
        using (var cmd = new SqlCommand(connection:conn))
        {
            // set your command text, execute your command 
            // get results and return
        }
    }

Dans votre contrôleur:

public ActionResult Users()
    {
      // Get user list
        IEnumerable<User> users = HelperFunctions.GetAllUsers();

        // Return your view and pass it to your list
        return View(users);
    }

Dans votre vue, définissez votre modèle de vue:

@model IEnumerable<User>

Ensuite, vous pouvez accéder à votre liste d'utilisateurs à partir de votre vue, par exemple:

foreach(var user in Model)
{
   <p> @user.Name </p>
}

Model représente votre modèle de vue actuel. Si vous souhaitez accéder à plusieurs listes à partir de votre vue, vous pouvez utiliser ViewBag ou ViewData. Consultez cet article pour plus d'informations: http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-2cplusViewBagplusandplusTem

0
Selman Genç

En utilisant le cadre d'entité cela peut être fait

Entitiesdb db = new Entitiesdb();
string query="delete from tableA where id=@id"
db.Database.ExecuteSqlCommand(query, @id);
0
Imran