DEV Community

Elchin Abraham
Elchin Abraham

Posted on

C# ilə məlumat bazası bağlantı əməliyyatları

Proqram dünyasında hər bir proqram öz daxilində, yalnız, statik (statik - dəyişməyən) məlumatları saxlayır. Dinamik (dinamik - dəyişdirilə bilən) məlumatların saxlanılması üçün məlumat bazasından istifadə olunur. Məlumat Bazası - məlumatların saxlanılması, oxunması, dəyişdirilməsi və silinməsi əməliyyatlarını icra etmək üçün istifadə olunan bir texnologiyadır. MSSQL, MySQL, Oracle, PLSQL, PostgreSQL və s məlumat bazalarını nümumə çəkmək olar. Hər bir backend proqramlaşdırma dilinin spesifik xüsusiyyətlarindən biri də məlumat bazası bağlantısıdır. Bunun üçün bir nümunəyə baxaq. Yazacağımız nümunədə backend dili olaraq C#, məlumat bazası olaraq MSSQL - dən istifadə edəcəyik.

Tutaq ki, bizə işçilərin məlumatlarını saxlamaq üçün kiçik bir proqram yazmaq tələb olunur. Sadəlik üçün işçilərə aid 3 məlumatı (Adı, doğum tarixi və telefon) qeyd edəcəyik.

Əvvəlcə sql məlumat bazasında yeni bir baza yaradaq


CREATE DATABASE EmployeeDB

Enter fullscreen mode Exit fullscreen mode

Daha sonra bu məlumat bazasında Employees adında işcilər cədvəlini yaradaq.


CREATE TABLE Employees
(
    Id VARCHAR(50) NOT NULL PRIMARY KEY,    -- İşçinin referans kodu
    FullName NVARCHAR(50) NOT NULL,         -- İşçinin tam adı
    BirthDate DATE NOT NULL,                -- İşçinin doğum tarixi
    Phone VARCHAR(20) NOT NULL              -- İşçinin telefon nömrəsi
)

Enter fullscreen mode Exit fullscreen mode

Cədvəlimiz də hazır olduqdan sonra artıq proqramı hazırlaya bilərik. Bunun üçün Visual Studio ortamından CSharp proqramlaşdırma dilini seçməklə, adını EmployeeService yazmaqla, yeni bir Console Application yaradırıq.

Image description

Image description

Biz məlumat bazası bağlantısı üçün SqlClient kitabxanasından istifadə edəcəyik. Bunun üçün proqramın Solution Explorer pəncərəsindən sağ düyməni sıxıb Manage NuGet Packages menyusuna daxil olub, SqlClient axtarışını edirik, System.Data.SqlClient kitabxanasın proqramımıza yükləyirik.

Image description

Image description

Proqramda məlumat bazasındakı işçi cədvəlini əks etdirmək üçün eyni ad və sütunlu klass yaradırıq.


namespace EmployeeService
{
    internal class Employee
    {
        public string? Id { get; set; }

        public string? FullName { get; set; }

        public DateTime BirthDate { get; set; }

        public string? Phone { get; set; }
    }
}

Enter fullscreen mode Exit fullscreen mode

Əvvəlcə oxuma əməliyyatı üçün metodumuzu hazırlayaq.


using EmployeeService;
using System.Data.SqlClient;

string connectionString = "data source=.; initial catalog=EmployeeDB; Integrated Security=True;";

List<Employee> GetEmployees()
{
    var employees = new List<Employee>();

    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();

        var query = "SELECT * FROM Employees";

        using (var command = new SqlCommand(query, connection))
        {
            using (var reader = command.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        var employee = new Employee
                        {
                            Id = reader.GetString(reader.GetOrdinal("Id")),
                            FullName = reader.GetString(reader.GetOrdinal("FullName")),
                            BirthDate = reader.GetDateTime(reader.GetOrdinal("BirthDate")),
                            Phone = reader.GetString(reader.GetOrdinal("Phone"))
                        };

                        employees.Add(employee);
                    }
                } 
            }
        }

        connection.Close();
    }

    return employees;
}

Enter fullscreen mode Exit fullscreen mode

İndi isə referans koduna görə axtarış ilə oxuma əməliyyatı üçün metod yazaq. Burada biz tək referans kodu deyil, digər sütunlara görə də axtarış icra edə bilərik.


Employee GetEmployeeById(string id)
{
    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();

        var query = "SELECT * FROM Employees WHERE Id = @id";

        using (var command = new SqlCommand(query, connection))
        {
            command.Parameters.AddWithValue("@id", id);

            using (var reader = command.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        var employee = new Employee
                        {
                            Id = reader.GetString(reader.GetOrdinal("Id")),
                            FullName = reader.GetString(reader.GetOrdinal("FullName")),
                            BirthDate = reader.GetDateTime(reader.GetOrdinal("BirthDate")),
                            Phone = reader.GetString(reader.GetOrdinal("Phone"))
                        };

                        return employee;
                    }
                }  
            }
        }

        connection.Close();
    }

    return null;
}

Enter fullscreen mode Exit fullscreen mode

Növbəti əməliyyat yeni işçinin sistemə daxil edilməsi olsun.

void CreateEmployee(Employee newEmployee)
{
    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();

        var query = "INSERT INTO Employees (Id, FullName, BirthDate, Phone) VALUES (@id, @fullName, @birthDate, @phone)";

        using (var command = new SqlCommand(query, connection))
        {
            command.Parameters.AddWithValue("@id", newEmployee.Id);
            command.Parameters.AddWithValue("@fullName", newEmployee.FullName);
            command.Parameters.AddWithValue("@birthDate", newEmployee.BirthDate);
            command.Parameters.AddWithValue("@phone", newEmployee.Phone);

            command.ExecuteNonQuery(); 
        }

        connection.Close();
    }
}

Enter fullscreen mode Exit fullscreen mode

Sistemə daxil edilən məlumatlardan bir dəyişiklik ehtiyacı hər zaman yarana bilər. Bunun üçün məlumatı dəyişdirmək üçün bir metod yazaq.


void UpdateEmployeeById(Employee newEmployee)
{
    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();

        var query = "UPDATE Employees SET FullName = @fullName, BirthDate = @birthDate, Phone = @phone WHERE Id = @id";

        using (var command = new SqlCommand(query, connection))
        {
            command.Parameters.AddWithValue("@id", newEmployee.Id);
            command.Parameters.AddWithValue("@fullName", newEmployee.FullName);
            command.Parameters.AddWithValue("@birthDate", newEmployee.BirthDate);
            command.Parameters.AddWithValue("@phone", newEmployee.Phone);

            command.ExecuteNonQuery(); 
        }

        connection.Close();
    }
}

Enter fullscreen mode Exit fullscreen mode

Son olaraq məlumatın silinməsi metodunu yazaq.


void DeleteEmployeeById(string id)
{
    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();

        var query = "DELETE FROM Employees WHERE Id = @id";

        using (var command = new SqlCommand(query, connection))
        {
            command.Parameters.AddWithValue("@id", id);
            command.ExecuteNonQuery(); 
        }

        connection.Close();
    }
}

Enter fullscreen mode Exit fullscreen mode

Qeyd edək ki, hər bir işçi üçün referans kodu unique (unique - təkrarlanmayan) olduğundan silmə, dəyişdirmə və axtarış əməliyyatlarını referans kodu ilə etməklə xəta riskini azaltmış oluruq.

İndi isə bu metodları ana proqramımızda istifadə edək.


// Yeni iscinin sisteme daxil edilmesi

var newEmployee = new Employee
{
    Id = Guid.NewGuid().ToString(),
    FullName = "Elcin Ibrahimli",
    BirthDate = DateTime.Parse("1994-10-14"),
    Phone = "+994503566919"
};

CreateEmployee(newEmployee);


// Butun iscilerin sistemden oxunmasi

var employees = GetEmployees();

foreach (var item in employees)
{
    Console.WriteLine($"Adi: {item.FullName}, Dogum Tarixi: {item.BirthDate}, Telefon: {item.Phone}");
}


// Iscinin axtaris edilmesi

var id = "{specifik_id}";

var employee = GetEmployeeById(id);


// Iscinin melumatinin deyisidirilmesi

var updatedEmployee = new Employee
{
    Id = "{specifik_id}",
    FullName = "Elchin Ibarhim",
    BirthDate = DateTime.Parse("1994-10-13"),
    Phone = "+9940503566919"
};

UpdateEmployeeById(updatedEmployee);

// iscinin sistemden silinmesi

id = "{specific_id}";

DeleteEmployeeById(id);

Enter fullscreen mode Exit fullscreen mode

QEYD: Burada {specific_id} yeni işçi yaradılarkən Guid.NewGuid() metodunun yaradacağı referans kodudu.

Top comments (0)