.NET Web API with C# for Beginners
Modern applications rarely work alone. Mobile apps, websites, desktop applications, smart devices, and cloud platforms constantly exchange information. Behind this communication lies one of the most important technologies in software development: APIs.
If you have ever ordered food online, booked a cab, checked your bank balance, or used social media, you have interacted with APIs.
For developers working with Microsoft technologies, .NET Web API is one of the most powerful frameworks for building modern, scalable, and secure applications.
This beginner-friendly guide explains .NET Web API with C# using practical examples and real-world scenarios. Instead of focusing only on theory, we will understand how businesses use APIs and how developers create them.
Whether you are a student, fresher, or working professional, this guide will help you build a strong foundation in .NET Web API development.
What is an API?
API stands for Application Programming Interface.
An API acts as a messenger between two software systems.
Imagine you are sitting in a restaurant.
You do not go directly into the kitchen and prepare your own food.
Instead:
- You place an order with the waiter.
- The waiter carries your request to the kitchen.
- The kitchen prepares the food.
- The waiter brings the food back to you.
In this example:
Customer = Client Application
Waiter = API
Kitchen = Server Application
Food = Data
The API acts as a bridge between the client and server.
What is a Web API?
A Web API is an API that works over the internet using HTTP protocols.
Examples:
When a weather application shows today’s temperature, it fetches data through a Web API.
When a mobile banking app displays account balance, it communicates with a banking API.
When an ecommerce website displays products, it retrieves product information through APIs.
A Web API allows applications built using different technologies to communicate with each other.
Why Learn .NET Web API?
Many enterprise applications worldwide are built using Microsoft technologies.
Major industries using .NET include:
Banking
Healthcare
Insurance
Ecommerce
Government
Education
Manufacturing
Cloud Services
Benefits of learning .NET Web API:
High demand in software companies
Excellent salary opportunities
Easy integration with frontend frameworks
Cloud-ready architecture
Scalable and secure development
Cross-platform support
If you want a career in backend development, .NET Web API is a valuable skill.
Understanding REST APIs
Most Web APIs today follow REST principles.
REST stands for (Representational State Transfer) An architectural design style created by Dr. Roy Fielding in 2000 to define how modern web systems should organize and transfer data.
A REST API uses standard HTTP methods for communication.
Core Rules of REST
- Stateless: The server does not save any client session data; each request must contain all the information needed to process it.
- Client-Server Separation: The user interface (client) and data storage (server) operate independently.
- Cacheable: Responses must define themselves as cacheable or not to improve web performance.
- Uniform Interface: Data is always exposed via predictable web addresses called Uniform Resource Identifiers (URIs). Data is typically formatted using lightweight JSON or XML
The most common HTTP methods are:
GET
POST
PUT
DELETE
These methods correspond to CRUD operations.
CRUD stands for:
Create
Read
Update
Delete
Let’s understand this using a student management system.
Example: Student Management System
Suppose a college wants to manage student records.
Operations include:
Add student
View students
Update student details
Delete student
REST APIs make this easy.
Get All Students
HTTP Method:
GET
API Endpoint:
/api/students
Result:
Returns all student records.
Get Single Student
HTTP Method:
GET
Endpoint:
/api/students/1
Result:
Returns details of student ID 1.
Add Student
HTTP Method:
POST
Endpoint:
/api/students
Result:
Creates a new student record.
Update Student
HTTP Method:
PUT
Endpoint:
/api/students/1
Result:
Updates student information.
Delete Student
HTTP Method:
DELETE
Endpoint:
/api/students/1
Result:
Deletes the student record.
Setting Up Your First .NET Web API Project
Prerequisites:
Visual Studio 2022
.NET 8 SDK
SQL Server
Postman
Create a new project:
Open Visual Studio
Select Create New Project
Choose ASP.NET Core Web API
Enter project name
Click Create
Visual Studio automatically generates the project structure.
Understanding Project Structure
A typical Web API project contains:
Controllers
Models
Services
Repositories
Program.cs
appsettings.json
Each folder has a specific responsibility.
What are Controllers?
Controllers receive requests from users and return responses.
Think of a controller as a receptionist.
When a request arrives:
Controller receives it
Processes it
Returns the result
Example:
StudentController
Handles all student-related operations.
Creating Your First API
Create a controller.
using Microsoft.AspNetCore.Mvc;
namespace StudentAPI.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class StudentController : ControllerBase
{
[HttpGet]
public IActionResult GetStudents()
{
return Ok("Students Retrieved Successfully");
}
}
}
When users call:
/api/student
The API returns:
Students Retrieved Successfully
Understanding API Routing
Routing tells the application which method should execute when a URL is called.
Example:
[Route("api/[controller]")]
This automatically creates:
/api/student
Understanding Models
Models represent data structures.
Example Student Model:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Course { get; set; }
public string Email { get; set; }
}
This model represents student information.
Returning Data from API
Instead of returning text, APIs usually return JSON.
Example:
[HttpGet]
public IActionResult GetStudent()
{
var student = new Student
{
Id = 1,
Name = "Rahul",
Course = "Full Stack Development",
Email = "rahul@gmail.com"
};
return Ok(student);
}
Output:
{
"id": 1,
"name": "Rahul",
"course": "Full Stack Development",
"email": "rahul@gmail.com"
}
JSON is the most common format used by APIs.
Understanding Dependency Injection
Dependency Injection is one of the most important concepts in .NET.
It helps:
Reduce code duplication
Improve maintainability
Increase testability
Large companies use Dependency Injection extensively.
Without it, managing applications becomes difficult.
Connecting API with SQL Server
Most applications store data in databases.
Example:
Student details
Employee records
Orders
Payments
Customer information
All these are stored in databases.
Entity Framework Core is commonly used with .NET Web API.
Benefits:
Less code
Easy database operations
Automatic query generation
Improved productivity
Example: Ecommerce API
Imagine an online shopping platform.
APIs may include:
Product API
Category API
Order API
Payment API
Customer API
Example Product Response:
{
"productId": 101,
"productName": "Laptop",
"price": 65000,
"stock": 50
}
Frontend applications consume this API and display products.
What is Swagger?
Swagger automatically documents APIs.
Benefits:
Easy testing
Developer-friendly
Auto-generated documentation
No need for external tools initially
How to Install?
open Tools → NuGet Package Manager → Package Manager Console and run:
dotnet add package Swashbuckle.AspNetCore.SwaggerUI
Open Program.cs.
Overwrite below code:
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint(“/openapi/v1.json”, “My API v1”);
});
}
Access Swagger:
https://localhost/swagger
It displays all available APIs.
Testing APIs with Postman
Postman is widely used by developers.
It helps:
Send requests
Inspect responses
Debug APIs
Validate functionality
Testing APIs before frontend integration is a standard industry practice.
Understanding Authentication
Not all APIs should be public.
Sensitive data requires authentication.
Example:
Banking APIs
Payment APIs
Healthcare APIs
Employee Management Systems
Authentication verifies who the user is.
JWT Authentication
JWT stands for JSON Web Token.
It is one of the most commonly used authentication mechanisms.
Process:
User logs in
Server validates credentials
Server generates token
Client sends token with every request
API verifies token
Access granted
This method is widely used in enterprise applications.
Error Handling in APIs
Errors are inevitable.
Good APIs provide meaningful responses.
Bad Example:
Something Went Wrong
Good Example:
{
"status": 404,
"message": "Student Not Found"
}
Clear error messages improve user experience.
API Versioning
Applications evolve over time.
Versioning helps avoid breaking existing clients.
Examples:
/api/v1/students
/api/v2/students
Large organizations always implement versioning strategies.
Mini Project for Beginners
Create Student Management Database First.
Create Database TestDB;
Use TestDB;
CREATE TABLE Students
(
StudentId INT IDENTITY(1,1) PRIMARY KEY,
RollNumber VARCHAR(20) UNIQUE,
FirstName VARCHAR(100),
LastName VARCHAR(100),
Gender VARCHAR(10),
Mobile VARCHAR(15),
Email VARCHAR(150),
Address VARCHAR(500),
RegistrationDate DATETIME DEFAULT GETDATE(),
IsActive BIT DEFAULT 1
);
CREATE TABLE Users
(
UserId INT IDENTITY(1,1) PRIMARY KEY,
StudentId INT NULL,
Username VARCHAR(100) UNIQUE,
StuPassword VARCHAR(500),
CreatedDate DATETIME DEFAULT GETDATE()
);
CREATE TABLE StudentProfiles
(
ProfileId INT IDENTITY(1,1) PRIMARY KEY,
StudentId INT,
FatherName VARCHAR(150),
MotherName VARCHAR(150),
GuardianMobile VARCHAR(15),
BloodGroup VARCHAR(10),
AadhaarNumber VARCHAR(20)
);
CREATE TABLE Courses
(
CourseId INT IDENTITY(1,1) PRIMARY KEY,
CourseCode VARCHAR(20),
CourseName VARCHAR(200),
DurationMonths INT,
CourseFee DECIMAL(18,2),
Description VARCHAR(MAX)
);
CREATE TABLE StudentCourses
(
EnrollmentId INT IDENTITY(1,1) PRIMARY KEY,
StudentId INT,
CourseId INT,
EnrollmentDate DATETIME DEFAULT GETDATE(),
Status VARCHAR(50)
);
CREATE TABLE Fees
(
FeeId INT IDENTITY(1,1) PRIMARY KEY,
StudentId INT,
CourseId INT,
TotalFee DECIMAL(18,2),
PaidAmount DECIMAL(18,2),
BalanceAmount DECIMAL(18,2)
);
CREATE TABLE FeeTransactions
(
TransactionId INT IDENTITY(1,1) PRIMARY KEY,
FeeId INT,
AmountPaid DECIMAL(18,2),
PaymentDate DATETIME DEFAULT GETDATE(),
PaymentMode VARCHAR(50),
Remarks VARCHAR(500)
);
CREATE TABLE Subjects
(
SubjectId INT IDENTITY(1,1) PRIMARY KEY,
CourseId INT,
SubjectName VARCHAR(200)
);
CREATE TABLE Marks
(
MarkId INT IDENTITY(1,1) PRIMARY KEY,
StudentId INT,
SubjectId INT,
MaxMarks INT,
ObtainedMarks INT,
ExamDate DATE
);
CREATE TABLE Attendance
(
AttendanceId INT IDENTITY(1,1) PRIMARY KEY,
StudentId INT,
AttendanceDate DATE,
Status VARCHAR(20)
);
CREATE TABLE Faculty
(
FacultyId INT IDENTITY(1,1) PRIMARY KEY,
FacultyName VARCHAR(150),
Mobile VARCHAR(20),
Email VARCHAR(150),
Specialization VARCHAR(200)
);
CREATE TABLE FacultyCourses
(
FacultyCourseId INT IDENTITY(1,1) PRIMARY KEY,
FacultyId INT,
CourseId INT
);
- Open Visual Studio
- Create a new Project TestStudentAPI
- Select Template “ASP .Net Core Web API”
-
Setting Up Entity Framework Core with SQL Server in ASP.NET Core MVC
Step 1: Install Required NuGet Packages
Open Tools → NuGet Package Manager → Package Manager Console and install the following packages:
Install-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.Tools Install-Package Microsoft.EntityFrameworkCore.DesignInstall the Entity Framework Core CLI tool:
dotnet tool install --global dotnet-ef
Step 2: Create the Database Context
Create a new folder named Data in the project root.
Inside the Data folder, create a class named ApplicationDbContext.cs. This class serves as the primary bridge between your ASP.NET Core application and the SQL Server database.
using Microsoft.EntityFrameworkCore; public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } // Maps to the Products table in the database //public DbSet<Student> Students { get; set; } }
Step 3: Configure the Connection String
Open appsettings.json and add a connection string.
Generic Example
{ "ConnectionStrings": { "DefaultConnection": "Server=YOUR_SERVER_NAME;Database=YourDatabaseName;Trusted_Connection=True;TrustServerCertificate=True;" } }Example Using SQL Server Express
Replace the connection string with your SQL Server instance details:
{ "ConnectionStrings": { "DefaultConnection": "Data Source=ASHUTOSH\\SQLEXPRESS;Initial Catalog=IITMDB;Integrated Security=True;Encrypt=False;Trust Server Certificate=True" } }
Step 4: Register the DbContext
Open Program.cs.
After the following line:
builder.Services.AddControllersWithViews();Register the database context:
using Microsoft.EntityFrameworkCore; var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString));
Step 5: Scaffold Existing Database Models (Optional)
If your database already exists and you want Entity Framework Core to generate model classes automatically, open Tools → NuGet Package Manager → Package Manager Console and run:
dotnet ef dbcontext scaffold "Name=ConnectionStrings:DefaultConnection" Microsoft.EntityFrameworkCore.SqlServer -o Models --forceCommand Explanation
-
Name=ConnectionStrings:DefaultConnection – Uses the connection string from
appsettings.json. -
Microsoft.EntityFrameworkCore.SqlServer – Specifies the SQL Server provider.
-
-o Models – Generates entity classes inside the
Modelsfolder. -
–force – Overwrites existing generated files.
Project Structure
ProjectName │ ├── Data │ └── ApplicationDbContext.cs │ ├── Models │ └── Product.cs │ ├── Controllers │ ├── Views │ ├── appsettings.json │ └── Program.cs
Your ASP.NET Core MVC application is now configured to use Entity Framework Core with SQL Server.
-
How to Implement JWT
JWT stands for JSON Web Token.
It is a secure token sent by the server after successful login.
Instead of sending the username and password on every request, the client sends the JWT token.
JWT Architecture
Client (Angular/Postman)
|
| Login (Username + Password)
v
ASP.NET Core Web API
|
| Validate User
v
SQL Server
|
| Generate JWT
v
Client Stores Token
|
| Authorization: Bearer <Token>
v
Protected API
A JWT has three parts: xxxxx.yyyyy.zzzzz
Header(Algorithm, Token Type)Generated using Secret Key, Header, Payload
.
Payload(User Information)
.
Signature()
Install JWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Configure appsettings.json
"Jwt": {
"Key": "My@#Very@$Strong@^Secret@*Key@!12345",
"Issuer": "StudentAPI",
"Audience": "StudentApp"
}
Configure Authentication
In Program.cs:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters =
new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey =
new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(
builder.Configuration["Jwt:Key"]))
};
});
Enable middleware:
app.UseAuthentication();
app.UseAuthorization();
Create UserLogin Table in Database
Create table UserLogin
(
UserLoginID int identity(1,1) Primary key,
UserName varchar(50),
UserPassword varchar(50)
)
Go
Insert into UserLogin(UserName,UserPassword) values(‘Admin’,’12345′);
Go
Run Below command on PMC
dotnet ef dbcontext scaffold “Name=ConnectionStrings:DefaultConnection” Microsoft.EntityFrameworkCore.SqlServer -o Models -t UserLogin –force
Generate JWT Token Function in c#
Create a class ApplicationOAuthProvider.cs inside Providers Folder and copy paste below code.
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using System.Text.Json.Serialization;
using WebApplication4.Models;
using Microsoft.Extensions.Configuration;
namespace WebApplication4.Controllers
{
[Route(“api/token”)]
[ApiController]
public class ApplicationOAuthProvider : ControllerBase
{
private readonly IConfiguration _configuration;
private readonly IitmdbContext _context;
// 1. Inject IConfiguration via the constructor
public ApplicationOAuthProvider(IConfiguration configuration, IitmdbContext context)
{
_configuration = configuration;
_context = context;
}
[HttpPost]
public IActionResult Login([FromForm] LoginModel context)
{
UserLogin results = new UserLogin();
Int32 userID = 0;
string userType = “”;
UserLogin entry;
entry = _context.UserLogins.AsNoTracking().Where(record => record.UserName == context.UserName && record.UserPassword==context.Password).FirstOrDefault();
if (entry == null)
{
return StatusCode(401, new { Error = “User Not Found” });
}
else if (entry.UserLoginId > 0)
{
var token = GenerateJwtToken(entry.UserName, userID);
return Ok(new AuthResponse()
{
access_token = token,
token_type = “bearer”,
expires_in = 86399,
userName = context.UserName,
UserLoginID = userID,
issued = DateTime.UtcNow,
expires = DateTime.UtcNow.AddHours(1)
});
}
return Unauthorized();
}
private string GenerateJwtToken(string user, int Id)
{
var claim = new[]
{
new Claim(JwtRegisteredClaimNames.Name, user),
new Claim(JwtRegisteredClaimNames.NameId, Id.ToString()),
new Claim(ClaimTypes.Role, “Admin”)
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration[“Jwt:Key”]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: _configuration[“Jwt:Issuer”] ,
audience: _configuration[“Jwt:Audience”] ,
claims: claim,
expires: DateTime.UtcNow.AddHours(1),
signingCredentials: creds);
var claims = claim.ToList();
var rol = claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value)
.ToList();
var tokenHandler = new JwtSecurityTokenHandler();
var tokenString = tokenHandler.WriteToken(token);
return tokenString;
}
}
public class LoginModel
{
[Required(ErrorMessage = “Please enter UserName”)]
public string UserName { get; set; }
[Required(ErrorMessage = “Please enter Password”)]
public string Password { get; set; }
}
public class AuthResponse
{
public string access_token { get; set; }
public string token_type { get; set; }
public int expires_in { get; set; }
public string refresh_token { get; set; }
public string userName { get; set; }
[JsonPropertyName(“.issued”)]
public DateTime issued { get; set; }
[JsonPropertyName(“.expires”)]
public DateTime expires { get; set; }
public int UserLoginID { get; set; }
}
}
Best Practices for Beginners
Use meaningful endpoint names
Validate user inputs
Handle exceptions properly
Use Dependency Injection
Implement authentication
Follow REST standards
Write clean code
Document APIs
Use proper HTTP status codes
Test thoroughly
These practices distinguish professional developers from beginners.
Calling SQL Server Stored Procedures using Entity Framework Core
Part 1: What is a Stored Procedure?
Instead of sending a long SQL query from C#, you call a predefined procedure stored inside SQL Server.
Part 2: Why Use Stored Procedures?
Advantages:
- Better performance (execution plan can be reused)
- Improved security (users don’t need direct table access)
- Reusable business logic
- Easier maintenance
- Centralized SQL logic
Part 3: Create Sample Table
CREATE TABLE Students
(
StudentId INT IDENTITY PRIMARY KEY,
Name VARCHAR(100),
Email VARCHAR(100),
Course VARCHAR(100)
);
Part 4: Create Stored Procedure
Get All Students
CREATE PROCEDURE sp_GetStudents
AS
BEGIN
SELECT * FROM Students;
END
Execute in SQL Server:
EXEC sp_GetStudents;
Part 5: Call Stored Procedure Using Entity Framework Core
Suppose you already have:
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Course { get; set; }
}
Call the stored procedure:
var students = await _context.Students
.FromSqlRaw("EXEC sp_GetStudents")
.ToListAsync();
Explanation
FromSqlRaw()executes raw SQL or a stored procedure.- Entity Framework maps the returned rows to
Studentobjects.
Part 6: Stored Procedure with Input Parameter
SQL
CREATE PROCEDURE sp_GetStudentById
@StudentId INT
AS
BEGIN
SELECT *
FROM Students
WHERE StudentId = @StudentId;
END
C#
var student = await _context.Students
.FromSqlRaw(
"EXEC sp_GetStudentById @StudentId={0}",
id)
.FirstOrDefaultAsync();
Part 7: Insert Using Stored Procedure
SQL
CREATE PROCEDURE sp_InsertStudent
(
@Name VARCHAR(100),
@Email VARCHAR(100),
@Course VARCHAR(100)
)
AS
BEGIN
INSERT INTO Students
VALUES
(
@Name,
@Email,
@Course
);
END
C#
Since no data is returned:
await _context.Database.ExecuteSqlRawAsync(
"EXEC sp_InsertStudent {0},{1},{2}",
student.Name,
student.Email,
student.Course);
Part 8: Update Stored Procedure
SQL
CREATE PROCEDURE sp_UpdateStudent
(
@StudentId INT,
@Name VARCHAR(100),
@Email VARCHAR(100),
@Course VARCHAR(100)
)
AS
BEGIN
UPDATE Students
SET
Name=@Name,
Email=@Email,
Course=@Course
WHERE StudentId=@StudentId;
END
C#
await _context.Database.ExecuteSqlRawAsync(
"EXEC sp_UpdateStudent {0},{1},{2},{3}",
student.StudentId,
student.Name,
student.Email,
student.Course);
Part 9: Delete Stored Procedure
SQL
CREATE PROCEDURE sp_DeleteStudent
(
@StudentId INT
)
AS
BEGIN
DELETE FROM Students
WHERE StudentId=@StudentId;
END
C#
await _context.Database.ExecuteSqlRawAsync(
"EXEC sp_DeleteStudent {0}",
id);
Part 10: Using SQL Parameters (Recommended)
Instead of string concatenation, use parameters.
var idParameter =
new SqlParameter("@StudentId", 1);
var student = await _context.Students
.FromSqlRaw(
"EXEC sp_GetStudentById @StudentId",
idParameter)
.ToListAsync();
This approach is safer and helps protect against SQL injection.
Part 11: Output Parameters
SQL
CREATE PROCEDURE sp_GetStudentCount
@TotalStudents INT OUTPUT
AS
BEGIN
SELECT @TotalStudents = COUNT(*)
FROM Students;
END
C#
var output =
new SqlParameter("@TotalStudents",
System.Data.SqlDbType.Int)
{
Direction =
System.Data.ParameterDirection.Output
};
await _context.Database.ExecuteSqlRawAsync(
"EXEC sp_GetStudentCount @TotalStudents OUTPUT",
output);
int total =
(int)output.Value;
Part 12: Returning Multiple Records
var students =
await _context.Students
.FromSqlRaw("EXEC sp_GetStudents")
.ToListAsync();
Entity Framework automatically maps each row to a Student object.
Part 13: When to Use FromSqlRaw vs ExecuteSqlRaw
| Method | Use Case |
|---|---|
FromSqlRaw() |
SELECT queries that return rows |
ExecuteSqlRaw() |
INSERT, UPDATE, DELETE, or procedures that don’t return result sets |
Part 14: Common Mistakes
❌ Using ExecuteSqlRaw() for a SELECT procedure.
❌ Returning columns that don’t match your model.
❌ Building SQL strings manually with user input.
❌ Forgetting await on async database calls.
Part 15: Best Practices
- Use stored procedures for complex business logic.
- Always pass parameters safely.
- Keep stored procedure names meaningful (e.g.,
sp_GetStudentById). - Prefer asynchronous methods (
ToListAsync,ExecuteSqlRawAsync). - Handle exceptions with
try-catchand log errors. - Use Entity Framework LINQ for simple CRUD, and stored procedures where they add value (complex queries, reporting, or performance-sensitive operations).
Interview Questions
What is a Stored Procedure?
A precompiled SQL program stored in SQL Server that can be executed by name.
Why use Stored Procedures?
- Better performance for repeated execution
- Improved security
- Reusable business logic
- Easier maintenance
Difference between FromSqlRaw() and ExecuteSqlRaw()
FromSqlRaw()returns data and maps it to entities.ExecuteSqlRaw()executes commands that modify data or perform actions without returning entities.
Can Entity Framework call Stored Procedures?
Yes. Entity Framework Core supports calling stored procedures using FromSqlRaw() for queries and ExecuteSqlRaw() for commands.
Architecture Flow
Web API
↓
Entity Framework Core
↓
Stored Procedure
↓
SQL Server
↓
Result
↓
JSON Response
What is ADO.NET?
ADO.NET is Microsoft’s library for communicating directly with databases.
Step 1: Create Connection String
string connectionString =
"Server=.;Database=StudentDB;Trusted_Connection=True;TrustServerCertificate=True;";
Step 2: Create Stored Procedure
CREATE PROCEDURE sp_GetStudents
AS
BEGIN
SELECT * FROM Students
END
Step 3: Read Data
using System.Data;
using System.Data.SqlClient;
string connectionString =
"Server=.;Database=StudentDB;Trusted_Connection=True;TrustServerCertificate=True;";
using(SqlConnection con = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("sp_GetStudents", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
Console.WriteLine(reader["StudentId"]);
Console.WriteLine(reader["Name"]);
Console.WriteLine(reader["Email"]);
}
reader.Close();
}
Execution Flow
Open Connection
│
▼
Create SqlCommand
│
▼
Execute Stored Procedure
│
▼
Read Records
│
▼
Close Connection
Step 4: Get Student By Id
SQL
CREATE PROCEDURE sp_GetStudentById
@StudentId INT
AS
BEGIN
SELECT *
FROM Students
WHERE StudentId=@StudentId
END
C#
SqlCommand cmd =
new SqlCommand("sp_GetStudentById", con);
cmd.CommandType =
CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@StudentId",1);
con.Open();
SqlDataReader reader =
cmd.ExecuteReader();
Step 5: Insert Student
SQL
CREATE PROCEDURE sp_InsertStudent
(
@Name VARCHAR(100),
@Email VARCHAR(100),
@Course VARCHAR(100)
)
AS
BEGIN
INSERT INTO Students
VALUES
(
@Name,
@Email,
@Course
)
END
C#
SqlCommand cmd =
new SqlCommand("sp_InsertStudent",con);
cmd.CommandType =
CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Name","Rahul");
cmd.Parameters.AddWithValue("@Email","rahul@gmail.com");
cmd.Parameters.AddWithValue("@Course","C#");
con.Open();
int rows =
cmd.ExecuteNonQuery();
Console.WriteLine(rows);
ExecuteNonQuery()
Used for
- INSERT
- UPDATE
- DELETE
Returns affected rows.
Step 6: Update Student
SqlCommand cmd =
new SqlCommand("sp_UpdateStudent",con);
cmd.CommandType =
CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@StudentId",1);
cmd.Parameters.AddWithValue("@Name","Amit");
cmd.Parameters.AddWithValue("@Email","amit@gmail.com");
cmd.Parameters.AddWithValue("@Course","ASP.NET");
con.Open();
cmd.ExecuteNonQuery();
Step 7: Delete Student
SqlCommand cmd =
new SqlCommand("sp_DeleteStudent",con);
cmd.CommandType =
CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@StudentId",1);
con.Open();
cmd.ExecuteNonQuery();
Step 8: ExecuteScalar()
Suppose procedure returns
SELECT COUNT(*)
FROM Students
Call
SqlCommand cmd =
new SqlCommand("sp_TotalStudents",con);
cmd.CommandType =
CommandType.StoredProcedure;
con.Open();
int total =
Convert.ToInt32(
cmd.ExecuteScalar());
Console.WriteLine(total);
ExecuteScalar()
Returns
Single Value
Example
- Count
- Sum
- Max
- Min
Step 9: Output Parameter
SQL
CREATE PROCEDURE sp_GetCount
(
@Total INT OUTPUT
)
AS
BEGIN
SELECT @Total =
COUNT(*)
FROM Students
END
C#
SqlCommand cmd =
new SqlCommand("sp_GetCount",con);
cmd.CommandType =
CommandType.StoredProcedure;
SqlParameter output =
new SqlParameter("@Total",
SqlDbType.Int);
output.Direction =
ParameterDirection.Output;
cmd.Parameters.Add(output);
con.Open();
cmd.ExecuteNonQuery();
Console.WriteLine(output.Value);
Step 10: Return Value
SQL
RETURN 100;
C#
SqlParameter returnValue =
new SqlParameter();
returnValue.Direction =
ParameterDirection.ReturnValue;
cmd.Parameters.Add(returnValue);
cmd.ExecuteNonQuery();
Console.WriteLine(returnValue.Value);
Three Most Important Execute Methods
| Method | Returns | Used For |
|---|---|---|
| ExecuteReader() | Multiple Rows | SELECT |
| ExecuteScalar() | Single Value | COUNT, SUM |
| ExecuteNonQuery() | Number of Rows Affected | INSERT, UPDATE, DELETE |
Complete CRUD Flow
User Clicks Save
│
▼
Controller
│
▼
SqlConnection
│
▼
SqlCommand
│
▼
Stored Procedure
│
▼
SQL Server
│
▼
Rows Affected
│
▼
Success Message
Best Practices
Always use using blocks to automatically close connections.
using(SqlConnection con = new SqlConnection(cs))
{
}
Use parameterized queries.
cmd.Parameters.AddWithValue("@Name",name);
Never write
string sql =
"SELECT * FROM Students WHERE Name='"+name+"'";
This is vulnerable to SQL Injection.
Use Try Catch
try
{
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
con.Close();
}
Common Interview Questions
What is Web API?
Difference between API and Web API?
What is REST?
What are HTTP methods?
What is Dependency Injection?
What is Entity Framework Core?
What is JWT Authentication?
What is Middleware?
What is Swagger?
What are HTTP status codes?
These questions frequently appear in .NET interviews.
Career Opportunities After Learning .NET Web API
Learning .NET Web API opens doors to multiple career paths.
Roles include:
.NET Developer
Backend Developer
Full Stack Developer
Software Engineer
Cloud Developer
API Developer
Microservices Developer
Solution Developer
Companies hiring .NET professionals include:
Microsoft
Infosys
Tata Consultancy Services
Wipro
Accenture
Capgemini
Cognizant
Demand for backend developers continues to grow across industries.
Thoughts
.NET Web API is one of the most important technologies for modern software development. Every mobile app, web application, cloud platform, and enterprise solution relies heavily on APIs for communication.
For beginners, the journey should focus on understanding real-world business problems rather than memorizing syntax. Start by building small projects such as Student Management Systems, Employee Portals, Product Catalogs, and Library Management Applications. As your confidence grows, move toward authentication, database integration, cloud deployment, and microservices.
The future of software development is API-driven, and organizations increasingly need developers who can build secure, scalable, and maintainable backend systems.
At TuxAcademy, students learn .NET Web API through practical projects, industry-oriented training, real-world case studies, internships, and mentorship programs designed to make learners job-ready from day one.
If you are beginning your software development journey, learning .NET Web API with C# is one of the smartest investments you can make for a successful technology career.
Watch Video
- AI Course Introduction for Beginners | TuxAcademy
- Python Full Course Demo Class with Practical Training
- Cyber Security Live Class Recording | Ethical Hacking Basics
- Data Science Project Explanation for Beginners
- Machine Learning Course Overview with Real Projects
- AI Tools and Career Opportunities Explained
- Cyber Security Career Roadmap in India
- Ethical Hacking Demo Class for Beginners
- Python Programming Basics with Hands-on Training
- Full Stack Development Course Introduction
- Cloud Computing Training Overview for Beginners
- AI Career Tips for Students | Short Video
- Cyber Security Quick Guide for Beginners
- Python Coding Tips and Tricks | Short
- Ethical Hacking Quick Demo Explained
- AI Tools Explained in 60 Seconds
- Data Science Career Advice | Short Video
- Machine Learning Basics Explained Quickly
- Top Programming Skills for 2026
- Cyber Security Tips for Beginners
- Python Interview Questions Quick Guide
- AI Learning Roadmap for Beginners
- Ethical Hacking Career Scope in India
- Top IT Skills to Learn in 2026
- Data Science Salary Insights India
- Complete AI Course Playlist for Beginners
- Python Advanced Concepts Explained
- Cyber Security Internship Program Overview
- Quick AI Tips for Students
- Python Coding Hacks | Short Video
- Cyber Security Career Advice
- Machine Learning Quick Explanation
- Top AI Tools You Must Learn
- Ethical Hacking Tips for Beginners
- Data Science Learning Path
- Programming Career Guidance
- Top IT Career Options Explained
- AI Job Opportunities in India
- Python Career Growth Guide
- Cyber Security Salary Breakdown
- Top Coding Skills for Jobs
- Best Tech Courses for Students
- AI vs Data Science Career Comparison
- Ethical Hacking Demo Class (Quick Start)
- Cyber Security Career Guide (Short Version)
Location:
Nearby Landmarks & Localities for TuxAcademy (Greater Noida West) Offline Courses:
Geetanjali Mehra Expert AI and Data Science Mentor at TuxAcademy
Artificial Intelligence Course in Delhi NCR
Artificial Intelligence in New Delhi
Artificial Intelligence Course in Noida Ext
Artificial Intelligence Course in Vaishali Ghaziabad
Artificial Intelligence Course in Indirapuram Ghaziabad
Artificial Intelligence course in Sector 62 Noida
Artificial Intelligence Course in EK Murti Chowk

