- Сообщения
 - 8,143
 
- Решения
 - 27
 
- Реакции
 - 6,959
 
WinForms MSSQL - SQLite Connection
WinForms ADO .NET & EF CORE6
ADO .NET
WinForms ADO .NET & EF CORE6
ADO .NET
1. Подключить NuGet MSSQL
		Код:
	
	
	System.Data.SqlClient Author Microsoft
	
2. (Вариант 1) Сделать класс для работы с БД MSSQL
		Код:
	
	
	C#
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
		Код:
	
	
	C#
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. Строка подключения
		Код:
	
	
	C#
SqlConnection sqlConnection = new SqlConnection(@"Data Source=Test\SQLEXPRESS;Initial Catalog=NameDataBase;Trusted_Connection=True;");
	4. Вернуть строку подключения
		Код:
	
	
	C#
public SqlConnection GetConnection()
{
  return sqlConnection;
}
	5. Функция для выполнения запроса
		Код:
	
	
	C#
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
		Код:
	
	
	C#
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();
}
	Пример кода
Авторизация логин пароль

		Код:
	
	
	C#
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("Вход выполнен");
      }
   }
}
	Регистрация

		Код:
	
	
	C#
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
	
2. (Вариант 1) Сделать класс для работы с БД SQLite
		Код:
	
	
	C#
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
		Код:
	
	
	C#
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. Строка подключения
		Код:
	
	
	C#
SQLiteConnection connection = new SQLiteConnection("Data Source=AuthUser.db;");
	4. Вернуть строку подключения
		Код:
	
	
	C#
SQLiteConnection GetConnection()
{
  return connection;
}
	5. Функция для выполнения запроса
		Код:
	
	
	C#
 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
		Код:
	
	
	C#
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
	
		Код:
	
	
	Microsoft.EntityFrameworkCore.Sqlite
	
2. При подходе DataBase First - Scaffold, нужно подключить пакет
		Код:
	
	
	Microsoft.EntityFrameworkCore.Tools
	
Microsoft.EntityFrameworkCore.Tools - необходим для создания классов по базе данных, то есть reverse engineering
Добавить в проект
App.config
		XML:
	
	
	<?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. Создать класс модели
		Код:
	
	
	C#
public class User
{
  public long Id { get; set; }
  public string Login { get; set; }
  public string Password { get; set; }
  public string PasswordCopy { get; set; }
}
	2. Создать класс контекста данных
		Код:
	
	
	C#
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. Вывод данных из таблицы
		Код:
	
	
	C#
private void Form1_Load(object sender, EventArgs e)
{
  using (AuthUserContext db = new AuthUserContext())
  {
    var users = db.Users.ToList();
    dataGridView1.DataSource = users;
  }
}
	4. Добавление данных
		Код:
	
	
	C#
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. Сравнение данных
		Код:
	
	
	C#
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"
	
		Код:
	
	
	Update-Database
	
		Код:
	
	
	Add-Migration "AddAgeProduct"
Update-database
	
		Код:
	
	
	Add-Migration "DeleteAgeProduct"
Update-database
	В контексте не пишем Database.EnsureCreated();
		Код:
	
	
	Add-Migration "Initial"
	
		Код:
	
	
	Update-Database
	Инициализация БД начальными данными
* В классе контекста
		Код:
	
	
	C#
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 }
        );
    }
	
			
				Последнее редактирование: