Първата работа
Когато създаваме приложение на C# за работа с данните от база на MS SQL Server, първото нещо е да свържем приложението с базата. Започваме с нов проект за конзолно приложение във Visual Studio:
Create New Project→ от списъка с проекти избирамеConsole applicationза C#.- За име избираме например
DBconnectи папка, която лесно се намира (най-добре на Desktop). - Отваряме панела Server Explorer — от менюто
Viewили сCtrl+Alt+S.
Ключово
Server Explorer е панелът, през който Visual Studio вижда сървъра — много прилича на познатия ни от SSMS Object Explorer и върши почти същата работа.
Как се посочва сървърът
За да се свържем, трябва да знаем името на сървъра. Тук има няколко случая:
| Ситуация | Какво пишем в Server name |
|---|---|
| Сървърът е единственият на този компютър | localhost или .\ |
| На компютъра има повече от един сървър | задължително точното име, напр. DESKTOP-SR79JCP\SQLEXPRESS |
| Сървърът е на друг компютър | TCP/IP адресът на сървърния компютър; при няколко сървъра — и портът за отдалечено свързване |
Бутонът Refresh до полето изкарва списък на конфигурираните сървъри, ако не помниш името.
За Authentication оставяме посочения по премълчаване Windows Authentication — влизаме с потребителското име и паролата, с които сме започнали Windows сесията, точно както при работа от SSMS. Другата възможност е SQL Server Authentication — с определено потребителско име и парола в самия сървър.
- Щракваме с десен бутон върху
Data Connectionsи от списъка с видове сървъри избирамеMicrosoft SQL Server(там са още Access, ODBC, Oracle и др.). - За
Data providerостава.NET Framework Data Provider for SQL Server. - В
Server nameизписваме името на сървъра, а вDatabase— името на базата, с която ще работим (в нашия случайSchool). - С бутона
OKвръзката е установена. В секциятаData Connectionsсе появява ред за нея, а вServers— самият сървър.
Контекстното меню на установената връзка съдържа няколко команди, които ще ползваш постоянно:
| Команда | Какво прави |
|---|---|
Refresh | обновява състоянието на връзката — след дълго прекъсване или след промени в сървъра |
Rename | сменя даденото по премълчаване име на връзката |
Close Connection | затваря я временно (появява се червен ×); Refresh я отваря отново |
Delete | изтрива връзката — при нужда се създава наново |
Browse in SQL Server Object Explorer | заменя панела с познатия от SSMS Object Explorer |
Съвет
Заради SQL Server Object Explorer вътре във Visual Studio до голяма степен отпада нуждата да се местиш между VS и SSMS — C# версията на панела дава практически същите функции.
Работа със съществуваща база
След свързването разгъваме връзката и виждаме елементите на базата: Tables (за School — School_data, Student, Staff, Classes, StudClass), Views (ListClasses, StudList) и Stored Procedures.
Щракване върху името на таблица (или Open Table Definition от контекстното меню) отваря дизайна ѝ — показан едновременно като таблица с параметри и като SQL заявката, с която всъщност е създадена:
CREATE TABLE [dbo].[Student] (
[idStudent] INT NOT NULL,
[name] VARCHAR (50) NOT NULL,
[surname] VARCHAR (50) NOT NULL,
[family] VARCHAR (50) NOT NULL,
[egn] CHAR (10) NOT NULL,
[birth_date] DATE NOT NULL,
[birth_place] VARCHAR (50) NOT NULL,
[district] VARCHAR (50) NOT NULL,
[e_mail] VARCHAR (50) NOT NULL,
[mobile] CHAR (12) NULL,
CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ([egn] ASC)
);Обърни внимание на клаузата CONSTRAINT — тя е добавена автоматично, за да определи egn за първичен ключ. Когато сам пишеш CREATE, спазвай конвенцията: името на връзката на ключа с таблицата се образува от представката PK_ и името на таблицата.
Промени по дизайна
- Преименуване на атрибут — пишеш новото име или в таблицата, или в SQL оператора (на другото място се променя автоматично), после
UpdateиDatabase Update. - Добавяне на нов атрибут — например
more_info nchar(255)към School_info; същият път. - Изтриване на атрибут —
Deleteот контекстното му меню; съхранените в него данни, разбира се, се губят. Show Table Dataотваря съдържанието — може да въвеждаш, редактираш и изтриваш редове, както в SSMS.
Но не всичко минава. Ако опиташ да смениш името на атрибута name на таблицата Student с FirstName, програмата отказва с аварийно съобщение:
Update cannot proceed due to validation errors.Причината е, че върху Student са създадени два изгледа и исканата промяна ще направи заявките им синтактично некоректни.
Важно предупреждение
Обмисли добре структурата на таблиците и имената на атрибутите, преди да ги създадеш и напълниш с данни. Впоследствие не е възможно да правиш промени, които биха довели до загуба на данни или до синтактични и семантични конфликти с други елементи на базата.
Създаване на нова база
От контекстното меню на Data Connections има и команда Create New SQL Server Database…. В диалога посочваш сървъра, начина на идентифициране (Windows Authentication или SQL Server Authentication с потребителско име и парола) и името на новата база. С OK базата се създава и се показва като нова връзка в Server Explorer.
Бележка
Точно така се създава базата Company, предвидена за ИС на неголяма фирма — с нея ще илюстрираме работата от програма на C# в следващите уроци.
Практикум
Задачи 1 и 2
Отвори Visual Studio и създай нов проект за конзолно приложение. Свържи го с база от данни по описания в урока начин. Ако не помниш името на сървъра, използвай localhost или .\.
Задача 3
Отвори базата и разгледай дизайна и съдържанието на някои таблици. Внимавай с изтриването, за да не загубиш данни — за да провериш как работи, първо добави елемент и после изтрий него.
Задача 4
Създай базата Company, ако още не си я направил — ще я ползваме в следващите уроци.
Въпроси
Какви операции в базата не може да извършваш от панела Server Explorer на C#? С коя от двете програми е по-лесно да се вършат операциите, възможни и в SSMS, и във Visual Studio? Кога MS SQL Server ще откаже да промени нещо в схемата на вече създадена таблица?
Какво трябва да запомниш
- Връзката с базата се прави от панела Server Explorer —
ViewилиCtrl+Alt+S. - Сървърът се посочва с
localhost/.\, с точното си име или с TCP/IP адрес (и порт), а базата — по име. - Windows Authentication ползва данните от Windows сесията; другата възможност е потребител, дефиниран в самия сървър.
- Дизайнът на всяка таблица се вижда и като SQL заявка; първичният ключ се именува по конвенцията
PK_+ име на таблицата. - Промяна, която би счупила изглед или би загубила данни, се отказва — структурата се обмисля преди пълненето с данни.