# Calculate Age And Experience Using Table Data And Stored Procedure In MVC

## Introduction

In this article, we will learn how to calculate age based on today's date and years of experience based on the date of joining and the date of leaving between dates by passing date parameters in a stored procedure using ASP.NET MVC and ADO.NET. Here, the user can see age and years of experience with other details records about the employee by filtering between dates.

Prerequisites
• Visual Studio
• SQL server
Note
Before going through this session, visit my previous articles related to ASP.NET MVC and SQL Server for a better understanding of how to set up the project.
Step 1

First, we need to create a table schema and prepare data for these tables. Refer to the below script:
1. SET ANSI_NULLS ON
2. GO
3. SET QUOTED_IDENTIFIER ON
4. GO
5. CREATE TABLE [dbo].[Country](
6.     [CountryID] [int] IDENTITY(1,1) NOT NULL,
7.     [CountryName] [varchar](100) NOT NULL,
8. PRIMARY KEY CLUSTERED
9. (
10.     [CountryID] ASC
11. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
12. ) ON [PRIMARY]
13. GO
14. /****** Object:  Table [dbo].[State]    Script Date: 31-05-2020 15:11:16 ******/
15. SET ANSI_NULLS ON
16. GO
17. SET QUOTED_IDENTIFIER ON
18. GO
19. CREATE TABLE [dbo].[State](
20.     [StateID] [int] IDENTITY(1,1) NOT NULL,
21.     [CountryID] [int] NOT NULL,
22.     [StateName] [varchar](100) NOT NULL,
23. PRIMARY KEY CLUSTERED
24. (
25.     [StateID] ASC
26. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
27. ) ON [PRIMARY]
28. GO
29. /****** Object:  Table [dbo].[Tbl_Applicant]    Script Date: 31-05-2020 15:11:16 ******/
30. SET ANSI_NULLS ON
31. GO
32. SET QUOTED_IDENTIFIER ON
33. GO
34. CREATE TABLE [dbo].[Tbl_Applicant](
35.     [int_ApplicantID] [int] NOT NULL,
36.     [vch_ApplicantName] [varchar](104) NOT NULL,
37.     [vch_FatherName] [varchar](104) NOT NULL,
38.     [vch_MotherName] [varchar](104) NOT NULL,
39.     [dtm_DOB] [datetime] NOT NULL,
40.     [vch_CorMobileNo] [char](10) NOT NULL,
41.     [vch_EMailID] [varchar](104) NULL,
42.  CONSTRAINT [PK_Tbl_Applicant] PRIMARY KEY CLUSTERED
43. (
44.     [int_ApplicantID] ASC
45. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
46. ) ON [PRIMARY]
47. GO
48. /****** Object:  Table [dbo].[Tbl_Company]    Script Date: 31-05-2020 15:11:17 ******/
49. SET ANSI_NULLS ON
50. GO
51. SET QUOTED_IDENTIFIER ON
52. GO
53. CREATE TABLE [dbo].[Tbl_Company](
54.     [int_CompID] [int] NOT NULL,
55.     [vch_CompName] [varchar](104) NOT NULL,
56.     [dtm_Join] [datetime] NOT NULL,
57.     [dtm_Leave] [datetime] NOT NULL,
58.  CONSTRAINT [PK_Tbl_Company] PRIMARY KEY CLUSTERED
59. (
60.     [int_CompID] ASC
61. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
62. ) ON [PRIMARY]
63. GO
64. SET IDENTITY_INSERT [dbo].[Country] ON
65. GO
66. INSERT [dbo].[Country] ([CountryID], [CountryName]) VALUES (1, N'Brazil')
67. GO
68. INSERT [dbo].[Country] ([CountryID], [CountryName]) VALUES (2, N'China')
69. GO
70. INSERT [dbo].[Country] ([CountryID], [CountryName]) VALUES (3, N'France')
71. GO
72. INSERT [dbo].[Country] ([CountryID], [CountryName]) VALUES (4, N'India')
73. GO
74. INSERT [dbo].[Country] ([CountryID], [CountryName]) VALUES (5, N'USA')
75. GO
76. SET IDENTITY_INSERT [dbo].[Country] OFF
77. GO
78. SET IDENTITY_INSERT [dbo].[State] ON
79. GO
80. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (1, 5, N'California')
81. GO
82. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (2, 2, N'Beijing')
83. GO
84. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (3, 5, N'Iowa')
85. GO
86. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (4, 5, N'New York')
87. GO
88. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (5, 2, N'Hebei')
89. GO
90. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (6, 2, N'Jiangsu')
91. GO
92. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (7, 5, N'New Jersey')
93. GO
94. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (8, 5, N'Massachusetts')
95. GO
96. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (9, 5, N'Connecticut')
97. GO
98. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (10, 2, N'Guangdong')
99. GO
100. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (11, 5, N'Florida')
101. GO
102. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (12, 5, N'Texas')
103. GO
104. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (13, 5, N'Armed Forces US')
105. GO
106. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (14, 5, N'Tennessee')
107. GO
108. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (15, 5, N'Kentucky')
109. GO
110. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (16, 3, N'Ile-de-3nce')
111. GO
112. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (17, 5, N'Georgia')
113. GO
114. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (18, 1, N'Rio de Janeiro')
115. GO
116. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (19, 5, N'Illinois')
117. GO
118. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (20, 1, N'Ceara')
119. GO
120. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (21, 5, N'Colorado')
121. GO
122. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (22, 2, N'Zhejiang')
123. GO
124. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (23, 5, N'Utah')
125. GO
126. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (24, 2, N'Liaoning')
127. GO
128. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (25, 4, N'Haryana')
129. GO
130. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (26, 5, N'Maryland')
131. GO
132. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (27, 2, N'Shanghai')
133. GO
134. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (28, 2, N'Tianjin')
135. GO
136. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (29, 5, N'South Carolina')
137. GO
138. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (30, 5, N'Montana')
139. GO
140. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (31, 5, N'Louisiana')
141. GO
142. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (32, 2, N'Fujian')
143. GO
144. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (33, 1, N'Santa Catarina')
145. GO
146. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (34, 1, N'Espirito Santo')
147. GO
148. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (35, 5, N'Washington')
149. GO
150. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (36, 4, N'Andhra Pradesh')
151. GO
152. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (37, 5, N'Pennsylvania')
153. GO
154. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (38, 2, N'Guangxi')
155. GO
156. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (39, 5, N'North Carolina')
157. GO
158. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (40, 2, N'Shandong')
159. GO
160. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (41, 2, N'Chongqing')
161. GO
162. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (42, 5, N'Michigan')
163. GO
164. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (43, 2, N'Hubei')
165. GO
166. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (44, 4, N'Delhi')
167. GO
168. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (45, 5, N'Arkansas')
169. GO
170. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (46, 5, N'Wisconsin')
171. GO
172. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (47, 3, N'Midi-Pyrenees')
173. GO
174. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (48, 3, N'Picardie')
175. GO
176. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (49, 1, N'Bahia')
177. GO
178. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (50, 2, N'Heilongjiang')
179. GO
180. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (51, 4, N'Tamil Nadu')
181. GO
182. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (52, 5, N'Ohio')
183. GO
184. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (53, 5, N'New Mexico')
185. GO
186. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (54, 5, N'Kansas')
187. GO
188. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (55, 5, N'Oregon')
189. GO
190. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (56, 4, N'Uttar Pradesh')
191. GO
192. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (57, 5, N'Ne1ska')
193. GO
194. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (58, 5, N'West Virginia')
195. GO
196. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (59, 5, N'Virginia')
197. GO
198. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (60, 5, N'Missouri')
199. GO
200. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (61, 5, N'Mississippi')
201. GO
202. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (62, 5, N'Rhode Island')
203. GO
204. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (63, 1, N'Sao Paulo')
205. GO
206. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (64, 2, N'Shanxi')
207. GO
208. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (65, 4, N'Karnataka')
209. GO
210. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (66, 2, N'Hunan')
211. GO
212. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (67, 5, N'4iana')
213. GO
214. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (68, 5, N'Oklahoma')
215. GO
216. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (69, 5, N'Minnesota')
217. GO
218. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (70, 5, N'Alabama')
219. GO
220. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (71, 2, N'Hainan')
221. GO
222. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (72, 5, N'Arizona')
223. GO
224. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (73, 2, N'Sichuan')
225. GO
226. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (74, 5, N'South Dakota')
227. GO
228. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (75, 4, N'Maharashtra')
229. GO
230. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (76, 5, N'Nevada')
231. GO
232. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (77, 2, N'Henan')
233. GO
234. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (78, 4, N'Kerala')
235. GO
236. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (79, 5, N'New Hampshire')
237. GO
238. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (80, 5, N'Maine')
239. GO
240. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (81, 5, N'Hawaii')
241. GO
242. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (82, 4, N'Chhattisgarh')
243. GO
244. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (83, 2, N'Anhui')
245. GO
246. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (84, 5, N'District of Columbia')
247. GO
248. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (85, 5, N'Delaware')
249. GO
250. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (86, 4, N'West Bengal')
251. GO
252. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (87, 2, N'Shaanxi')
253. GO
255. GO
256. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (89, 4, N'Gujarat')
257. GO
258. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (90, 3, N'3nche-Comte')
259. GO
260. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (91, 5, N'Idaho')
261. GO
262. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (92, 4, N'Rajasthan')
263. GO
264. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (93, 2, N'Nei Mongol')
265. GO
266. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (94, 3, N'Alsace')
267. GO
268. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (95, 4, N'Orissa')
269. GO
270. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (96, 2, N'Jilin')
271. GO
272. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (97, 4, N'Jharkhand')
273. GO
274. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (98, 4, N'Chandigarh')
275. GO
276. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (99, 4, N'Punjab')
277. GO
278. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (100, 3, N'Languedoc-Roussillon')
279. GO
280. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (101, 4, N'Assam')
281. GO
282. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (102, 3, N'Centre')
283. GO
284. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (103, 3, N'Champagne-Ardenne')
285. GO
286. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (104, 3, N'Bretagne')
287. GO
288. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (105, 3, N'Rhone-Alpes')
289. GO
290. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (106, 3, N'Nord-Pas-de-Calais')
291. GO
292. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (107, 3, N'Lorraine')
293. GO
294. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (108, 1, N'Rio Grande do Sul')
295. GO
296. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (109, 3, N'Provence-Alpes-Cote d''Azur')
297. GO
298. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (110, 1, N'Minas Gerais')
299. GO
300. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (111, 3, N'Limousin')
301. GO
302. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (112, 2, N'Guizhou')
303. GO
304. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (113, 3, N'Haute-Normandie')
305. GO
306. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (114, 3, N'Poitou-Charentes')
307. GO
308. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (115, 5, N'Wyoming')
309. GO
310. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (116, 4, N'Daman and Diu')
311. GO
312. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (117, 1, N'Para')
313. GO
314. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (118, 3, N'Basse-Normandie')
315. GO
316. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (119, 4, N'Bihar')
317. GO
318. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (120, 3, N'Aquitaine')
319. GO
320. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (121, 1, N'Parana')
321. GO
322. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (122, 3, N'Auvergne')
323. GO
324. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (123, 1, N'Pernambuco')
325. GO
326. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (124, 3, N'Pays de la Loire')
327. GO
328. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (125, 1, N'Amazonas')
329. GO
330. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (126, 1, N'Distrito Federal')
331. GO
332. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (127, 5, N'North Dakota')
333. GO
334. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (128, 3, N'Bourgogne')
335. GO
336. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (129, 5, N'Vermont')
337. GO
338. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (130, 1, N'Goias')
339. GO
340. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (131, 4, N'Himachal Pradesh')
341. GO
342. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (132, 1, N'Sergipe')
343. GO
344. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (133, 5, N'Alaska')
345. GO
346. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (134, 1, N'Mato Grosso do Sul')
347. GO
348. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (135, 2, N'Yunnan')
349. GO
350. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (136, 4, N'Uttarakhand')
351. GO
352. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (137, 4, N'Meghalaya')
353. GO
354. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (138, 2, N'Jiangxi')
355. GO
356. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (139, 1, N'Rio Grande do Norte')
357. GO
358. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (140, 1, N'Paraiba')
359. GO
360. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (141, 1, N'Piaui')
361. GO
362. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (142, 2, N'Gansu')
363. GO
364. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (143, 4, N'Jammu and Kashmir')
365. GO
366. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (144, 4, N'Goa')
367. GO
368. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (145, 1, N'Maranhao')
369. GO
370. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (146, 1, N'Mato Grosso')
371. GO
372. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (147, 3, N'Corse')
373. GO
374. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (148, 1, N'Alagoas')
375. GO
376. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (149, 4, N'Puducherry')
377. GO
378. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (150, 4, N'Manipur')
379. GO
380. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (151, 1, N'Tocantins')
381. GO
382. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (152, 1, N'Roraima')
383. GO
384. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (153, 1, N'Rondonia')
385. GO
386. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (154, 2, N'Xizang')
387. GO
388. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (155, 2, N'Ningxia')
389. GO
390. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (156, 2, N'Xinjiang')
391. GO
392. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (157, 2, N'Qinghai')
393. GO
394. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (158, 4, N'Mizoram')
395. GO
396. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (159, 4, N'Dadra and Nagar Haveli')
397. GO
398. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (160, 4, N'Arunachal Pradesh')
399. GO
400. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (161, 4, N'Tripura')
401. GO
402. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (162, 1, N'Amapa')
403. GO
404. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (163, 1, N'Acre')
405. GO
406. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (164, 4, N'Sikkim')
407. GO
408. INSERT [dbo].[State] ([StateID], [CountryID], [StateName]) VALUES (165, 4, N'Nagaland')
409. GO
410. SET IDENTITY_INSERT [dbo].[State] OFF
411. GO
412. INSERT [dbo].[Tbl_Applicant] ([int_ApplicantID], [vch_ApplicantName], [vch_FatherName], [vch_MotherName], [dtm_DOB], [vch_CorMobileNo], [vch_EMailID]) VALUES (1, N'KIRAN KUMAR CHHATAI', N'MANOJ KUMAR CHHATAI', N'LABANYA CHHATAI', CAST(N'1999-06-10T00:00:00.000' AS DateTime), N'9778087807', N'kkc.kirankumar@rediffmail.com')
413. GO
414. INSERT [dbo].[Tbl_Applicant] ([int_ApplicantID], [vch_ApplicantName], [vch_FatherName], [vch_MotherName], [dtm_DOB], [vch_CorMobileNo], [vch_EMailID]) VALUES (2, N'Satyaprakash Samantaray', N'Dheerak Kumar', N'Nirmala Kumari', CAST(N'1979-07-11T00:00:00.000' AS DateTime), N'8798087807', N'sat.prakash@rediffmail.com')
415. GO
416. INSERT [dbo].[Tbl_Applicant] ([int_ApplicantID], [vch_ApplicantName], [vch_FatherName], [vch_MotherName], [dtm_DOB], [vch_CorMobileNo], [vch_EMailID]) VALUES (3, N'Raj kishore', N'Raj kishore Kumar', N'Seeta kishore Kumari', CAST(N'1989-08-11T00:00:00.000' AS DateTime), N'7798087807', N'raj.prakash@rediffmail.com')
417. GO
418. INSERT [dbo].[Tbl_Applicant] ([int_ApplicantID], [vch_ApplicantName], [vch_FatherName], [vch_MotherName], [dtm_DOB], [vch_CorMobileNo], [vch_EMailID]) VALUES (4, N'Saroj kishore', N'saroj kishore Kumar', N'geeta kishore Kumari', CAST(N'1974-04-14T00:00:00.000' AS DateTime), N'9498087807', N'saroj.prakash@gmail.com')
419. GO
420. INSERT [dbo].[Tbl_Company] ([int_CompID], [vch_CompName], [dtm_Join], [dtm_Leave]) VALUES (1, N'Infosys', CAST(N'2010-06-10T00:00:00.000' AS DateTime), CAST(N'2011-07-10T00:00:00.000' AS DateTime))
421. GO
422. INSERT [dbo].[Tbl_Company] ([int_CompID], [vch_CompName], [dtm_Join], [dtm_Leave]) VALUES (2, N'TCS', CAST(N'2009-01-11T00:00:00.000' AS DateTime), CAST(N'2011-02-11T00:00:00.000' AS DateTime))
423. GO
424. INSERT [dbo].[Tbl_Company] ([int_CompID], [vch_CompName], [dtm_Join], [dtm_Leave]) VALUES (3, N'IBM', CAST(N'2007-04-11T00:00:00.000' AS DateTime), CAST(N'2008-05-11T00:00:00.000' AS DateTime))
425. GO
426. INSERT [dbo].[Tbl_Company] ([int_CompID], [vch_CompName], [dtm_Join], [dtm_Leave]) VALUES (4, N'Wipro', CAST(N'2008-08-11T00:00:00.000' AS DateTime), CAST(N'2009-09-11T00:00:00.000' AS DateTime))
427. GO
Step 2

Then, create 2 scalar functions for calculating age and years of experience of employees.

GetYearsOfExp: This function is used for calculating years of experience between the date of joining and the date of leaving.
1. ALTER FUNCTION [dbo].[GetYearsOfExp]
2. (
3.    @FromDate DATETIME, @ToDate DATETIME
4. )
5. RETURNS NVARCHAR(100)
6. AS
7. BEGIN
8.     DECLARE @Years INT, @Months INT, @Days INT, @tmpFromDate DATETIME
9.     SET @Years = DATEDIFF(YEAR, @FromDate, @ToDate)
10.      - (CASE WHEN DATEADD(YEAR, DATEDIFF(YEAR, @FromDate, @ToDate),
11.               @FromDate) > @ToDate THEN 1 ELSE 0 END)
12.
13.     SET @tmpFromDate = DATEADD(YEAR, @Years , @FromDate)
14.     SET @Months =  DATEDIFF(MONTH, @tmpFromDate, @ToDate)
15.      - (CASE WHEN DATEADD(MONTH,DATEDIFF(MONTH, @tmpFromDate, @ToDate),
16.               @tmpFromDate) > @ToDate THEN 1 ELSE 0 END)
17.
18.     SET @tmpFromDate = DATEADD(MONTH, @Months , @tmpFromDate)
19.     SET @Days =  DATEDIFF(DAY, @tmpFromDate, @ToDate)
20.      - (CASE WHEN DATEADD(DAY, DATEDIFF(DAY, @tmpFromDate, @ToDate),
21.               @tmpFromDate) > @ToDate THEN 1 ELSE 0 END)
22.
23.
24.     --RETURN 'Years: ' + CAST(@Years AS VARCHAR(4)) +
25.     --        ' Months: ' + CAST(@Months AS VARCHAR(2)) +
26.     --        ' Days: ' + CAST(@Days AS VARCHAR(2))
27.
28.     Return CAST(@years as varchar(5)) + ' years ' +
29.              CAST(@months as varchar(3)) + ' months ' +
30.              CAST(@days as varchar(3)) + ' days'
31. END
UDF_AgeInYears

This function is used for calculating age based on the date of birth and today's date.
1. ALTER FUNCTION [dbo].[UDF_AgeInYears]
2. (
3. @givenDate datetime
4. )
5.
6. RETURNS varchar(100)
7. AS
8. BEGIN
9. DECLARE @tempDate datetime
10. DECLARE @years int, @months int, @days int
11.
12. SELECT @tempDate = @givenDate
13.
14. -- get year
15. SELECT @years = DATEDIFF(yy, @tempDate, GETDATE()) -
16.               CASE
17.                     WHEN
18.                             (MONTH(@givenDate) > MONTH(GETDATE()))
19.                                    OR
20.                             (MONTH(@givenDate) = MONTH(GETDATE())
21.                                           AND
22.                                           DAY(@givenDate) > DAY(GETDATE()))
23.                     THEN 1
24.                     ELSE 0
25.               END
26. SELECT @tempDate = DATEADD(yy, @years, @tempDate)
27.
28. -- get months
29. SELECT @months = DATEDIFF(m, @tempDate, GETDATE()) -
30.               CASE
31.                      WHEN
32.                             DAY(@givenDate) > DAY(GETDATE())
33.                      THEN 1
34.                      ELSE 0
35.               END
36. SELECT @tempDate = DATEADD(m, @months, @tempDate)
37.
38. -- get days
39. SELECT @days = DATEDIFF(d, @tempDate, GETDATE())
40.
41. -- output the result
42. Return CAST(@years as varchar(5)) + ' years ' +
43.              CAST(@months as varchar(3)) + ' months ' +
44.              CAST(@days as varchar(3)) + ' days'
45. END
Step 3

In this step, create a stored procedure using dynamic SQL for filtering records between dates and calculating age and years of experience with other details of the employees.
1. SET ANSI_NULLS ON
2. GO
3. SET QUOTED_IDENTIFIER ON
4. GO
5.
6. ----Author : Satyaprakash
7. ----Query : exec Sp_EmployeeDetailsWithAge @status ='DIS',@Fromdate='1979-04-04', @Todate='2000-04-04'
8. ----Calculate age in Year/Month/Days and filter records between dates
9.
10. ALTER procedure [dbo].[Sp_EmployeeDetailsWithAge]
11. @status varchar(10),
12. @Fromdate DATETIME=null,
13. @Todate DATETIME =null
14. AS
15. BEGIN
16. if @status ='DIS'
17. BEGIN
18. SET NOCOUNT ON;
19. Declare @SQLQuery AS NVarchar(4000)
20. Declare @ParamDefinition AS NVarchar(2000)
21. Set @SQLQuery ='SELECT vch_ApplicantName as ApplicantName,CONVERT (varchar, dtm_DOB, 106) as DOB,[dbo].[UDF_AgeInYears](dtm_DOB) as Age,
22. CONVERT (varchar, dtm_Join, 106) as DOJ, CONVERT (varchar, dtm_Leave, 106) as DOL,
23. [dbo].[GetYearsOfExp](dtm_Join,dtm_Leave) as Expr,
24. vch_FatherName as FatherName, vch_MotherName as MotherName,C.CountryName, D.StateName,
25. vch_CorMobileNo as Mobile, vch_EMailID as Email
26. FROM Tbl_Applicant A
27. Inner join Tbl_Company b on a.int_ApplicantID = b.int_CompID
28. Inner join Country c on b.int_CompID = c.CountryID
29. Inner join State d on c.CountryID = d.StateID where A.int_ApplicantID<>0'
30.
31. If (@Fromdate Is Not NullAND (@Todate Is Not Null)
32.          Set @SQLQuery = @SQLQuery + 'And (A.dtm_DOB BETWEEN @Fromdate AND @Todate)'
33.
34. Set @ParamDefinition = '@Fromdate DATETIME,@Todate DATETIME'
35. Execute sp_Executesql     @SQLQuery,@ParamDefinition,@Fromdate,@Todate
36.
37. END
38. END
Step 4

Here, we need create a model class with entities which should be same as stored procedure column names. This is named "DateDetails.cs".
1. using System;
2. using System.Collections.Generic;
3. using System.ComponentModel.DataAnnotations;
4. using System.ComponentModel.DataAnnotations.Schema;
5. using System.Linq;
6. using System.Web;
7.
8. namespace WebApplication1.Models
9. {
10.     public class DateDetails
11.     {
12.         public string ApplicantName { getset; }
13.         public string DOB { getset; }
14.         public string Age { getset; }
15.         public string DOJ { getset; }
16.         public string DOL { getset; }
17.         public string Expr { getset; }
18.         public string FatherName { getset; }
19.         public string MotherName { getset; }
20.         public string CountryName { getset; }
21.         public string StateName { getset; }
22.         public string Mobile { getset; }
23.         public string Email { getset; }
24.
25.         public List<DateDetails> usersinfo { getset; }
26.     }
27. }
Step 5

Here, we need to create a controller named DateController.cs inside the Controllers folder. Inside the Home controller, we added a controller action method named DateView.

Code Ref
1. using WebApplication1.Models;
2. using System;
3. using System.Collections.Generic;
4. using System.ComponentModel.DataAnnotations.Schema;
5. using System.Data;
6. using System.Data.SqlClient;
7. using System.Linq;
8. using System.Web;
9. using System.Web.Mvc;
10. using System.Configuration;
11.
12. namespace WebApplication1.Controllers
13. {
14.     public class DateController : Controller
15.     {
16.         // GET: Date
17.         public ActionResult Index()
18.         {
19.             return View();
20.         }
21.
22.         public ActionResult DateView(DateTime? From, DateTime? To) //this value name should be same as input control name as used in view schtml file
23.         {
25.             if (From > To)
26.             {
27.                 TempData["SelectOption"] = 1;
28.             }
30.
31.             string mainconn = ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString; //added connection string
32.             DateDetails objuser = new DateDetails();
33.             DataSet ds = new DataSet();
34.             DataTable dt = new DataTable();
35.             using (SqlConnection con = new SqlConnection(mainconn))
36.             {
37.                 using (SqlCommand cmd = new SqlCommand("Sp_EmployeeDetailsWithAge", con)) //stored procedure name
38.                 {
39.                     con.Open();
40.                     cmd.CommandType = CommandType.StoredProcedure;
41.                     cmd.Parameters.AddWithValue("@status""DIS"); //Parameters for filter records
44.
46.                     da.Fill(ds);
47.                     List<DateDetails> userlist = new List<DateDetails>();
48.                     for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
49.                     {
50.                         DateDetails uobj = new DateDetails();
51.
52.                         uobj.ApplicantName = ds.Tables[0].Rows[i]["ApplicantName"].ToString(); //show records with selected columns
53.                         uobj.DOB = ds.Tables[0].Rows[i]["DOB"].ToString();
54.                         uobj.Age = ds.Tables[0].Rows[i]["Age"].ToString();
55.                         uobj.DOJ = ds.Tables[0].Rows[i]["DOJ"].ToString();
56.
57.                         uobj.DOL = ds.Tables[0].Rows[i]["DOL"].ToString();
58.                         uobj.Expr = ds.Tables[0].Rows[i]["Expr"].ToString();
59.                         uobj.FatherName = ds.Tables[0].Rows[i]["FatherName"].ToString();
60.                         uobj.MotherName = ds.Tables[0].Rows[i]["MotherName"].ToString();
61.
62.                         uobj.CountryName = ds.Tables[0].Rows[i]["CountryName"].ToString();
63.                         uobj.StateName = ds.Tables[0].Rows[i]["StateName"].ToString();
64.                         uobj.Mobile = ds.Tables[0].Rows[i]["Mobile"].ToString();
65.                         uobj.Email = ds.Tables[0].Rows[i]["Email"].ToString();
66.
68.                     }
69.                     objuser.usersinfo = userlist;
70.                 }
71.                 con.Close();
72.             }
73.             return View(objuser);
74.
75.
76.         }
77.
78.     }
79. }
Code Description

Here, I added code with a description in the green comment mark "//" at one place for easier understanding.

Step 6

We need to add a view called DateView.cshtml.

Code Ref
1. @model WebApplication1.Models.DateDetails
2.
3. @{
4.     /**/
5.
6.     ViewBag.Title = "Date Details";
7. }
8.
9. @*Post Data To Controller Without Page Refresh In*@
10. <script src="~/Scripts/jquery-3.3.1.js"></script>
11. <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
12.
13. <h4>Choose Below Options:</h4>
14.
15. <style>
16.     table {
17.         font-family: arial, sans-serif;
18.         border-collapse: collapse;
19.         width: 100%;
20.     }
21.
22.     td, th {
23.         border: 1px solid #dddddd;
24.         text-align: left;
26.     }
27.
28.     tr:nth-child(even) {
29.         background-color: #dddddd;
30.     }
31.
32.     .button {
33.         background-color: #4CAF50;
34.         border: none;
35.         color: white;
37.         text-align: center;
38.         text-decoration: none;
39.         display: inline-block;
40.         font-size: 16px;
41.         margin: 4px 2px;
42.         cursor: pointer;
43.     }
44.
45.     .button4 {
47.     }
48.
49.     input[type=date], select {
50.         width: 60%;
52.         margin: 8px 0;
53.         display: inline-block;
54.         border: 1px solid #ccc;
56.         box-sizing: border-box;
57.     }
58.
59.     input[type=text], select {
60.         width: 60%;
62.         margin: 8px 0;
63.         display: inline-block;
64.         border: 1px solid #ccc;
66.         box-sizing: border-box;
67.     }
68. </style>
69. @*Filter records*@
70.
71. @using (Html.BeginForm("DateView""Date", FormMethod.Get))
72. {
73.     <span style="color:blue">From Date:</span><input type="date" name="From" />
74.     <span style="color:blue">To Date:</span><input type="date" name="To" /> <span> </span> <span> </span>
75.
76.     <input type="submit" name="submit" value="Search" class="button button4" />
77.
78.     <br/>
79.     <br/>
80. }
81.
82. @if (Model != null)
83. {
84.     if (Model.usersinfo.Count > 0) /*Display records*/
85.     {
86.         <table align="center" border="1" cellpadding="4" cellspacing="4">
87.             <tr>
88.                 <th style="background-color: Yellow;color: blue; width:140px">Applicant</th>
89.                 <th style="background-color: Yellow;color: blue; width:140px">DOB</th>
90.                 <th style="background-color: Yellow;color: blue; width:200px">Age</th>
91.                 <th style="background-color: Yellow;color: blue; width:140px">DOJ</th>
92.                 <th style="background-color: Yellow;color: blue; width:140px">DOL</th>
93.                 <th style="background-color: Yellow;color: blue; width:200px">Expr</th>
94.                 <th style="background-color: Yellow;color: blue; width:140px">Father</th>
95.                 <th style="background-color: Yellow;color: blue; width:140px">Mother</th>
96.                 <th style="background-color: Yellow;color: blue">Country</th>
97.                 <th style="background-color: Yellow;color: blue">State</th>
98.                 <th style="background-color: Yellow;color: blue">Mobile</th>
99.                 <th style="background-color: Yellow;color: blue">Email</th>
100.             </tr>
101.             @foreach (var item in Model.usersinfo)
102.             {
103.             <tr>
104.                 <td>@Html.DisplayFor(modelitem => item.ApplicantName) </td>
105.                 <td>@Html.DisplayFor(modelitem => item.DOB)</td>
106.                 <td>@Html.DisplayFor(modelitem => item.Age)</td>
107.                 <td>@Html.DisplayFor(modelitem => item.DOJ)</td>
108.                 <td>@Html.DisplayFor(modelitem => item.DOL) </td>
109.                 <td>@Html.DisplayFor(modelitem => item.Expr)</td>
110.                 <td>@Html.DisplayFor(modelitem => item.FatherName)</td>
111.                 <td>@Html.DisplayFor(modelitem => item.MotherName)</td>
112.                 <td>@Html.DisplayFor(modelitem => item.CountryName) </td>
113.                 <td>@Html.DisplayFor(modelitem => item.StateName)</td>
114.                 <td>@Html.DisplayFor(modelitem => item.Mobile)</td>
115.                 <td>@Html.DisplayFor(modelitem => item.Email)</td>
116.             </tr>
117.             }
118.         </table>
119.     }
120.     else
121.     {
122.         <span style="color:red"><b>No Details Found.</b></span>
123.     }
124. }
125.
126. @if (TempData["SelectOption"] != null)
127. {
128.     <script type="text/javascript">
129.         alert("From Date should be less than To Date");
130.     </script>
131. }
Code Description

Here, I added code with a description in a green comment mark in one place for easier comprehension.

Step 7

Add some flavor to the view page by modifying it in _Layout.cshtml.

Code Ref
1. <!DOCTYPE html>
2. <html>
4.     <meta charset="utf-8" />
5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
6.     <title>@ViewBag.Title - My ASP.NET Application</title>
7.     @Styles.Render("~/Content/css")
8.     @Scripts.Render("~/bundles/modernizr")
10. <body>
11.     <div class="navbar navbar-fixed-top" style="background-color:orangered;">
12.         <h4 style="color:white; text-align:center">Calculate Age and Experience Of Employees In MVC</h4>
13.     </div>
14.     <div class="container body-content">
15.         @RenderBody()
16.         <hr />
17.         <footer>
18.             <p style="background-color: Yellow; font-weight: bold; color:blue; text-align: center; font-style: oblique">© @DateTime.Now.ToLocalTime()</p> @*Add Date Time*@
19.         </footer>
20.     </div>
21.
22.     @Scripts.Render("~/bundles/jquery")
23.     @Scripts.Render("~/bundles/bootstrap")
24.     @RenderSection("scripts", required: false)
25. </body>
26. </html>
Output

The landing page is shown below:

Then filter data between two dates. It shows the calculated age and years of experience, along with other details of the employees.

If no records are found, then it is shown like this:

Then the alert is mentioned between the from date and to date comparison.