C#: Создание формы подключения (входа) к БД MS SQL
На стороне сервера БД определены 2 типа пользователей: с правами редактирования и с правами только для чтения. Для них установлены соответствующие логин и пароль. Каким образом можно реализовать форму входа, чтобы при запуске приложения для пользователя появилось диалоговое окно, где он может ввести свой логин, пароль и подключиться к БД?
Ответы (1 шт):
Можно сделать так: вот у Вас есть форма. На ней есть текстовые поля, в которые пользователь вводит свои логин и пароль. Пусть это tbLogin и tbPassword.
Также, допустим, у нас есть кнопка, которая вызывает процедуру проверки подключения.
Для подключения к БД используется так называемая connection string, куда мы поместим эти данные.
Тогда код, который будет выполнять проверку (для MS SQL Server), может быть примерно таким:
private void Button1_Click(object sender, EventArgs e)
{
string connectionString = $"Provider=SQLOLEDB.1;Password={tbPassword.Text};Persist Security Info=True;User ID={tbLogin.Text};Initial Catalog=FsaRobot;Data Source=192.168.0.25";
using (SqlConnection cn = new SqlConnection(connectionString))
{
try
{
cn.Open();
MessageBox.Show("Connected!");
}
catch(Exception ex)
{
MessageBox.Show($"Not connected, error: {ex.Message}");
}
}
}
Теперь немного расширим наш сценарий.
Пускай у нас будет "форма проверки логина - пароля" и "главная форма".
Главная форма должна запускаться только в том случае, если проверка прошла успешно.
я бы написал такой код следующим образом.
Программы .NET WinForms обычно стартуют из static main() примерно так:
using System;
using System.Windows.Forms;
namespace DbExample {
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Здесь главное - то, что создаётся экземпляр формы Form1 и передаётся в метод Application.Run()
Сделаем, чтобы последовательно создавались две формы, форма логина и главная. В форму логина добавим публичное поле LoginSuccess. И будем в процессе создания форм его проверять:
using System;
using System.Windows.Forms;
namespace DbExample {
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
FLogin fl = new FLogin();
Application.Run(fl);
if (fl.LoginSuccess){
FMain fMain = new FMain();
Application.Run(fMain);
}
else{
MessageBox.Show("Извините, проверка логина-пароля неудачна");
}
}
}
}
Тогда FMain запустится только в случае удачной проверки логина - пароля.
Саму проверку можно организовать, чуть чуть поменяв первоначальный код под button1 в форме логина:
public bool LoginSuccess=false;
private void Button1_Click(object sender, EventArgs e)
{
string connectionString = $"Provider=SQLOLEDB.1;Password={tbPassword.Text};Persist Security Info=True;User ID={tbLogin.Text};Initial Catalog=FsaRobot;Data Source=192.168.0.25";
using (SqlConnection cn = new SqlConnection(connectionString))
{
try
{
cn.Open();
LoginSuccess = true;
}
catch(Exception ex)
{
MessageBox.Show($"Not connected, error: {ex.Message}");
}
}
Close();
}
Конечно, здесь код немного упрощен, например, нет обработки ошибок.
(Если у кого то есть критика этого способа - модете написать в комментариях.)