При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан. Затем: Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз. |
Работа с данными
Элементы языка SQL
SQL (обычно произносимая как "sequel") символизирует собой Структурированный Язык Запросов. Это язык, который дает нам возможность работать с данными в реляционных базах данных.
Мир баз данных становится все более и более единым, что привело к необходимости создания стандартного языка, который мог бы использоваться в большом количестве различных видов компьютерных сред. Стандартный язык позволит пользователям, знающим один набор команд, использовать их, чтобы создавать, отыскивать, изменять и передавать информацию независимо от того, работают ли они на персональном компьютере, сетевой рабочей станции или на сервере.
Элегантность и независимость от специфики компьютерных технологий, а также поддержка его лидерами промышленности в области технологии реляционных баз данных сделали SQL основным стандартным языком. По этой причине любой, кто хочет работать с современными базами данных, должен знать SQL.
Стандарт SQL определяется ANSI (Американским Национальным Институтом Стандартов), а также ISO (Международной организацией по стандартизации). Однако большинство коммерческих программ баз данных расширяют SQL без уведомления ANSI, добавляя разные особенности в этот язык, которые, как они считают, будут полезны. Иногда они несколько нарушают стандарт языка, хотя хорошие идеи имеют тенденцию развиваться и вскоре становиться стандартами сами по себе в силу полезности своих качеств.
Для обращения к базе данных используются запросы, написанные на языке SQL. Запрос — это команда, которую вы даете вашей программе базы данных, и которая сообщает ей, чтобы она вывела определенную информацию из таблиц в память. Эта информация обычно посылается непосредственно на экран компьютера или терминала, которым вы пользуетесь, хотя в большинстве случаев ее можно также послать принтеру, сохранить в файле (как объект в памяти компьютера) или представить как вводную информацию для другой команды или процесса.
Несмотря на большое количество разновидностей этого языка, существующих в настоящее время, его логика работы проста. Достаточно освоить основные команды хотя бы в одной из версий, чтобы впоследствии без труда разобраться в любой другой его реализации.
Microsoft Query Analyzer, входящий в комплект Microsoft SQL Server 2000 – отличный инструмент для изучения языка SQL. Если у вас установлен этот пакет, то можно приступать к работе. Запускаем Query Analyzer и в появившемся окне указываем следующие параметры (рис. 4.4):
Мы используем подключение к серверу, находящемуся на нашем компьютере, — поэтому указываем имя сервера (local) (Можно также использовать знак точки — (.)). В других случаях – для подключения по локальной сети, например, — используйте кнопку обзора для поиска нужного сервера. Установка галочки – "Запускать SQL сервер в случае его остановки" (Start SQL Server if it is stopped) — позволяет поддерживать бесперебойную связь с сервером. Параметр Connect using задает аутентификацию при подключении к серверу — при выбранном значении Windows authentification нет надобности вводить имя пользователя и пароль.
Если вы все сделали правильно, то появляется главное окно программы, содержащее чистый бланк для записи SQL-запросов. Добавим окно, в котором мы будем просматривать содержимое базы данных, – пункт меню Tools/Object Browser/(Show/hide) или клавиша F8. Нам также потребуется окно для отображения результатов запросов — Window/Show Results Pane (Ctrl+R). В результате получим следующее (рис. 4.5):
Первое, что мы видим в окне Object Browser, — имя компьютера и связанного с ним сервера. На рисунке это 7EA2B2F6068D473. Это имя формируется, когда мы устанавливаем операционную систему Windows. Далее располагается древовидная структура — содержимое пакета SQL Server 2000, состоящего из баз данных master, model, msdb, NorthwindCS и tempdb. В отличие от других баз данных, обеспечивающих работу самой программы, NorthwindCS является специальной учебной базой. С ней мы и будем работать. На панели инструментов из выпадающего списка выбираем базу, для подключения —. Можно этого не делать, но тогда в окне бланка необходимо будет каждый раз указывать строку — use NorthwindCS;. Будем полагать в дальнейшем, что на панели инструментов определена база данных NorthwindCS;.
Итак, напишем первый запрос1Вы можете также писать запросы, используя заглавные буквы, — SQL нечувствителен к регистру. и нажмем клавишу F5 (пункт меню Query —>Execute):
select * from Customers;
В результате возвращаются все записи из таблицы Customers базы данных NorthwindCS. Для просмотра содержимого базы данных используем Object Browser, щелкая на знак (+) возле соответствующего объекта. Переключившись на вкладку, видим сообщение, означающее, что была извлечена 91 запись:
(91 row(s) affected)
Главное окно программы принимает следующий вид (рис. 4.6):
Вы можете менять вид данных, отображаемых на панели результатов: пункт меню Query/Results in Text (Ctrl+T) — результат в виде текста, Results in Grid (Ctrl+D) — в виде таблицы (по умолчанию), Results to File (Ctrl+Shift+F) — cохранение результата в виде файла в собственном формате программы *.rpt.
Таблица Customers состоит из следующих полей (рис. 4.7):
Для извлечения не всей таблицы, а столбцов СustomerID и Address, напишем запрос:
select CustomerID, Address from Customers;
Результатом будет следующее (рис. 4.8):
Если мы сделаем ошибку и укажем поле, которого нет в таблице Customers, например AddressID, в окне результатов на вкладке Messages появится соответствующее предупреждение:
Server: Msg 207, Level 16, State 1, Line 3 Invalid column name 'AddressID'.
Для вывода определенного количества записей используем запрос (рис. 4.9):
select top 5 CustomerID from Customers;
Извлекаются первые пять записей поля CustomerID, расположенные в самой таблице Customers в алфавитном порядке, — этот запрос не производит сортировки!
Вводя оператор percent, получаем указанный процент записей от общего числа:
select top 5 percent CustomerID from Customers;
В данном случае результат будет в точности таким же, как и при использовании запроса без оператора percent. В чем же дело? Общее число записей поля CustomerID таблицы Customers — 91 (В этом нетрудно убедиться: введя запрос select * from Customers; и переключившись на вкладку, увидим сообщение: (91 row(s) affected).) Простой подсчет показывает, что пять процентов от 91 равняется 4,55; Query Analyzer округляет это число до пяти и возвращает результат.
Для вывода записей, отвечающих заданному условию, используем оператор where:
select * from Products where UnitPrice > 100;
Этот запрос возвращает все записи из таблицы Products, в которых Столбец (поле) UnitPrice имеет значение, большее 100 (рис. 4.10):
Можно группировать операторы так:
select ProductName,UnitPrice from Products where UnitPrice > 100;
Здесь извлекаются поля ProductName и UnitPrice из таблицы Products, где поле UnitPrice > 100 (рис. 4.11):
Оператор where поддерживает работу со знаками <, >, >=, <=.
Точную выборку осуществляет оператор in, в следующем примере извлекаются лишь те записи, в которых значения поля UnitPrice в точности равно либо 10, либо 15, либо 23 (рис. 4.12):
select ProductName,UnitPrice from Products where UnitPrice in (10,15,23);
Выборка для значений, лежащих в указанном интервале, осуществляется оператором between первое _значение and второе_значение (рис. 4.13):
select ProductName,UnitPrice from Products where UnitPrice between 10 and 13;