- Сообщения
- 7,989
- Решения
- 11
- Реакции
- 6,758
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 }
);
}
Последнее редактирование: