Skip to content

Hihiz/WPF-MSSQL-SQLite-Connection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 

Repository files navigation

WPF-MSSQL-SQLite-Connection

WPF ADO .NET & EF CORE6

ADO .NET

1. Подключить NuGet MSSQL

System.Data.SqlClient Author Microsoft

NuGet System Data SqlClient

2. (Вариант 1) Сделать класс для работы с БД MSSQL

public class DB
{
public SqlConnection sqlConnection = new SqlConnection(@"Data Source=Test\SQLEXPRESS;Initial Catalog=NameDataBase;Trusted_Connection=True;");
  
  public SqlConnection GetConnection()
  {
    return sqlConnection;
  }
  
  public DataTable Query(string sqlQuery)
  {
    SqlDataAdapter adapter = new SqlDataAdapter();
    DataTable table = new DataTable();
    SqlCommand command = new SqlCommand(sqlQuery, GetConnection());
    adapter.SelectCommand = command;
    adapter.Fill(table);
    return table;
  }
  
  public void Display(string query, DataGrid dg)
  {
    connection.Open();
    string cmd = query; // Из какой таблицы нужен вывод 
    SqlCommand createCommand = new SqlCommand(cmd, connection);
    createCommand.ExecuteNonQuery();
    SqlDataAdapter dataAdp = new SqlDataAdapter(createCommand);
    DataTable dt = new DataTable(); //
    dataAdp.Fill(dt);
    dg.ItemsSource = dt.DefaultView; // Сам вывод 
    connection.Close();
  }
}

2. (Вариант 2) Без класса для работы с БД MSSQL

private void Window_Loaded(object sender, RoutedEventArgs e)
{
  // Строка подключения
  string connectionString = "Data Source=название сервера;Initial Catalog=название бд;Trusted_Connection=True;";

  // Запрос
  string sqlQuery = "SELECT * FROM Users";

  using (SqlConnection sqlConnection = new SqlConnection(connectionString))
  {
    sqlConnection.Open();
    string cmd = sqlQuery; // Из какой таблицы нужен вывод 
    SqlCommand createCommand = new SqlCommand(cmd, sqlConnection);
    createCommand.ExecuteNonQuery();
    SqlDataAdapter dataAdp = new SqlDataAdapter(createCommand);
    DataTable dt = new DataTable(); // В скобках указываем название таблицы
    dataAdp.Fill(dt);
    // Вывод на грид
    dataGridUser.ItemsSource = dt.DefaultView; // Сам вывод 
    sqlConnection.Close();
  }
}

3. Строка подключения

SqlConnection sqlConnection = new SqlConnection(@"Data Source=Test\SQLEXPRESS;Initial Catalog=NameDataBase;Trusted_Connection=True;");

4. Вернуть строку подключения

public SqlConnection GetConnection()
{
  return sqlConnection;
}

5. Функция для выполнения запроса

public DataTable Query(string sqlQuery)
{
    SqlDataAdapter adapter = new SqlDataAdapter();
    DataTable table = new DataTable();
    SqlCommand command = new SqlCommand(sqlQuery, GetConnection());
    adapter.SelectCommand = command;
    adapter.Fill(table);
    return table;
}

6. Функция для вывода таблицы на Grid

public void Display(string query, DataGrid dg)
{
  connection.Open();
  string cmd = query; // Из какой таблицы нужен вывод 
  SQLiteCommand createCommand = new SQLiteCommand(cmd, connection);
  createCommand.ExecuteNonQuery();
  SQLiteDataAdapter dataAdp = new SQLiteDataAdapter(createCommand);
  DataTable dt = new DataTable(); // В скобках указываем название таблицы
  dataAdp.Fill(dt);
  dg.ItemsSource = dt.DefaultView; // Сам вывод 
  connection.Close();
}

Пример кода

Авторизация логин пароль

AuthButton

if (textBoxLogin.Text.Length > 0)
{
  if (textBoxPassword.Text.Length > 0)
  {
    string query = $"SELECT Login, Password FROM Accounts WHERE Login = '{textBoxLogin.Text}' AND Password = '{textBoxPassword.Text}'";
    DataTable dt = dataBase.Query(query);

      if (dt.Rows.Count > 0)
      {
        MessageBox.Show("Вход выполнен");
      }
   }
}

Регистрация

RegButton

try
{
  string query = $"INSERT INTO Accounts VALUES ('{textBoxRegLogin.Text}', '{textBoxRegPass.Text}')";
  dataBase.Query(query);
  MessageBox.Show($"{textBoxRegLogin.Text} зарегистрирован");
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

Подключение SQLite

1.Подключить NuGet SQLite

System.Data.SQLite

NuGet System Data SQLite

2. (Вариант 1) Сделать класс для работы с БД SQLite

public class DB
{
  SQLiteConnection connection = new SQLiteConnection("Data Source=AuthUser.db;");

  SQLiteConnection GetConnection()
  {
    return connection;
  }

public DataTable Query(string sqlQuery)
{
  SQLiteDataAdapter adapter = new SQLiteDataAdapter();
  DataTable dt = new DataTable();
  SQLiteCommand command = new SQLiteCommand(sqlQuery, GetConnection());
  adapter.SelectCommand = command;
  adapter.Fill(dt);
  return dt;
}

  public void Display(string query, DataGrid dg)
  {
    connection.Open();
    string cmd = query; // Из какой таблицы нужен вывод 
    SQLiteCommand createCommand = new SQLiteCommand(cmd, connection);
    createCommand.ExecuteNonQuery();
    SQLiteDataAdapter dataAdp = new SQLiteDataAdapter(createCommand);
    DataTable dt = new DataTable(); // В скобках указываем название таблицы
    dataAdp.Fill(dt);
    dg.ItemsSource = dt.DefaultView; // Сам вывод 
    connection.Close();
  }
}

2. (Вариант 2) Без класса для работы с БД SQLite

private void Window_Loaded(object sender, RoutedEventArgs e)
{
  // Строка подключения
  string connectionString = "Data Source=название бд.db;";

  // Запрос
  string sqlQuery = "SELECT * FROM Users";

  using (SQLiteConnection  sqlConnection = new SQLiteConnection (connectionString))
  {
    sqlConnection.Open();
    string cmd = sqlQuery; // Из какой таблицы нужен вывод 
    SQLiteCommand  createCommand = new SQLiteCommand (cmd, sqlConnection);
    createCommand.ExecuteNonQuery();
    SQLiteDataAdapter  dataAdp = new SQLiteDataAdapter (createCommand);
    DataTable dt = new DataTable(); // В скобках указываем название таблицы
    dataAdp.Fill(dt);
    // Вывод на грид
    dataGridUser.ItemsSource = dt.DefaultView; // Сам вывод 
    sqlConnection.Close();
  }
}

3. Строка подключения

SQLiteConnection connection = new SQLiteConnection("Data Source=AuthUser.db;");

4. Вернуть строку подключения

SQLiteConnection GetConnection()
{
  return connection;
}

5. Функция для выполнения запроса

 public DataTable Query(string sqlQuery)
{
  SQLiteDataAdapter adapter = new SQLiteDataAdapter();
  DataTable dt = new DataTable();
  SQLiteCommand command = new SQLiteCommand(sqlQuery, GetConnection());
  adapter.SelectCommand = command;
  adapter.Fill(dt);
  return dt;
}

6. Функция для вывода таблицы на Grid

public void Display(string query, DataGrid dg)
{
  connection.Open();
  string cmd = query; // Из какой таблицы нужен вывод 
  SQLiteCommand createCommand = new SQLiteCommand(cmd, connection);
  createCommand.ExecuteNonQuery();
  SQLiteDataAdapter dataAdp = new SQLiteDataAdapter(createCommand);
  DataTable dt = new DataTable(); // В скобках указываем название таблицы
  dataAdp.Fill(dt);
  dg.ItemsSource = dt.DefaultView; // Сам вывод 
  connection.Close();
}

EF CORE6

1. Подключить NuGet MSSQL или SQLite

Microsoft.EntityFrameworkCore.SqlServer

ef1

Microsoft.EntityFrameworkCore.Sqlite

ef2

2. При подходе DataBase First - Scaffold, нужно подключить пакет

Microsoft.EntityFrameworkCore.Tools

image

Microsoft.EntityFrameworkCore.Tools - необходим для создания классов по базе данных, то есть reverse engineering

Добавить в проект App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

	<connectionStrings>
		<add
			 name="ConnectionLocalDb"
			 connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=SportStore;Trusted_Connection=True;"
			 providerName="Microsoft.EntityFrameworkCore.SqlServer"/>
	</connectionStrings>

</configuration>

3. Создание классов по базе данных

SQLite

Scaffold-DbContext "DataSource=полный путь к бд;" Microsoft.EntityFrameworkCore.Sqlite

MSSQL

Scaffold-DbContext "Data Source=название сервера;Initial Catalog=название БД;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

При подходе Code First

1. Создать класс модели

public class User
{
  public long Id { get; set; }
  public string Login { get; set; }
  public string Password { get; set; }
  public string PasswordCopy { get; set; }
}

2. Создать класс контекста данных

public class ApplicationContext : DbContext
{
  public ApplicationContext()
  {
    Database.EnsureDeleted();
    Database.EnsureCreated();
  }

  public DbSet<Users> Users { get; set; }

  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  {
      // SQLite
      optionsBuilder.UseSqlite("Data Source=название бд.db");
      
      // MSSQL
       //optionsBuilder.UseSqlServer("Data Source=название сервера;Initial Catalog=название бд;Trusted_Connection=True;");
       
       // Если строка подключения в App.config, тогда
     // optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["ConnectionDbLocal"].ToString());
  }
}

3. Вывод данных из таблицы

using (SearchPhoneUserContext db = new SearchPhoneUserContext())
{
  var account = db.Accounts.ToList();
  gridUser.ItemsSource = account;
}

4. Добавление данных

SearchPhoneUserContext db = new SearchPhoneUserContext();

Account account = new Account
{
  Login = textBoxLogin.Text,
  Password = passwordBox.Password,
};

db.Accounts.Add(account);
db.SaveChanges();

MessageBox.Show($"Пользователь: {textBoxLogin.Text} добавлен");

5. Сравнение данных

using (SearchPhoneUserContext db = new SearchPhoneUserContext())
{
  if (db.Accounts.FirstOrDefault(accounts => accounts.Login == textBoxLogin.Text && accounts.Password == passwordBox.Password) != null)
  {
    MessageBox.Show("Вход выполнен", "Успешно");
  }
  else
  {
    MessageBox.Show("Неверный логин или пароль", "Ошибка");
  }
}

Миграции

1.Если база данных существует Database First

Делаем первую миграцию БЕЗ каких либо изменений

Add-Migration "Initial"

Комментируем метод Up

Update-Database

Вторую миграцию делаем С изменениями, пример добавляем новое поле в классе

Add-Migration "AddAgeProduct"

Update-database

Последующие изменения делаются

Add-Migration "DeleteAgeProduct"

Update-database

2.Если базы данных нет Code First

В контексте не пишем Database.EnsureCreated();

Add-Migration "Initial"

  • Метод Up НЕ трогаем

Update-Database

  • После Update-Database база данных создается

Инициализация БД начальными данными

  • В классе контекста
protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().HasData(
                new User { Id = 1, Name = "Tom", Age = 23 },
                new User { Id = 2, Name = "Alice", Age = 26 },
                new User { Id = 3, Name = "Sam", Age = 28 }
        );
    }

About

🔌 WPF Как подключить базу данных SQLite - MSSQL с помощью технологий ADO.NET или EntityFramework

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors