C# ilə məlumat bazası bağlantı əməliyyatları
Published: 2023-11-01 07:43:06

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

```

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
)

```

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tkuqn90ghj34f3kp8ka9.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3tmcruubcqcvouge13tj.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7l0tmaj4rxuv89ui0c9l.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p0qs3ptq348tqqu00oo1.png)

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; }
    }
}

```

Ə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;
}

```


İ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;
}

```

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();
    }
}

```


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();
    }
}

```


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();
    }
}

```

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);

```

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