In this article I will explain with an example, how to select data from
MySQL database with
Stored Procedure using
Dapper library in ASP.Net MVC.
Installing Dapper package using Nuget
Database
I have made use of the following table Customers with the schema as follows.
I have already inserted few records in the table.
Note: You can download the database table SQL by clicking the download link below.
Stored Procedure
DELIMITER //
CREATE PROCEDURE Customers_GetCustomers()
BEGIN
SELECT CustomerId, Name,Country
FROM Customers
END//
DELIMITER ;
Model
The Model class consists of following properties.
public class CustomerModel
{
public int CustomerId { get; set; }
public string Name { get; set; }
public string Country { get; set; }
}
Namespaces
You will need to import the following namespaces.
using Dapper;
using System.Data;
using System.Configuration;
using MySql.Data.MySqlClient;
Controller
The Controller consists of following Action method.
Action Method for handling GET operation
Inside this Action method, first the connection is read from the Web.Config file.
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
string spName = "Customers_GetCustomer";
using (MySqlConnection con = new MySqlConnection(constr))
{
return View(con.Query<CustomerModel>(spName, commandType: CommandType.StoredProcedure));
}
}
}
View
HTML Markup
Inside the View, in the very first line the CustomerModel class is declared as IEnumerable which specifies that it will be available as a Collection.
For displaying the records, an HTML Table is used. A FOR EACH loop will be executed over the Model which will generate the HTML Table rows with the Customer records.
@model IEnumerable<CustomerModel>
@using Dapper_Select_SP_MySQL_MVC.Models
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<table cellpadding="0" cellspacing="0">
<tr>
<th>Customer Id</th>
<th>Name</th>
<th>Country</th>
</tr>
@foreach (CustomerModel customer in Model)
{
<tr>
<td>@customer.CustomerId</td>
<td>@customer.Name</td>
<td>@customer.Country</td>
</tr>
}
</table>
</body>
</html>
Screenshot
Downloads