GithubHelp home page GithubHelp logo

hihiz / winforms-mssql-sqlite-connection Goto Github PK

View Code? Open in Web Editor NEW
4.0 1.0 3.0 70 KB

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

sql sql-server ado-net codefirst datafirst entityframework mssql scaffold sqlite winforms

winforms-mssql-sqlite-connection's Introduction

WinForms MSSQL - SQLite Connection

WinForms 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, DataGridView dgv)
  {
    string sql = query;
    SqlConnection connection = GetConnection();
    SqlCommand command = new SqlCommand(sql, connection);
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    dgv.DataSource = dt;
    connection.Close();
  }
}

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

private void Form1_Load(object sender, EventArgs 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 command = new SqlCommand(cmd, sqlConnection);
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    // Вывод на грид
    dataGridViewUser.DataSource = dt;
    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, DataGridView dgv)
{
  string sql = query;
  SqlConnection connection = GetConnection();
  SqlCommand command = new SqlCommand(sql, connection);
  SqlDataAdapter adapter = new SqlDataAdapter(command);
  DataTable dt = new DataTable();
  adapter.Fill(dt);
  dgv.DataSource = dt;
  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, DataGridView dgv)
{
  string sql = query;
  SQLiteConnection connection = GetConnection();
  SQLiteCommand command = new SQLiteCommand(sql, connection);
  SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
  DataTable dt = new DataTable();
  adapter.Fill(dt);
  dgv.DataSource = dt;
  connection.Close();
  }
}

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

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

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

  using (SQLiteConnection sqlConnection = new SQLiteConnection(connectionString))
  {
    sqlConnection.Open();
    string cmd = sqlQuery;
    SQLiteCommand command = new SQLiteCommand(cmd, sqlConnection);
    SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    // Вывод на грид
    dataGridViewUser.DataSource = dt;
    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, DataGridView dgv)
{
  string sql = query;
  SQLiteConnection connection = GetConnection();
  SQLiteCommand command = new SQLiteCommand(sql, connection);
  SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
  DataTable dt = new DataTable();
  adapter.Fill(dt);
  dgv.DataSource = dt;
  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=название БД;" 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. Вывод данных из таблицы

private void Form1_Load(object sender, EventArgs e)
{
  using (AuthUserContext db = new AuthUserContext())
  {
    var users = db.Users.ToList();
    dataGridView1.DataSource = users;
  }
}

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

AuthUserContext db = new AuthUserContext();

User user = new User
{
  Login = textBoxLogin.Text,
  Password = textBoxPassword.Text,
  PasswordCopy = textBoxPassword.Text
};

db.Users.Add(user);
db.SaveChanges();

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

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

using (AuthUserContext db = new AuthUserContext())
{
  if (db.Users.FirstOrDefault(user => user.Login == textBoxLogin.Text && user.Password == textBoxPassword.Text) != 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 }
        );
    }

winforms-mssql-sqlite-connection's People

Contributors

hihiz avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.