MVC-databaskonstruktion

Log | Files | Refs | README

commit a136bd42d9e2fb95b289260170a121b8e8b242e7
parent 46a5d21105a6654b2b88414e41437141ae5a6291
Author: William Lindholm <william_lindholm@outlook.com>
Date:   Sat, 14 Oct 2023 19:51:26 +0200

Implemented inserts into database through reusable function.

Diffstat:
MMVC-databaskonstruktion/Controllers/AgentsController.cs | 39++++++++++++++++++++++++++++++++-------
MMVC-databaskonstruktion/Models/AgentsModel.cs | 23+++++++++++++++++++++++
MMVC-databaskonstruktion/Utils/DatabaseRepository.cs | 23+++++++++++++++++++++++
3 files changed, 78 insertions(+), 7 deletions(-)

diff --git a/MVC-databaskonstruktion/Controllers/AgentsController.cs b/MVC-databaskonstruktion/Controllers/AgentsController.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Mvc; using MVC_databaskonstruktion.Models; +using MVC_databaskonstruktion.Utils; using MySql.Data.MySqlClient; using System.Diagnostics; @@ -25,18 +26,41 @@ namespace MVC_databaskonstruktion.Controllers } public IActionResult Create( - string CodeName, - string FirstName, - string LastName, - int Salary, - bool IsFieldAgent, - bool IsGroupLeader, - bool IsManager) + string CodeName, + string FirstName, + string LastName, + decimal Salary, + bool IsFieldAgent, + bool IsGroupLeader, + bool IsManager) { Trace.WriteLine("Running function: Create new Agent." + "Received parameters: " + CodeName + FirstName + LastName + Salary + IsFieldAgent + IsGroupLeader + IsManager); + try + { + _agentsModel.CreateAgent(CodeName, FirstName, LastName, Salary, IsFieldAgent, IsGroupLeader, IsManager); + } + catch (MySqlException e) + { + switch (e.Number) + { + case 1062: + TempData["ErrorMessage"] = "CodeName already exists!"; + break; + case 1406: + TempData["ErrorMessage"] = "Data too long!"; + break; + case 3819: + TempData["ErrorMessage"] = "Invalid Data!"; + break; + default: + TempData["ErrorMessage"] = $"Something went wrong: {e.Number}"; + break; + } + } + return RedirectToAction("Index"); } @@ -67,6 +91,7 @@ namespace MVC_databaskonstruktion.Controllers break; } } + return RedirectToAction("Index"); } diff --git a/MVC-databaskonstruktion/Models/AgentsModel.cs b/MVC-databaskonstruktion/Models/AgentsModel.cs @@ -18,6 +18,29 @@ namespace MVC_databaskonstruktion.Models .SetDeleteTable("Agent"); } + public void CreateAgent( + string CodeName, + string FirstName, + string LastName, + decimal Salary, + bool IsFieldAgent, + bool IsGroupLeader, + bool IsManager) + { + var agentData = new List<KeyValuePair<string, object>> + { + new KeyValuePair<string, object>("CodeName", CodeName), + new KeyValuePair<string, object>("FirstName", FirstName), + new KeyValuePair<string, object>("LastName", LastName), + new KeyValuePair<string, object>("Salary", Salary), + new KeyValuePair<string, object>("IsFieldAgent", IsFieldAgent), + new KeyValuePair<string, object>("IsGroupLeader", IsGroupLeader), + new KeyValuePair<string, object>("IsManager", IsManager) + }; + + _databaseRepository.CreateRow("Agent", agentData); + } + public void DeleteAgent(string table, string CodeName) { List<KeyValuePair<string, string>> conditions = new List<KeyValuePair<string, string>> diff --git a/MVC-databaskonstruktion/Utils/DatabaseRepository.cs b/MVC-databaskonstruktion/Utils/DatabaseRepository.cs @@ -29,6 +29,29 @@ namespace MVC_databaskonstruktion.Utils } } + public void CreateRow(string table, List<KeyValuePair<string, object>> data) + { + if (string.IsNullOrEmpty(table) || data == null || data.Count == 0) + { + throw new ArgumentException("Invalid table name or data to insert."); + } + + using MySqlConnection dbcon = new MySqlConnection(_connectionString); + dbcon.Open(); + + string columns = string.Join(", ", data.Select(d => d.Key)); + string values = string.Join(", ", data.Select(d => $"@{d.Key}")); + string query = $"INSERT INTO {table} ({columns}) VALUES ({values});"; + + using MySqlCommand cmd = new MySqlCommand(query, dbcon); + foreach (var item in data) + { + cmd.Parameters.AddWithValue($"@{item.Key}", item.Value); + } + + cmd.ExecuteNonQuery(); + } + public void DeleteRow(string table, List<KeyValuePair<string, string>> primaryKeys) { string whereClause = "WHERE ";