Я совершенно новичок в C# программировании и пытаюсь учиться самостоятельно. В настоящее время я создаю мини-проект для тренировки.
Я понимаю, что пользовательский уровень не должен иметь никаких запросов данных, возможно, из соображений безопасности?
Итак, я создал отдельный класс доступа к данным чтобы получить данные. Вот как выглядит мой класс доступа к данным (я буду использовать хранимые процедуры для большей безопасности, как только узнаю, как его использовать):
public class DataAccess
{
public List<Customer> FilteredCustomersList(string name)
{
using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(Helper.CnnVal("FineCreteDB")))
{
var output = connection.Query<Customer>($"SELECT * from `Customers` WHERE `Cust_Name` LIKE '{name}'").ToList();
return output;
}
}
По сути, я отправляю запрос на строку из пользовательской формы для запроса база данных, данные извлекаются и хранятся в списке. Форма пользователя:
private void RetrieveData()
{
try
{
DataAccess db = new DataAccess();
filteredcustomers = db.FilteredCustomersList(CustomerNameTxtBox_AutoComplete.Text);
ntn_num = filteredcustomers.Select(x => x.Cust_NTN).ElementAt(0);
strn_num = filteredcustomers.Select(x => x.Cust_STRN).ElementAt(0);
address = filteredcustomers.Select(x => x.Cust_Address).ElementAt(0);
phone_num = filteredcustomers.Select(x => x.Cust_Phone).ElementAt(0);
id_num = filteredcustomers.Select(x => x.Cust_ID).ElementAt(0);
}
catch (Exception)
{
MessageBox.Show("Customer not found. If customer was recently added, try updating DB.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
DataAccess db = new DataAccess();
filteredcustomers = db.AllCustomersList();
ntn_num = "";
strn_num = "";
address = "";
phone_num = "";
}
}
На стороне формы пользователя «FilterCustomers» содержит список отправленных данных, теперь вот проблема : я использую список фильтрованных клиентов, чтобы извлечь различные значения столбцов, например, так:
address = filteredcustomers.Select(x => x.Cust_Address).ElementAt(0);
, а затем использовать их для заполнения соответствующих текстовых полей, таких как:
Address_TxtBox.Text = address;
Все работает нормально, но я не хочу, чтобы пользовательская форма имела эти запросы для всех отдельных столбцов, потому что из того, что я понял до сих пор, это плохое программирование и плохое для безопасности.
Может кто-нибудь подсказать мне, как мне сохранить значения в слое доступа к данным и просто вызвать их в форму? Извините, если это длинный пост, я только учусь и хотел быть как можно более подробным.