Лого на 91. НЕГ „Проф. Константин Гълъбов“

Модул 4 · Урок 14

Свързване с база от данни

Панелът Server Explorer във Visual Studio: как се посочва сървър и база, какво може да се прави по таблиците оттам и защо някои промени се отказват.

Първата работа

Когато създаваме приложение на C# за работа с данните от база на MS SQL Server, първото нещо е да свържем приложението с базата. Започваме с нов проект за конзолно приложение във Visual Studio:

  1. Create New Project → от списъка с проекти избираме Console application за C#.
  2. За име избираме например DBconnect и папка, която лесно се намира (най-добре на Desktop).
  3. Отваряме панела 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 — с определено потребителско име и парола в самия сървър.

  1. Щракваме с десен бутон върху Data Connections и от списъка с видове сървъри избираме Microsoft SQL Server (там са още Access, ODBC, Oracle и др.).
  2. За Data provider остава .NET Framework Data Provider for SQL Server.
  3. В Server name изписваме името на сървъра, а в Database — името на базата, с която ще работим (в нашия случай School).
  4. С бутона 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_ + име на таблицата.
  • Промяна, която би счупила изглед или би загубила данни, се отказва — структурата се обмисля преди пълненето с данни.