Blog Dla Programistów C#/.NET

środa, 15 stycznia 2025

Wprowadzenie


Dzisiaj stworzymy prostą aplikację konsolową, która łączy się z bazą danych SQL Server za pomocą ADO.NET, wykonuje podstawowe operacje CRUD (Create, Read, Update, Delete) i demonstruje, jak efektywnie pracować z danymi w aplikacjach .NET.

Bazy Danych w C#: Tworzenie Prostej Aplikacji z Połączeniem Do Bazy Danych

Przygotowanie środowiska


Zanim zaczniemy, upewnij się, że masz:

    1. Visual Studio (najnowszą wersję)
    2. SQL Server (może być Express)
    3. Pakiet NuGet: Microsoft.Data.SqlClient


Struktura projektu


Nasza aplikacja będzie prostym systemem zarządzania książkami. Oto struktura projektu:

    1. Program.cs - główna klasa programu
    2. Book.cs - model reprezentujący książkę
    3. DatabaseManager.cs - klasa do zarządzania połączeniem z bazą danych


Krok 1: Tworzenie bazy danych


Najpierw utwórzmy bazę danych i tabelę:

CREATE DATABASE BookStore;
GO

USE BookStore;
GO

CREATE TABLE Books (
Id INT PRIMARY KEY IDENTITY(1,1),
Title NVARCHAR(100) NOT NULL,
Author NVARCHAR(100) NOT NULL,
PublicationYear INT
);


Krok 2: Model Book


Utwórz plik Book.cs:

public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public int PublicationYear { get; set; }

public override string ToString()
{
return $"{Id}: {Title} by {Author} ({PublicationYear})";
}
}


Krok 3: DatabaseManager


Utwórz plik DatabaseManager.cs:

using Microsoft.Data.SqlClient;
using System;
using System.Collections.Generic;

public class DatabaseManager
{
private string _connectionString;

public DatabaseManager(string connectionString)
{
_connectionString = connectionString;
}

public void AddBook(Book book)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
string query = "INSERT INTO Books (Title, Author, PublicationYear) VALUES (@Title, @Author, @PublicationYear)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Title", book.Title);
command.Parameters.AddWithValue("@Author", book.Author);
command.Parameters.AddWithValue("@PublicationYear", book.PublicationYear);

connection.Open();
command.ExecuteNonQuery();
}
}

public List<Book> GetAllBooks()
{
List<Book> books = new List<Book>();

using (SqlConnection connection = new SqlConnection(_connectionString))
{
string query = "SELECT * FROM Books";
SqlCommand command = new SqlCommand(query, connection);

connection.Open();
SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
books.Add(new Book
{
Id = (int)reader["Id"],
Title = (string)reader["Title"],
Author = (string)reader["Author"],
PublicationYear = (int)reader["PublicationYear"]
});
}
}

return books;
}

public void UpdateBook(Book book)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
string query = "UPDATE Books SET Title = @Title, Author = @Author, PublicationYear = @PublicationYear WHERE Id = @Id";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Id", book.Id);
command.Parameters.AddWithValue("@Title", book.Title);
command.Parameters.AddWithValue("@Author", book.Author);
command.Parameters.AddWithValue("@PublicationYear", book.PublicationYear);

connection.Open();
command.ExecuteNonQuery();
}
}

public void DeleteBook(int id)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
string query = "DELETE FROM Books WHERE Id = @Id";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Id", id);

connection.Open();
command.ExecuteNonQuery();
}
}
}


Krok 4: Program główny


Zmodyfikuj Program.cs:

using System;
using System.Collections.Generic;

