J'ai un contrôleur de travail pour une autre procédure stockée dans la base de données, mais j'essaie de tester un autre.Appel de procédure stockée avec paramètres dans ASP.NET MVC
Lorsque je demande l'URL;
Je reçois le message d'erreur suivant, ce qui est compréhensible, mais je ne peux pas sembler trouver pourquoi il se produit;
Procédure ou fonction 'esp_GetPlacesWithinGeoSpan' attend paramètre '@MinLat', qui n'a pas été fourni .
Ceci est le code que j'utilise.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Data;
using System.Text;
using System.Data.SqlClient;
namespace prototype.Controllers
{
public class MapController : Controller
{
//Initial variable definitions
//Array with chars to be used with the Trim() methods
char[] lastComma = { ',' };
//Minimum and maximum lat/longs for queries
float _minLat;
float _maxLat;
float _minLng;
float _maxLng;
//Creates stringbuilder object to store SQL results
StringBuilder json = new StringBuilder();
//Defines which SQL-server to connect to, which database, and which user
SqlConnection con = new SqlConnection(...connection string here...);
//
// HTTP-GET: /Map/
public string CallProcedure_getPlaces(float minLat, float maxLat, float minLng, float maxLng)
{
con.Open();
using (SqlCommand cmd = new SqlCommand("esp_GetPlacesWithinGeoSpan", con))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@MinLat", _minLat);
cmd.Parameters.AddWithValue("@MaxLat", _maxLat);
cmd.Parameters.AddWithValue("@MinLng", _minLng);
cmd.Parameters.AddWithValue("@MaxLng", _maxLng);
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
json.AppendFormat("\"{0}\":{{\"c\":{1},\"f\":{2}}},", reader["PlaceID"], reader["PlaceName"], reader["SquareID"]);
}
}
con.Close();
}
return "{" + json.ToString().TrimEnd(lastComma) + "}";
}
//http://host.com/Map?minLat=0&maxLat=50&minLng=0&maxLng=50
public ActionResult Index(float minLat, float maxLat, float minLng, float maxLng)
{
_minLat = minLat;
_maxLat = maxLat;
_minLng = minLng;
_maxLng = maxLng;
return Content(CallProcedure_getPlaces(_minLat, _maxLat, _minLng, _maxLng));
}
}
}
Une aide pour résoudre ce problème serait grandement appréciée.
En passant, vous ne devriez vraiment pas accéder aux données dans vos contrôleurs. Cela est mieux réalisé en utilisant une autre couche, telle qu'un référentiel. –
Pourriez-vous développer cela? Ou peut-être me montrer un exemple? Je ne suis pas très familier avec asp.net du tout, je pensais juste que c'était une façon simple et donc décente de le faire. J'aimerais apprendre. – cc0
@ cc0 Voici un excellent exemple d'utilisation d'ADO.net (SqlConnection) avec un référentiel dans MVC: http://stackoverflow.com/a/6694195/555798 – MikeTeeVee