Написание меньшего количества кода в ADO. NET (классы-оболочки) - PullRequest
1 голос
/ 06 апреля 2020

Так что я довольно плохо знаком с C# в целом, но у меня есть базовые c знания языка на данный момент.

При доступе к базе данных SQL я решил что использование ADO. NET (SqlClient, кажется, лучший способ сделать это, и мне удалось заставить его работать, в том числе с помощью запросов. Моя проблема в том, что, как только я начинаю делать запросы к базе данных чаще, я, кажется, просто переписывать очень похожий код снова и снова (что, очевидно, является плохой практикой). Понятно, что мне нужно создать какой-то класс, который бы обрабатывал мое использование ADO. NET (SqlClient), чтобы я не мог просто что-то напечатать например:

DatabaseConnection.Query("SELECT * FROM tblProducts");

… вместо ...

using (SqlConnection cnn = new SqlConnection(cnnString)) // cnnString was defined earlier in the code
{
    SqlCommand cmd = new SqlCommand("SELECT ProductType FROM tblProductTypes", cnn);
    DataTable dt = new DataTable();
    cnn.Open();
    dt.Load(cmd.ExecuteReader());
    cboFilterTypes.DataSource = dt;
    cboFilterTypes.DisplayMember = "ProductType";
    cboFilterTypes.ValueMember = "ProductType";
    cnn.Close();
}

Так что я думаю, что мне нужно сделать обертку класса (по крайней мере, так я ее называю), но я не слишком уверен в том, как go сделать это. У кого-нибудь есть какие-либо предложения или приемы, которые я могу использовать?

Чтобы было ясно, я не хочу использовать сущность рамки или что-нибудь подобное, что построено на AD О. NET - Я попытался создать сущность и решил, что слишком много недостатков.

1 Ответ

0 голосов
/ 06 апреля 2020

Придерживаясь своего запроса об «обертке», вы можете просто сделать вспомогательный метод stati c для обработки вызова в базу данных, такой как

    public static DataTable GetDataTable(string query)
    {
        DataTable result = new DataTable();
    using (SqlConnection cnn = new SqlConnection(cnnString)) // cnnString was defined earlier in the code
    {
            SqlCommand cmd = new SqlCommand(query, cnn);
            result = new DataTable();
            cnn.Open();
            result.Load(cmd.ExecuteReader());
            cnn.Close();
     }
return result;
    }

Затем вы можете вызвать это как

    cboFilterTypes.DataSource = GetDataTable("SELECT ProductType FROM tblProductTypes")
    cboFilterTypes.DisplayMember = "ProductType";
    cboFilterTypes.ValueMember = "ProductType";

Я бы не рекомендовал такой способ доступа к данным ни для кого, кроме крошечного проекта. Если вам действительно не нравится EF, то Dapper или что-то подобное предлагает гораздо более масштабируемое решение. Сам Stackoverflow использует Dapper:)

...