И так будем пилить генератор, не весь сразу? а постепенно. Начнем с того что будем работать с базой на более низком уровне. То есть мы сами будем создавать подключение к базе прямо из программы и сами будем вызывать запросы прямо из кода.
Такой подход более универсален в том плане, что он применим в любом языке программирования и научившись работать с ним на C# у вас не возникнет особых проблем реализовать такой же подход на любом другом языке.
Создаем приложение и подключаем библиотеку SQLClient
И так поехали. Будем создавать Windows Forms приложение:
теперь важный момент, чтобы работать с базой нам надо подключить библиотечку, которая добавляет функционал для SQL.
В .NET 5.0 она не установлена по умолчанию и надо добавлять ее вручную.
Для того чтобы устанавливать сторонние библиотечки есть репозиторий с пакетам на все случаи жизни. Находится он по адресу: https://www.nuget.org
Заходим и пишем в поиске SQL
выбираем либу System.Data.SqlClient
откроется окно, в котором надо будет скопировать команду
теперь открываем терминал
внизу должна открыться консолька:
в этой консольке мы находимся в папке решения, то есть тут
а нам надо переместить текущую папку консоли (текущая папка эта та в которой сейчас консоль будет выполнять команды) в папку DBGenerator
для этого пишем в консольку
и жмем enter, вот так получится:
а теперь вписываем команду
dotnet add package System.Data.SqlClient --version 4.8.3
снова тыкаем enter и ждем, увидим что-то такое:
теперь если глянуть в обозревателе решения, то увидим, что там появился SQLClient
между прочим, его раньше не было, а теперь вот есть и значит можно его использовать.
Динамическое подключение к БД
У нас цель сделать достаточно гибкое приложение, по крайне мере в рамках работы на разных компьютерах. Что это значит? А это значит, что мы хотим, чтобы у нас была возможность подключится к базе данных в независимости от того где она находится, будь то просто файл с базой, или это база, расположенная на удаленному сервере.
Для таких целей существует особый формат представления так называемой строки подключения или по-английски ConnectionString
Где же взять этот ConnectionString? А берётся он очень просто, в обозревателе серверов, тыкаем на нашу БД и справа в свойствах видим
можно скопировать эту строку и увидеть
Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\m\Desktop\CatsRaces.mdf;Integrated Security=True;Connect Timeout=30
то есть строка по сути представляет собой словарик вида: ключ1=значение1;ключа2=значение2;...
Если записать это строку в столбик, то получится такой набор ключей:
Data Source=(LocalDB)\MSSQLLocalDB
– это сервер БД, для баз которые загружаются из файла всегда выглядит так
AttachDbFilename=C:\Users\m\Desktop\CatsRaces.mdf
– путь к файлу который мы хотим подключить
Integrated Security=True
– означает что не надо использовать юзер/пароль при подключении
Connect Timeout=30
– как долго пытаться подключится, на случай если база по каким-то причинам не доступна
давайте теперь попробуем посмотреть, как выглядит строка подключения если мы хотим подключиться не к файлу, а к серверу, например, к моей базе которая валяется на tealeaf.su
тут получаем следующий формат:
Data Source=tealeaf.su;Initial Catalog=ITStudents;Persist Security Info=True;User ID=ismb;Password=***********
тут у нас такие ключи
Data Source=tealeaf.su
– это сервер БД, для баз которые загружаются из файла всегда выглядит так
Initial Catalog=ITStudents
– название БД
Persist Security Info=True
– означает что НАДО использовать юзер/пароль при подключении
User ID=ismb
– собственно юзер
Password=***********
– пароль, вместо звездочек надо естественно реальные значения подставить
Ну и давайте глянем напоследок вариант, когда у нас идет соединение к БД, которая работает на локальном сервере, то бишь на вашем компе, и которую вы создавали через SQL Management. Например, у меня такая база
вот она
если я подключусь к ней из Visual Studio
тут строка выглядит совсем короткой:
Data Source=.;Initial Catalog=CatRaces;Integrated Security=True
Data Source=.
– точка означает локальный сервер, еще можно писать так Data Source=(local)
Initial Catalog=CatRaces
– название БД
Integrated Security=True
– означает что не надо использовать юзер/пароль при подключении
Собственно, вопрос, к чему нам все эти строчки. А к тому что я могу используя эти строки программное подцепиться к базе и даже выполнить какой-то запрос.
Давайте глянем как это делается.
Сделаем такой мини аналог SQL Management, с помощью которого можно будет выполнить любой запрос.
И так, создаем элементы на форме
Теперь давайте загоним в txtConnectionString, какую-нибудь строку, например, я хочу подключится к файлу, значит укажу там
Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\m\Desktop\CatsRaces.mdf;Integrated Security=True;Connect Timeout=30
теперь кликаем два раза на кнопку “выполнить запрос”, добавляем using вверху
using System.Data.SqlClient;
и прописываем обработчик кнопки
а вообще это конечно можно прописать компактнее, если использовать using
Использование using гарантирует что метод close будет вызван автоматически, ну и тут еще команде можно передать сразу и текст и соединение.
Формирование строки подключения
Вообще вот этот ConnectionString который сейчас у нас выглядит как большая страшная строка можно формировать в более удобном виде. Для этого есть специальный класс SqlConnectionStringBuilder, с помощью него можно сформировать строку покомпонентно. Работает примерно так:
зачем это нужно, а затем что можно сделать поля для ввода на форме и с них считывать значения. В частности, можно даже реализовать возможность открывать файлик через OpenFileDialog.
Ну теперь можно приступить к заданию