class Program
{
static void Main(string[] args)
{
string connectionString = "Server=localhost;Database=BookStore;Trusted_Connection=True;";
DatabaseManager dbManager = new DatabaseManager(connectionString);

while (true)
{
Console.WriteLine("\nWybierz operację:");
Console.WriteLine("1. Dodaj książkę");
Console.WriteLine("2. Pokaż wszystkie książki");
Console.WriteLine("3. Zaktualizuj książkę");
Console.WriteLine("4. Usuń książkę");
Console.WriteLine("5. Wyjście");

string choice = Console.ReadLine();

switch (choice)
{
case "1":
AddBook(dbManager);
break;
case "2":
ShowAllBooks(dbManager);
break;
case "3":
UpdateBook(dbManager);
break;
case "4":
DeleteBook(dbManager);
break;
case "5":
return;
default:
Console.WriteLine("Nieprawidłowy wybór.");
break;
}
}
}

static void AddBook(DatabaseManager dbManager)
{
Console.Write("Tytuł: ");
string title = Console.ReadLine();
Console.Write("Autor: ");
string author = Console.ReadLine();
Console.Write("Rok publikacji: ");
int year = int.Parse(Console.ReadLine());

Book newBook = new Book { Title = title, Author = author, PublicationYear = year };
dbManager.AddBook(newBook);
Console.WriteLine("Książka dodana pomyślnie.");
}

static void ShowAllBooks(DatabaseManager dbManager)
{
List<Book> books = dbManager.GetAllBooks();
foreach (var book in books)
{
Console.WriteLine(book);
}
}

static void UpdateBook(DatabaseManager dbManager)
{
Console.Write("Podaj ID książki do aktualizacji: ");
int id = int.Parse(Console.ReadLine());
Console.Write("Nowy tytuł: ");
string title = Console.ReadLine();
Console.Write("Nowy autor: ");
string author = Console.ReadLine();
Console.Write("Nowy rok publikacji: ");
int year = int.Parse(Console.ReadLine());

Book updatedBook = new Book { Id = id, Title = title, Author = author, PublicationYear = year };
dbManager.UpdateBook(updatedBook);
Console.WriteLine("Książka zaktualizowana pomyślnie.");
}

static void DeleteBook(DatabaseManager dbManager)
{
Console.Write("Podaj ID książki do usunięcia: ");
int id = int.Parse(Console.ReadLine());
dbManager.DeleteBook(id);
Console.WriteLine("Książka usunięta pomyślnie.");
}
}


Podsumowanie


Gratulacje! Właśnie stworzyłeś prostą, ale funkcjonalną aplikację C# z połączeniem do bazy danych SQL Server za pomocą ADO.NET. Ta aplikacja demonstruje podstawowe operacje CRUD, które są fundamentem wielu aplikacji biznesowych. Oto kilka kluczowych punktów do zapamiętania:

    1. Zawsze używaj parametryzowanych zapytań, aby uniknąć ataków SQL Injection.
    2. Pamiętaj o prawidłowym zamykaniu połączeń - użycie using automatycznie to zapewnia.
    3. Rozważ użycie ORM (np. Entity Framework) dla bardziej złożonych aplikacji.
    4. Obsługa wyjątków jest kluczowa w aplikacjach pracujących z bazami danych.

Jeśli chcesz pogłębić swoją wiedzę na temat pracy z bazami danych w C# oraz innych zaawansowanych technik programowania w .NET, zachęcam do sprawdzenia mojego szkolenia online "Zostań Programistą .NET". W szkoleniu tym szczegółowo omawiamy nie tylko bazy danych, ale także wiele innych kluczowych aspektów programowania, które pomogą Ci stać się skutecznym deweloperem .NET. Dziękuję za uwagę! Jeśli masz pytania lub chcesz podzielić się swoimi doświadczeniami z tworzeniem aplikacji bazodanowych w C#, zostaw komentarz poniżej. Powodzenia w Twojej przygodzie z programowaniem!

Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
CTO & Founder - FindSolution.pl
Programista C#/.NET. Specjalizuje się w Blazor, ASP.NET Core, ASP.NET MVC, ASP.NET Web API, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Dodaj komentarz

Wyszukiwarka

© Copyright 2025 modestprogrammer.pl. Wszelkie prawa zastrzeżone. Regulamin. Polityka prywatności. Design by Kazimierz Szpin