Жанр: Учеба
Си шарп: создание приложений для windows
...бы
320 Раздел I I I . Программирование для Windows
выделить, какой именно клиент оформил заказ. Чтобы определить адрес
заказа, вы можете использовать CustomerlD, который поможет вам найти
заказчика в таблице Customers.
Использование вторичных ключей особенно эффективно в таблицах,
связанных отношениями one-to-many или many-to-one. Разделяя информацию
на таблицы, которые связаны вторичными ключами, вы избавляете
себя от необходимости повторять информацию в своих записях. Один
заказчик, например, может иметь несколько заказов. Но тогда будет неэффективно
размещать информацию о заказчике (имя, номер телефона,
сумму кредита и т. д.) в каждой записи. Процесс удаления избыточной
информации из полей таблицы и размещения их в отдельных таблицах
называется нормализацией.
Нормализация
Нормализация делает использование вашей базы данных не только
более эффективным, но также уменьшает вероятность нарушения целостности
данных. Если бы вы хранили имя заказчика и в таблице Customers,
и в таблице Orders, то рисковали бы тем, что изменение данных в одной
таблице повлечет за собой сбой в другой таблице. То есть если вы измените
имя заказчика в таблице Customers, это не вызовет автоматического
изменения имени в каждой строке таблицы Orders. Следовательно, появится
несоответствие между таблицами, и вам придется проделать много
работы, чтобы внести все необходимые изменения в таблицу Orders.
Если же вы храните только CustomerlD в таблице Orders, то можете изменять
адрес в таблице Customers без дополнительных действий, поскольку
такое изменение никак не влияет на поля таблицы Orders.
SQL сервер и другие современные СУБД позволяют избежать ошибок
в базах данных, предписывая ограничения на запросы, которые делает
программист. Например, таблица Customers в базе данных Northwind
содержит поле CustomerlD, которое является первичным ключом. Это накладывает
ограничение на базу данных, которое гарантирует, что каждый
CustomerlD уникален. Если у вас имеется заказчик с именем "Алексей
Рубинов", у которого CustomerID-32, то вы не сможете добавить нового
заказчика "Василий Лазерко" с CustomerID=32. База данных отклонит ваш
запрос на добавление новой записи, потому что первичный ключ должен
быть уникальным.
ЯЗЫК SQL И ПРЕДЛОЖЕНИЕ SELECT
Все запросы на получение практически любого количества данных из
одной или нескольких таблиц выполняются с помощью единственного
предложения SELECT. В общем случае результатом реализации предложения
SELECT является другая таблица. К этой новой (рабочей) таблице
может быть снова применена операция SELECT и т.д., то есть такие oneРабота
с базами данных 321
рации могут быть вложены друг в друга. Представляет исторический
интерес тот факт, что именно возможность включения одного предложения
SELECT внутрь другого послужила мотивировкой использования прилагательного
"структуризированный" в названии языка SQL.
Предложение SELECT может использоваться как:
• самостоятельная команда на получение и вывод строк таблицы, сформированной
из столбцов и строк одной или нескольких таблиц (представлений);
• элемент WHERE- или HAVING-условия (сокращенный вариант предложения,
называемый "вложенный запрос");
• фраза выбора в командах CREAT VIEW, DECLARE CURSOR или INSERT;
• средство присвоения глобальным переменным значений из строк сформированной
таблицы (IIMTO-фраза).
Основные обозначения,
используемые в предложении SELECT
В данной главе будут рассмотрены только две первые функции предложения
SELECT. Здесь в синтаксических конструкциях используются
следующие обозначения:
• звездочка (*) для обозначения "все" - употребляется в обычном для
программирования смысле, т. е. "все случаи, удовлетворяющие определению";
• квадратные скобки ([]) означают, что конструкции, заключенные в эти
скобки, являются необязательными (т. е. могут быть опущены);
• фигурные скобки ({}) означают, что конструкции, заключенные в эти
скобки, должны рассматриваться как целые синтаксические единицы,
т. е. они позволяют уточнить порядок разбора синтаксических конструкций,
заменяя обычные скобки, используемые в синтаксисе SQL;
• многоточие (...) указывает на то, что непосредственно предшествующая
ему синтаксическая единица факультативно может повторяться
один или более раз;
• прямая черта (I) означает наличие выбора из двух или более возможностей.
Например, обозначение ASC|DESC указывает: можно выбрать
один из терминов ASC или DESC; когда же один из элементов выбора
заключен в квадратные скобки, то это означает, что он выбирается по
умолчанию (так, [ASC]|DESC означает, что отсутствие всей этой конструкции
будет восприниматься как выбор ASC);
• точка с запятой (;) - завершающий элемент предложений SQL;
• запятая (,) используется для разделения элементов списков;
• пробелы ( ) могут вводиться для повышения наглядности между любыми
синтаксическими конструкциями предложений SQL;
• прописные латинские буквы и символы используются для написания
конструкций языка SQL;
• строчные буквы используются для написания конструкций, которые
должны заменяться конкретными значениями, выбранными пользова322
Раздел I I I . Программирование для Windows
телем, причем для определенности отдельные слова этих конструкций
связываются между собой символом подчеркивания (_);
• термины "таблица", "столбец", ... заменяют (с целью сокращения текста
синтаксических конструкций) термины "имя_таблицы", "имястолбца",
..., соответственно;
• термин таблица используется для обобщения таких видов таблиц, как
базоваятаблица, представление или псевдоним; здесь псевдоним служит
для временного (на момент выполнения запроса) переименования
и (или) создания рабочей копии базовойтаблицы (представления).
Формат предложения SELECT
SELECT (выбрать) данные из указанных столбцов и (если необходимо)
выполнить перед выводом их преобразование в соответствии с указанными
выражениями и (или) функциями.
FROM (из) перечисленных таблиц, в которых расположены эти столбцы.
WHERE (где) строки из указанных таблиц должны удовлетворять указанному
перечню условий отбора строк.
GROUP BY (группируя по) указанному перечню столбцов с тем, чтобы
получить для каждой группы единственное агрегированное значение,
используя во фразе SELECT SQL-функции SUM (сумма), COUNT (количество),
MIN (минимальное значение), МАХ (максимальное значение) или
AVG (среднее значение).
HAVING (имея) в результате лишь те группы, которые удовлетворяют
указанному перечню условий отбора групп.
Фраза WHERE включает набор условий для отбора строк:
WHERE [NOT] ННЕЕЕ^условие [ [AND 1 OR] [NOT] WHERE_yc^OBMe] . . .
где \УНЕИЕ_условие имеет следующую конструкцию:
значение1 { = I о I " I "= I " 1 "= } значение2.
Кроме традиционных операторов сравнения (= I "" 1 " I "= I " I "=),
в WHERE фразе используются условия:
• BETWEEN (между);
• LIKE (похоже на);
• IN (принадлежит);
• IS NULL (не определено);
• EXISTS (существует),
которые могут предваряться оператором NOT (не). Критерий отбора
строк формируется из одного или нескольких условий, соединенных логическими
операторами:
AND - когда должны удовлетворяться оба разделяемых с помощью AND
условия;
OR - когда должно удовлетворяться одно из разделяемых с помощью
OR условий;
AND NOT - когда должно удовлетворяться только первое условие;
OR NOT - когда или должно удовлетворяться первое условие, или не
должно удовлетворяться второе, причем существует приоритет AND над
Работа с базами данных 323
OR (сначала выполняются все операции AND и только после этого операции
OR). Для получения желаемого результата WHERE условия должны
быть введены в правильном порядке, который можно организовать введением
скобок.
При обработке условия числа сравниваются алгебраически. Отрицательные
числа считаются меньшими, чем положительные, независимо от их
абсолютной величины. Строки символов сравниваются в соответствии с их
представлением в коде, используемом в конкретной СУБД, например в коде
ASCII. Если сравниваются две строки символов, имеющих разные длины,
более короткая строка дополняется справа пробелами для того, чтобы они
имели одинаковую длину перед осуществлением сравнения.
Наконец, синтаксис фразы GROUP BY имеет вид
GROUP BY [таблица.] столбец [,[таблица.] столбец]... [HAVING фраза]
GROUP BY инициирует перекомпоновку формируемой таблицы по группам,
каждая из которых имеет одинаковое значение в столбцах, включенных
в перечень GROUP BY. Далее к этим группам применяются агрегирующие
функции, указанные во фразе SELECT, что приводит к замене всех
значений группы на единственное значение (сумма, количество и т. п.).
С помощью следующей инструкции можно исключить из результата
те группы, которые удовлетворяют заданным условиям.
[NOT] HAVING условие [[AND|OR][NOT] HAVING условие]
МОДЕЛЬ ОБЪЕКТОВ ADO.NET
DataSet
Модель объектов ADO.NET очень обширна, но в ее основе лежит довольно
простой набор классов. Наиболее важным из них считается DataSet.
DataSet представляет собой отображение используемой базы данных, перенесенное
на машину пользователя. При этом нет необходимости постоянно
подключаться к серверу базы данных для модификации данных.
Лишь иногда вы соединяете DataSet с его родительской базой данных
и модифицируете ее внесенными вами изменениями. В то же время вы
модифицируете DataSet теми изменениями в базе данных, которые сделали
другие процессы.
DataSet состоит из объектов типа DataTable и объектов DataRelation. К
ним можно обращаться как к свойствам объекта DataSet. Свойство Tables
возвращает объект типа DataTableCollection, который содержит все объекты
DataTable используемой базы.
Таблицы и поля (объекты DataTable и DataColumn)
Объект типа DataTable представляет собой таблицу базы данных. Такой
объект может быть создан программно или путем запроса к базе
данных. Объект DataTable состоит из строк и столбцов. Строки представ324
Раздел I I I . Программирование для Windows
ляют собой отдельные записи таблицы, столбцы - соответствующие поля.
Для получения совокупности столбцов объект DataSet имеет свойство
Columns, возвращающее DataColumnCollection, которое в свою очередь состоит
из объектов типа DataColumn. Каждый объект DataColumn представляет
собой отдельный столбец таблицы, из которого можно получить любую
запись.
Связи между таблицами (объект DataRelation)
Кроме набора таблиц DataSet имеет свойство Relations, которое возвращает
объект типа Data Relation Col lection, состоящий из объектов DataRelation.
Каждый DataRelation объект хранит данные о связях между двумя таблицами
посредством объектов DataColumn. Например, в базе данных Northwind
таблица Customers имеет связь с таблицей Orders посредством столбца
CustomerlD. Такое отношение называется на языке баз данных один ко многим
(one-to-many). Для любого заказа может быть только один заказчик, но
один заказчик может иметь сколько угодно заказов.
Строки (объект DataRow)
Свойство Rows объекта DataTable возвращает совокупность всех строк
таблицы - DataRowCollection. Это свойство следует применять для того,
чтобы пользоваться результатами запросов к базе данных. Программисты,
имеющие опыт работы с ADO, будут удивлены отсутствием RecordSet
с его функциями moveNext и movePrevious. В ADO.NET нет необходимости
в итерационном обходе DataSet для получения данных. Вы можете обращаться
к записям таблицы как к элементам простого массива. Это значительно
упрощает процесс доступа к элементам базы. Мы рассмотрим
это более подробно далее на примере.
DataAdapter
DataSet -это образ реляционной базы данных. ADO.NET использует
объект типа DataAdapter как мост между DataSet и источником данных,
который является основной базой данных. DataAdapter содержит метод Fill()
для обновления данных из базы и заполнения DataSet.
DBCommand и DBConnection
Объект DBConnection представляет собой средство для соединения DataSet
с источником данных. Соединение может быть доступно при помощи
различных командных объектов. Например, объект DBCommand позволяет
послать команду (обычно это SQL запрос или сохраненная процедура) к
базе данных. Часто командные объекты создаются неявно, во время формирования
объекта DataSet. Но ADO.NET позволяет вам явно обращаться
к таким объектам, это будет рассмотрено в примере.
Работа с базами данных 325
РАБОТА С ADO.NET
Кажется, уже пришло время закрепить теоретические знания на практике.
Давайте напишем пример программы, использующей ADO.NET, и
посмотрим, как это все работает. В этом примере мы создадим простое
Windows Forms приложение с единственным списком в окне и заполним
этот список информацией из таблицы Customers базы данных Northwind.
Я предлагаю вам два варианта создания приложения для работы с
базами банных. Первый из них более подходит для тех, кто не имеет
большого опыта работы на С#. Этот способ подразумевает использование
визуальной среды Visual Studio .NET для создания объектов. Второй способ-
это создание объектов непосредственно в коде программы, что,
согласитесь, требует определенной подготовки.
Использование визуальной
среды для работы с ADO.NET
Создайте новое приложение Windows
Forms с именем ADOWinForms. Разместите
на создавшейся форме компонент
ListBox и измените его свойство name на
listCustomers. Теперь в окне ToolBox перейдите
на закладку Data (см. рис. 33.1).
Поместите на форму компонент SqlDataAdapter.
Перед вами появится окно
дизайнера для настройки компонента.
Нажмите в появившемся окне кнопку
Next. Следующее окно предлагает выбрать
источник для соединения с базой
данных. В нашем случае еще не существует
ни одного источника, поэтому
нажмите кнопку New Connection... Теперь
нам предстоит создать новый источник
Соединения С баЗОЙ даННЫХ. Рис. 33.1. Окно Toolbox, закладка Data
Соединение с сервером
Первым делом необходимо выбрать имя сервера базы данных. Для
этого в окне, изображенном на рис. 33.1, имеется поле Select or enter server
name. Здесь вам необходимо выбрать один из доступных вашей машине
серверов. Если у вас на машине установлен и запущен SQL server, то
выберите в списке имя своей машины, если нет, то вам предстоит установить
его.
Этот абзац предназначен для тех, у кого на машине не установлен SQL
Server. Проще всего в таком случае выбрать пункт меню Samples and
Quickstart Tutorials из Microsoft .NET Framework SDK группы программ и
iwti'ji th3
;" l_
r
J •• Sc.
. - Л 1 -
j l t w i g t p
:-*-.-|.-d-p
E ! i i i . :"
1
";?•• i i i c i to
( I I T k i c ; ! ,
• w j i d i
И! f
C^Ee-veidis-j
•Srt)Lj:5A-.fi!
-л1ч:л,...-:.ем
326 Раздел I I I . Программирование для Windows
К Data link Properttes:
S p e e d y I ; * I v f ' i w M i g t u : О П П Е С 1 & S U L S t i v e r J a l a
1 S e l M l a s r l = n * c r v ; i f K i i s e
• J . i r t n i n t w r n f t l o r ! t o l a g e n ; ; tit; s a v e :
•'" UstWiMtewiVT Imjgiatea ччсиЛу
i*' Uie " sp"L-i it Him name mill Mstvwuj
f" A&jw
Hup
РИС. 33.2. Настройка нового соединения
с базой данных
выполнить требования по установке .NET
Framework Samples Database, которая
включает инсталляцию SQL сервера.
После установки базы данных с примерами,
установите QuickStarts (установится
база данных northwind). Теперь в
окне, изображенном на рис. 33.2 в поле
Select or enter server name выберите строку
localhost\\NetSDK, где localhost -это
имя машины, на которой установлен
сервер базы данных. Либо введите строку
("(local)WNetSDK"), в этом случае
программа сама определит имя вашей
машины (это не совсем корректное определение,
но оно хорошо поясняет строку
данных).
В поле Enter Information to logon to
the server выберите пункт Use Windows
NT Integrated Security. Это даст вам возможность
подключаться к базе, используя
ваше имя для работы в Windows.
Вы можете использовать любое известное
вам имя и пароль для подключения к базе. В таком случае, необходимо
выбрать пункт Use a specific user name and password и прописать соответствующие
значения в полях User Name и Password.
Если вы правильно настроили права доступа к базе данных, то поле
Select the Database on the server даст вам возможность выбрать одну из
существующих на сервере
базу данных. Нас интересует
база Northwind. Выберите
ее и нажмите кнопку
Test Connection. В случае
успешного соединения система
выдаст сообщение Test
Connection succeeded, что оз- lzc:f* a
h -**"'""-'чиг •- ^ дам. #л*•"иы ^V-^:V the w , -.ы-^.
начает успешное соединение
с базой. Нажмите ОК '•cre**i.(tm)*or"ii.mrMk"M
для перехода к следующему
окну настройки DataAdapter.
л [|||1"гу Турп
Use
a; ,;, I'd :"O i,usrJ
anddjbie•(:•...!.)-
i": :iccedurs;to
IIVK ^Killing 4luri:il |inirr-"lnri""
Доступ к данным
Перед вами появится окно
выбора способа доступа
к элементам базы данных
(см. рис. 33.3). Рис. 33.3. Окно выбора способа доступа к базе данных
Работа с базами данных 327
Этот диалог дает вам возможность
выбрать один из
трех способов доступа к базе:
• используя SQL инструкции;
• создав новую сохраненную
процедуру (storage
procedure);
• используя существующую
сохраненную процедуру.
Мы воспользуемся наиболее
простым способом доступа
к базе, прибегнув к SQL
запросу. Для этого выберите
в диалоге пункт Use SQL
statements.
Создание SQL запроса
В поле для редактирования
окна Generate SQL statements
введите SQL инструкцию:
"Select CompanyName,
ContactName from Customers
" (см. рис. 33.4).
В этом же окне нажмите
кнопку Advanced Options и
уберите все флажки в открывшемся
диалоге. Это избавит
вас от массы ненужного
в данной программе
кода. Подтвердите все сделанные
изменения и перейдите
в окно View Wizard Results.
Оно должно иметь вид,
аналогичный представленному
на рис. 33.5.
Это означает, что мастер
создаст для вас SQL инструкцию
и образ таблицы базы
данных (речь о нем пойдет
далее в этой главе).
GunudU."lliL"&qLbl.i[unii"iiis
i ' :^: ;л V :'" * jsc="=a3s"*n"|гг""
Г , л i i v ; u ЗС;. j e t L l i!.:4'-tf4. i ' Lsetie Cuery Витгя' тijr-*.incly ;"im-та
Whdl JdLj ifiould l l ie d d l j .utajiler bcirl into t-he d.il-asf-t?
Рис. 33.4. Окно создания SQL запроса
rj к.-sdfts
rlt.n.:,v^.-.:....,^
smw.c-1-..--
DataAdapter р е з у л ь т а т о в н а с т р о й к и компонента
Что Dice сделал мастер работы с базами данных?
Как вы можете заметить, мастер создал для вас в панели компонент
два элемента: sqIDataAdapterl и sqIConnectionl. sqlDataAdapter 1 является основным
компонентом типа SqlDataAdapter, который мы создавали при по328
Раздел I I I . Программирование для Windows
мощи мастера. sqlConnectionl -это объект типа SqIConnection, описанный
мною ранее в этой главе в пункте "DBCommand и DBConnection". Он
создался мастером как необходимый элемент для подключения к базе.
Давайте изменим имена наших элементов на более читаемые: dataAdapter
и connection соответственно.
Анализ кода программы
Теперь обратимся к коду нашей программы:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace ADOWin?orms
/// "summary"
/// Summary description for Forml.
/// "/summary"
public class Forml : System.Windows.Forms.Form
[
private System.Windows.Forms.ListBox listCustomers;
private System.Data.SqlClient.SqlCommand sqiSelectCommandl;
private System.Data.SqlClient.SqIConnection connection;
private System.Data.SqlClient.SqlDataAdapter dataAdapter;
/// "summary"
/// Required designer variable.
/// "/summary"
private System.ComponentModel.Container components - null;
public Forml()
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
/// "summary"
/// Clean up any resources being used.
/// "/summary"
Работа с базами данных 329
protected override void Dispose! bool disposing )
i
il ( disposing )
f
if (components ! =• null]
{
components-Dispose ();
}
i
base,Dispose ( disposing );
#region Windows Form Designer generated code
/// "summary"
/// Required method for Designer support - do not modify
III the contents of this method with the code editor.
/// "/summary"
private void InitializeComponentO
{
th^s.listCustomers - new System.Windows. Forms.ListBoxO,-
th_s.dataAdapter — new System. Data . SqiClien^ . SqlDataAdapter (I ;
this.sqlSelectCommandl = new System,Dana.SqlClient.SqlCommand{)
this, connect ion - new System.Data.SqlClient.SqiConnection !);
this.SuspendLayoutf);
//
// listCustomers
//
this . iistCustomers . Location -=• new System. Drawing. Point (8, 8) ;
this.listCustomers.Name - "listCustomers";
this.listCustoners.Size = new System.Drawing.Size(280, 264);
this . listCustomers .Tablndex -= 0;
//
// dataAdapter
//
this.dataAdapter.SelectCommand = this.sqlSelectCommandl;
this.dataAdapter.TabieKappings.AddRange(
n(?w System. Data.Common. DataTableMapping [ ]
i
new System.Data.Common.DataTableMapping("Table", "Customers",
new System.Data.Common.DataColumnMapping[]
;
new System.Data.Common.DataCoiumnMapping("CompanyName",
"CompanyName"),
new System.Data.Common.DataColumnMapping{"ContactName",
"ContactKame")
330 Раздел I I I . Программирование для Windows
/7 sqlSelectCommandl
//
this.sqlSelectCommandl. CommandText =
"SELECT CompanyName, ContactName, CustomerlD FROM Customer
this.sqlSelectCommandl.Connection = this.connection;
//
// connection
//
this.connection.ConnectionString =
"data source=(local)\\NetSDK;initial catalog-Northwind;"+
"integrated security=SSPI,-persist security info=Fa!se;"+
"user id=sa;workstation id=(local);packet size=4096";
//
// Forml
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this-ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[]
{
this.listCustomers
1) ;
this.Name = "Forml";
this.Text = "Forml";
this.ResumeLayout(false) ;
i
#endregion
/// "summary"
/// The main entry point for the application.
/// "/summary"
[STAThread]
static void MainO
{
Application.Run(new Forml());
Рассмотрим более подробно некоторые участки кода программы.
private System.Windows.Forms.ListBox listCustomers;
Создание визуального компонента ListBox с именем listCustomers.
private System.Data.SqlClient.SqlCommand sqlSelectCommandl;
Работа с базами данных 331
Объявление объекта SqICommand с именем sqISelectCommandl. Этот
объект будет использоваться программой как команда для получения
доступа к базе данных. sqISelectCommandl был создан мастером при настройке
компонента DataAdapter.
private System.Data.SqlClient.SqlConnection connection;
Объявление объекта типа SqIConnection с именем connection. SqIConnection
объект используется для соединения с базой данных. Этот объект предназначен
для хранения данных о сервере базы данных, пользователе, пароле
пользователя, названии базы ...
private System.Data.SqlClient.SqIDataAdapter dataAdapter;
Объявление объекта типа SqIDataAdapter с именем dataAdapter.
his.listCustomers = new System.Windows.Forms.ListBox();
this.dataAdapter = new System.Data.SqlClient.SqIDataAdapterО;
this.sqISelectCommandl = new System.Daсa.SqlClient.SqICommand();
this.connection = new Systern.Data.SqlClient.SqlConnection();
Создание объектов listCustomers, dataAdapter, sqISelectCommandl и connection.
Заметьте, что именно здесь происходит создание объектов, т. е. вызов
оператора new, до этого они были только объявлены.
this.dataAdapter-SelectCommand = this.sqISelectCommandl;
DataAdapter имеет свойство SelectCommand. Это свойство должно быть
установлено до того, как объект DataAdapter будет использоваться.
//настройка образа таблицы используемой адаптером
this.da~aAdapter.TableMappings.AddRange(
//создание массива образов таблицы
new System.Data.Common.DataTableMapping[]
{
//инициализация образа одним объектом
new System.Data.Common.DataTableMapping(
"Table", //имя таблицы используемой в программе
"Customers", //имя таблицы в базе данных
//инициализация образа полей таблицы
new System.Data.Common.DataColumnMapping[]
{
//создание образа поля CompanyNarne
new System.Data.Common.DataColumnMapping(
"CompanyName", //имя поля в программе
"CompanyName"), //имя поля в базе данных
//создание образа поля ContactName
new System.Data.Common.DataColumnMapping(
"ContactName", //имя поля в программе
"ContactName"} //имя поля в базе данных
Я позволил себе немного отформатировать следующий участок кода, и
сделал это для того, чтобы дать в комментариях объяснение его предназ332
Раздел I I I . Программирование для Windows
начения. Хочу заметить, что программа будет работать и без этого кода.
Но данный фрагмент позволяет программисту работать с базой данных в
интуитивно понятной форме. Для этого создается образ (его еще называют
отображением (Mapping) таблиц базы данных в программе. Образ
позволит вам обращаться к таблицам и полям базы данных по именам,
что гораздо удобнее, нежели использование индексов. Мы еще рассмотрим
использования отображения в следующих примерах.
this.sqlSelectCommandl.CommandText="SELECT ConpanyName, ContactName, CustomerID
FROM Customers";
this . s ql S ele с t Command 1 .Connection =- this.connection;
Объекты типа SqICommand имеют свойство CommandText Это свойство
хранит строку SQL для доступа к данным. Вы можете видеть, что этому
свойству присваивается строка, заданная нами в окне, изображенном на
рис. 33.5. Другим важным свойством компонента SqICommand является
свойство Connection. Оно связывает SqICommand с объектом SqIConnection.
this.connection.ConnectionString - "data source-!local)\\NetSDK;initial
cataiog=Northwind;integrated security=SSPl;pecsi" •+
"st security info=False,-user id=sa;workstation id-(local);packet size=1096";
Инициализация свойства ConnectionString объекта SqIConnection. Свойство
ConnectionString представляет собой простую строку. Эта строка имеет строго
определенный формат. В ней вам необходимо задать параметры соединения
с базой данных. Все параметры передаются одной строкой и
разделяются знаком ";". Список используемых параметров:
data source - сетевое имя сервера базы данных;
initial catalog -имя базы данных на сервере;
integrated security - способ доступа к базе;
user
...Закладка в соц.сетях