Купить
 
 
Жанр: Учеба

Си шарп: создание приложений для windows

страница №21

id - имя пользователя для входа в базу (sa по умолчанию);
workstation id - имя или IP адрес компьютера, с которого подсоединяются
к базе.
Расширение функциональности программы
Весь этот код был создан дизайнером форм и мастером работы с базами
данных. Объем кода представляется довольно значительным. Однако
вам не приходится об этом задумываться, ведь за вас все сделали разработчики
Visual Studio .NET. Откомпилируйте и запустите программу. Вы
получите окно с пустым списком данных. "Но где же данные из базы?" -
спросите вы. Это нам придется написать самим в коде программы: нам
предстоит перенести данные, прочитанные из базы данных, в список
listCustomers. Для этого создайте обработчик события Load формы. Щелкните
два раза левой кнопкой мыши по имени этого события в окне
Properties. Добавьте в функцию Forml_Load код, представленный ниже:
private void Forrnl_ Load (object sender. System.EventArgs e)
[
//создаем новый объект DataSet
DataSet ds = new DataSet();
Работа с базами данных 333
//вызываем функцию Fill для заполнения объекта
//DataSet содержимым таблицы Customers
dataAdapter.Fill(ds, "Customers");
//получаем доступ к таблице Customers
DataTable dt = ds.Tables["Customers"];
//переносим данные в список
//"Контактное имя" работает на "организация"
//например Иван Петров работает на "СП СибирьНефть"
foreach (DataRow dataRow in dt.Rows)
{
listCustomers. It ems. Add) dataRow ["Contact Name" ] -r
" работает на \"" + dataRow["CompanyName"] + "V
Код, который создала среда Visual Studio .NET, не содержит методов
для чтения данных из базы. Для подключения и прочтения данных используется
метод Fill() класса SqlDataAdapter.
dataAdapter.Fill(ds, "Customers");
При вызове этого метода происходит заполнение объекта DataSet содержимым
базы данных, на которую настроен DataAdapter. В нашем случае
одним из параметров метода Fill() является имя таблицы, которое
указывает, какой именно образ следует брать для отображения таблицы.
При вызове этого метода DataAdapter уже должен быть проинициализирован
всеми необходимыми параметрами. В обязательном порядке должно
быть установлено свойство SelectCommand. При возникновении неопределенностей
при обращении к базе программа генерирует исключения,
которые вы должны обрабатывать в реальных приложениях.
Для удобства работы программиста с таблицами базы данных предназначен
класс DataTable. Он содержит методы и данные для обработки любых
табличных данных (не только из базы данных). Объект DataSet хранит таблицы
как массив данных. Программист может обращаться к таблицам по
их индексам. Например, ds.TablesfO] - обращение к нулевой таблице. Однако,
согласитесь, это не очень удобно. Какая таблица имеет индекс 0? Вам
постоянно нужно помнить об этом. Но если таблиц десятки, а то и сотни,
что делать тогда? Вот для этого разработчики С# и придумали отображение
таблицы, которое мы создали для таблицы Customers. Теперь мы можем
использовать эту таблицу по ее именованному индексу "Customers". Вот
так мы определили объект dt таблицей "Customers" объекта ds.
DataTable dt = ds.Tables["Customers"];
Таблица состоит из строк и столбцов. Строки представляют собой записи
таблицы, столбцы - поля таблицы. Для доступа к строкам используется
свойство Rows. Это свойство возвращает объект типа DataRowCollection. За
счет реализации этим классом интерфейса ICollection мы можем обращаться
к строкам с использованием оператора foreach.
334 Раздел I I I . Программирование для Windows
foreach (DataRow dataRow in dt.Rows)
{
l i s t C u s t o m e r s . Items .Add ( dataRow ["ContactNarr.e"] +
" работает на \ " " + dataRow [ "CompanyNarr.e" ] + " \ " " l ;
Еще раз хочется отметить преимущества
использования отображений. При
обращении к полям таблицы мы указываем
не индекс поля в общем массиве
полей, а название поля, например dataRow["ContactName"],
что более понятно
при анализе кода.
Результаты работы программы
Теперь нашу программу можно считать
законченной. Откомпилируйте и запустите
ее. На экране должно появиться окно,
аналогичное изображенному на рис. 33.6.

viariaAnder раоотает на (%ed* hutleil rte
Ала Trujilb работает на "Ana Tru|i!lo E mpaiedados у heladcn
Antonio Moieno работает па "Antonio Moreno Taqueria'
Thomas Hardy работает на "Around iheHorn"
Christina Berglund работает на "Berglunds snabbkop"
Hanna Moos работает на "Biauer See Delikatessen"
Frederigue Citeaux работает на "Blondesddsl pere el hU"
Mai tin Sommer работает на "Bolido Comidas preparadas"
Laurence Lebihan работает на"Вопарр"'
Elizabeth Lincoln работает на "Bottom-Dollar Markets"
Vi;lj(ia Ashworth работает на "8'i Beverage?"
Fatn:io Simpson работает на "Cactus Comidas para Ifevai"
Francisco Chang работает на "Cenlo comercial Moctezurna'
Yang Wang работает на "Chop-suey Chinese"
Pedro Atonso работает на "Comercb Mineiro"
Elizabeth Brown работпт на "Consolidated Holdings"
SvenOttlieb работает на "Dracnenbkit Delikalessen"
Janine Labrune работает на "Du mondeentier"
Рис. 33.6 Окно информации о контактных
лицах
Программирование компонент баз данных
Мы рассмотрели процесс создания программы для работы с базами
данных с использованием различных мастеров Visual Studio .NET. Давайте
рассмотрим, как работать с базами данных без визуальной среды.
Создадим такое же приложение, как и в предыдущем примере.
Для начала необходимо включить в программу объект типа DataAdapter.
SqlDataAdapter dataAdapter =
new SqlDataAdapter( commandString, connectionString);
Здесь используется иной конструктор, чем в предыдущем примере, где
мы не инициализировали DataAdapter. Первым параметром передается
строка, содержащая SQL инструкцию для доступа к данным. Она должна
быть объявлена следующим образом:
string commandString =
"Select ContactName, CompanyName from Customers";
Вторая строка описывает способ доступа к базе. Поскольку мы используем
ту же базу, что и в предыдущем примере, я не буду приводить подробного
описания формата строки. Кроме того, я не стану форматировать
connectionString необязательными для нашего примера параметрами.
string connectionString =
"server==(local]WNetSDK; uid=sa;pwd=;database=Northwind";
Теперь у вас есть DataAdapter, и вы можете употребить его для заполнения
DataSet, используя уже имеющуюся SQL инструкцию.
DataSet dataSet = new DataSet( );
dataAdapter.Fill(dataSet) ;
Заметьте, что мы не применяем отображения. Посмотрим, чем нам
придется пожертвовать из-за этого.
Работа с базами данных 335
Имея заполненный DataSet, вы можете получить доступ к прочитанным
данным. Читаем таблицу:
DataTabie dataTable = DataSet.Tables[0];
Для чтения таблицы необходимо использовать ее индекс - нулевой,
поскольку только одна таблица была прочитана. Вот это и есть первый
недостаток отказа от отображений.
Затем необходимо извлечь данные из таблицы и поместить их в
список.
fоreach (DataRow dataRow in danaTable.Rows]
{
listCustomers.Items.Add(
dataRow [ 0 ] + "работает на \ " " + dataRow [ 1 ] -r " \ " " ) ;
}
Здесь для обращения к полям таблицы используются не имена, а номера
полей в массиве. Поля располагаются в порядке их выборки из базы,
то есть в очередности записи в SQL запросе. В нашем случае поле
"ContactName" имеет индекс 0, а поле "CompanyName" индекс 1.
Вот полный листинг программы.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
namespace ADOWinForms
{
public class Forml: System.Windows.Forms.Form
{
private System.ComponentModel.Container components;
private System.Windows.Forms.ListBox listCustomers;
public Forml( )
{
InitializeComponent( );
// connect to my local server, northwind db
string connections::ring = "server= (local) WNetSDK; " +
"TrusTiedconnection=yes; database-northwind";
// get records from the customers table
string commandString =
"Select ContactName, CompanyName from Customers";
// create the data set command object
336 Раздел I I I . Программирование для Windows
// and the DataSet
SqlDataAdapter dataAdapter -
new SqlDataAdapter{
commandString, connectionString);
DaraSet: dataSet = new DataSet ( I ;
// fill the data set object.

dataAdapter.Fill(dataSet,"Customers");
// Get the one table from the DataSet
DataTable dataTable = dataSet.Tables[0];
// for each row in the table, display the info
foreach (DataRow dataRow in dataTable.Rows)
listCustomers.Items.Add(
dataRow[0] +
" работает на \"" т dataRowfl] + "\"" );
private void Ini'ializeComponent( )
{
this . 1istCuscomers = new Systen.Windcws.Forms.ListBoxO;
this.SuspendLayout();
//
11 listCustomers
//
this.listCustomers.Location - new System.Drawing.Point(8, 8
this.listCuscomers.Name = "listCuscomers";
this.listCustomers.Size = new System.Drawing.Size(368, 225)
this.listCustomers.Tablndex = 0;
//
// Forml
//
this . AutoScaleBaseSize •= new System. Drawing . Size (5, 13);
this.ClientSize = new System.Drawing,Size(384, 245);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.listCustomers});
this.Name = "Forml";
this.Text = "Forml";
this.ResumeLayout(false);
Работа с базами данных 337
public static void Main(string[] arg;
Application.Run(new Forml( ]];
i
Откомпилировав и запустив программу, вы получите тот же результат,
что и в предыдущем примере - окно, изображенное на рис. 33.6.
Как можно было заметить, программа, созданная без использования
мастеров Visual Studio .NET, короче. Однако ее текст менее читаемый.
Вы вольны выбирать - работать мастером баз данных или писать код
самому. Я советую вам первое время использовать возможности визуальной
среды для разработки приложений. Когда вы почувствуете себя специалистом
в программировании на С#, то сможете с легкостью от них
отказаться.
ИСПОЛЬЗОВАНИЕ OLE DB ДЛЯ ДОСТУПА К ДАННЫМ
Мы рассмотрели лишь один из способов работы с базами данных, предлагаемый
разработчиками С#,- это использование "SQL server provider".
Данный способ предполагает обязательное применение SQL server для
работы с базами данных. Я не говорю, что Microsoft навязывает использование
SQL server в качестве основного сервера баз данных при разработке
приложений на С#, но его разработчики не поленились выделить SQL server
в отдельную категорию компонент.
Второй возможностью доступа к данным является использование OLE
DB Provider. Такой способ позволяет осуществлять доступ к любому OLE
DB провайдеру, включая Oracle, Sybase и, конечно же, Access. Мы рассмотрим
пример работы OLE DB провайдера с использованием базы данных
Access.
Для создания рабочего примера приложения вам необходимо экспортировать
базу данных Northwind в файл mdb формата. Для этого воспользуйтесь
руководством по SQL server. Я экспортировал базу в файл под
названием "C:\nothwind.mdb".
Давайте создадим приложение, наделенное той же функциональностью,
что и в предыдущем примере. Программа будет читать данные о
компаниях и контактных лицах компаний и выводить информацию в
список.
Возможности Visual Studio .NET
при использовании OLE DB
При создании приложения для работы с базами данных с помощью
OLE DB используется тот же мастер, что и при работе с SQL server. Однако
имеются свои нюансы.
338 Раздел I I I . Программирование для Windows
Создайте новое приложение Windows
Forms с именем OLEDBWinForms. Разместите
на создавшейся форме компонент
ListBox и измените его свойство
name на listCustomers. Теперь в окне ToolBox
перейдите на закладку Data (см.

рис. 33.1).
Поместите на форму компоненту
OLEDBDataAdapter. Перед вами появится
окно дизайнера для настройки компоненты.
Нажмите в появившемся окне
кнопку Next. Следующее окно предлагает
выбрать источник для соединения с
базой данных. Это окно открывается по
умолчанию, поскольку предполагает соединение
с использованием SQL сервера.
Перед нами стоит другая задача: подключиться
к базе с помощью OLE DB
провайдера для баз ACCESS. Поэтому перейдите
в окне, изображенном на рис.
33.2, на закладку Provider (рис. 33.7).
Ш Date link Properties -•
i"-4t*.K j Un-cdcn i Advanced! A.I
Sc-ect hedi'a v;u wart la so-ires.1 I;
OLE C3 P-cj dfi[i;
• i/^.id.atslcgMdiyeGuu CLE 'M i IOVIII
j Med ^atalogWebDB OLE DB Provider
I 4njsofUet 3 51 OLE DB Provider
IMicrasoll Jet 4 0 OLE 06 Provider c-.-i3ftGLE DB Provide For Data Mining Services licrastft OLE DB Provider lor DTS Packages j M cicsolt OLE DB Provider lor Indexing Service
j чсс:эИ OLE DB Provider ior Internet Publishina
j 4i.i5i3lt OLE DB Provider lor ODBC Olivers
• W r.-^.)ft OLE DB Provider lor OLAP Services
j ••• с csoft OLE DB Provider ior OLAP Services В О
blici.-olt OLE DB Provider iol Grade
I 4nos(jH OLE DB Provider lor SQL Server
! W z L.oft OLE DS Simple Provider
Рис. 33.7. Окно выбора провайдера
Выбор провайдера
По своей сути OLE DB является интерфейсом, посредством которого
ваша программа может использовать СУБД сторонних разработчиков.
Нам необходим Microsoft Jet 4.0 OLE
DB Provider. Выберите его, как пока- СЕЮЗЕЕЕЙ*""
зано на рис. 25.7. Он позволяет соеди- . . • • - * . • ,
няться с базами формата Microsoft • • ., .-../. ..
Access (mdb). Нажмите кнопку Next •• ---_^_--.- -•_
или перейдите на закладку Connection . 1
( р и с . 3 3 . 8 ) . • * ' - •*-.-*.
В поле Select or enter database name вве- '" :"" .
дите путь к файлу вашей базы данных. В
мoeмcлyчaeзтo"C:\northwmd.mdb".Ecли ''"'' '""'
вы не изменяли права доступа к базе данных,
то оставьте все настройки окна по
умолчанию.
Если вы правильно настроили права
доступа к базе данных, то при нажатии
кнопки Test Connection система
выдаст сообщение Test Connection
succeeded, что означает успешное со- . .,
единение с базой. Нажмите ОК для пе- ' - -
рехода к следующему окну настройки Рис 33#8# Ок11О ПОД1С,шчеиия к б а з е DataAdapter. Access
Работа с базами данных 339
Доступ к данным
Перед вами появится окно выбора способа доступа к элементам базы
данных (см. рис. 33.3). Но на этот раз у вас не будет выбора между SQL
запросом и хранимой процедурой, поскольку Access не поддерживает хранимых
процедур. Просто нажмите Next.
Создание SQL запроса
В поле для редактирования окна Generate SQL statements введите следующую
SQL инструкцию: "Select CompanyName, ContactName from Customers" (см. рис. 33.4).
В этом же окне нажмите кнопку Advanced Options и уберите все флажки
в открывшемся диалоге. Это избавит вас от массы ненужного в данной
программе кода. Подтвердите сделанные изменения.
Результаты работы с мастером настройки базы данных
В окне View Wizard Results вы можете видеть тот же результат, что и
при разработке примера прошлого приложения. Нажмите ОК для окончания
работы с мастером.
В итоге у вас создастся два объекта: oleDbDataAdapterl и oleDbConnectionl.
Их предназначение аналогично тому, которое описано в главе "Работа с
ADO.NET". Измените имена элементов на более читаемые: dataAdapter и
connection, соответственно.
Код нашей программы будет представлен нижеприведенным листингом:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace OLEDBWinForms
(
/// "summary"
/// Summary description for Forral.

/// "/summary"
public class Forml: System.Windows.Forms.Form
(
private System.Data.OleDb.OleDbCommand oleDbSeleccCommandl;
private System.Data.OleDb.OleDbDataAdapter dataAdapter;
private System.Data.OieDb.OleDbConnection connection;
private System.Windows.Forms.ListBox listCustomers;
/// "summary"
/// Required designer variable.
/// "/summary?
private System.ComponentModel.Container components = null;
340 Раздел I I I . Программирование для Windows
public Forml()
(
//
// Required for Windows Form Designer support
//
initiaiizeComponent() ;
//
// TODO: Add any constructor code after InitiaiizeComponent call
/// "summary"
/// Clean up any resources being used.
/// "/summary"
protected override void Dispose( bool disposing )
{
if ( disposing )
i
if (components != null)
{
components.Dispose();
base.Dispose( disposing ];
ttregion Windows Form Designer generated code
/// "summary"
/// Required method for Designer support-do not modify
/// the contents of this method with the code editor.
/// "/summary"
private void InitiaiizeComponent ()
{
this.dataAdapter = new System.Data.OleDb.OleDbDataAdapter();
this.oleDbSelectCommandl = new System.Data.OleDb.OleDbCommand()
this.connection = new System.Data.OleDb.OleDbConnection();
this . listCustomers = new System.Windows.Forms.ListBoxO;
//
// dataAdapter
//
^his.dataAdapter.SelectCommand =• this.oleDbSelectCommandl;
this.dataAdapter.TableMappings.AddRange(
new System.Data.Common.DataTableMapping[]

1


new System.Data.Common.DataTableMapping(
Работа с базами данных 341
"Table",
"Customers",
new System. Dara.Common.DataColuranMapping[j
f
new System. Data .Common . DataCoiumriMapping (
"CompanyName", "Cor.panyName") ,
new System.Daca.Common.DataColumnMapping(
"ContactName", "ContactName" i
// oleDbSeleccCommandl
//
this.oleDbSelectCommandl.CommandText -
"SELECT CompanyName, ContactName FROM Customers";
thi s.oleDbSelectCommandl.Connection = this.connection;
//
// connection
//
this.connection.ConnectionString =
@"Provider-Microsoft.Jet.OLEDB.4.0;"+
$"Password="""";User ID=Admin;"+
@"Data Source=C: \northwind.mdb; " +
@"Mode=Share Deny None;Extended Properties^""""; "-*-
@"Jet OLEDB:System database="""";"+
@"Jet OLEDB:Registry Path- ';" +
@"Jet OLEDB:Database Password-"""";'4
@"Jet OLEDB:Engine Туре=5;"т
@"Jec OLEDB:Database Locking Mode=l;"+
@"Jet OLEDB:Globai Partial Bulk Ops-2;"l
@"Jet OLEDB:Global Bulk Transactions=l;"+
@"Jet OLEDB:New Database Password-"""";"^
@"Jet OLEDB:Create System Database^False; " +•
(T'Jet OLEDB:Encrypt Database=Faise;"+
@"Jet OLEDB:Don't Copy Locale on Compact=Faise; "•*
@"Jet. OLEDB .-Compact Without Replica Repair=Faise; " i
@"Jet OLEDB:SFP=False11;
// listCustomers
//
this.listCustomers.Location = new System.Drawing.Point(8, 8
this.listCustomers.Name = "listCustomers";
thij.listCustomers.Size - new System.Drawing.Size(280, 264)
this.listCustomers.Tablndex = 0;
342 Раздел I I I . Программирование для Windows
// Forml
//
this.AutoScaleBaseSize =• new System. Drawing, Size (5, 13)
this.ClientSize = new System.Drawing.Size(292, 273);
this.Name -= "Forml";
this.Text = "Forml";
!

#endregion
ill "summary"
/// The main entry point for the application.
/// "/summary"
[STAThread]
static void Main()
{
Application.Run(new Forml ());
Еще раз повторюсь, что в С# работа с базами данных с использованием
объектов OLE DB очень похожа на работу с объектами SQL Server.
Поэтому я но стану детально рассматривать каждую строку кода программы.
Отдельно отмечу лишь те строки, которые отличаются от предыдущего
примера.
this.connection,ConnectionString =
@"Provider=Microsoft.Jet.OLEDB.4.0;"+
@"Password=-"""" ;User ID=Admin; "4
@"Data Source=C:\northwind.mdb;"+
@"Mode-Share Deny None;Extended Properties="""";"+
@"jet OLEDB:System database-""""; " t@"Jet
OLEDB:Registry Path="""";"+
@"Jet OLEDB:Database Password="""";"i
@"Jet OLEDB:Engine Type=5;'M
@"Jec OLEDB:Database Locking Mode=i;"+
@"Jet OLEDB-.Global Partial Bulk Ops=2;" +
@"Jet OLEDB:Global Bulk Transactions = l; "-^
@"Jet OLEDB:New Database Password="""";"+
@"Jet OLEDB:Create System Database=False;"+
@"Jet OLEDB:Encrypt Database=False;"t
0"Jet OLEDB:Don't Copy Locale on Compact=False;"+
e"Jet OLEDB:Compact Without Replica Repair-Faise;"v
@"Jet OLEDB:SFP=False";
Эти строки задают настройки для соединения с источником данных.
Они определяют источник данных, пользователя, пароль, режимы работы
клиента с базой данных и многое другое. Полный формат строки вы
Работа с базами данных 343
сможете найти в MSDN. Нашей программе необходимы лишь четыре параметра:

Provider=Microsoft.Jet.OLEDB.4.О
Параметр Provider определяет тип источника данных. В нашем случае
это "Microsoft.Jet.OLEDB.4.0", который позволяет работать с данными в
формате Microsoft Access.
User ID=Admin
Password=""""
Параметры User ID и Password определяют имя пользователя для доступа
к данным и его пароль. По умолчанию, в Microsoft Access используется
имя Admin с пустым паролем.
Data Source=C:\northwind.mdb
Параметр Data Source определяет для Microsoft.Jet провайдера путь на
диске к файлу базы данных. В моем случае это путь C:\northwind.mdb, у
вас возможны другие варианты.
Расширение функциональности программы
Используя описание предыдущего примера, добавьте обработчик загрузки
формы Forml_Load и код этого обработчика:
private void Forml_Load(object sender, System.EventArgs e)
I

//создаем новый объект DataSet
DataSet ds - new DataSet ();
//вызываем функцию Fill для заполнения объекта
//DataSet содержимым таблицы Customers
dataAdapter.Fill(ds, "Customers");
//получаем доступ к таблице Customers
DataTable dt = ds.Tables("Customers"];
//переносим данные в список
//"Контактное имя" работает на "организация"
//например Иван Петров работает на "СП СибирьНефть"
foreach (DataRow dataRow in dt.Rows)
{
listCustomers.Items.Add( dataRow["ContactName"] t
" работает на V " + dataRow["CompanyName"] + " \ " " ) ;
Как вы могли заметить, в теле метода Forml^Load мы не исправили ни
одной строки кода. Такая совместимость различных объектов ADO.NET
дает возможность создавать легко переносимый код. То есть, если в
один прекрасный момент вам придется отказаться от базы Microsoft
Access в пользу, скажем, ORACLE, то у вас не возникнет больших
проблем.

344 Раздел I I I . Программирование для Windows
Запустив приложение, вы получите окно, изображенное на рис. 33.6.
Результат остался прежним (ведь мы изменили только способ работы с
данными, что никак не влияет на результаты выполнения программы).
ИСПОЛЬЗОВАНИЕ DataGrid
Возможности DataGrid
С# включает такой мощный инструмент для отображения данных, как
элемент управления DataGrid. DataGrid может применяться как для разработки
Windows Forms приложений, так и для разработки Web-приложений.
Нет никакой разницы в написании кода.
Если вы имеете опыт работы с Windows, то должны хорошо представлять,
что такое DataGrid. Этот элемент управления сочетает в себе все
возможности таблицы Excel, и даже больше. Типичный образец использования
элемента DataGrid - табличное представление данных; например,
как представлено на рис. 33.9.
Создание примера приложения
Надо отметить, что наделение DataGrid мощными функциональными
возможностями имеет и свои недостатки, одним из которых является
необходимость использования дополнительных компонент. Сейчас мы
рассмотрим работу с DataGrid на примере. Создадим приложение, исРис.
33.9. Использование DataGrid для табличного представления данных
ID

1


2


3


4


56


7


i ~

9


ФИО
:
Архутич Александр
Володько Дмитрии
Кульпанович Александр
Лях Борис
10 Никифоров Евгении

11


12


13


Рубинов Алексеи
14 !Татаринов Александр

16


Дом. телефон
8-01643-22237
8-216-5-51-01
" ~ "•""•
2 3 2 - 8 2 - 8 3
Г3'-О17733Т147
240-60-30
223Й8-19
8-02230-22222
ICO

42704099


114103424


-

75374929


100309910


:1б |Шмелев Виталий 1268-16-17 .103984181
Работа с базами данных 345
пользующее базу данных Northwind и SQL server в качестве источника
данных.
using System;
using System.Drawing;
using System.Collections;
using System,ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
namespace С Sharp_Exumples
{
public class DataGridUsingForm: System.Windows.Forms.Form
{
private System.ComponentModel.Container
components;
private System.Windows.Forms.DataGrid
Cust.omerDG;
public DataGridUsingForm ( )
{
InitializeCo.Tponent ( ] ;
// объявляем строку для подключения к базе
string connectionString = "server-(local)WNetSDK;" r
"Trustedonnection=yes; databases-north wind";
//объявляем строку SQL запроса для выборки данных кз базы
ST. ring commandSt ring =
"Select CompanyName, ContactName, ConcactTit^e, "
i "Phone, Fax from Customers";
// создаем объект DataAdapter
//задаем ему строку SQL запроса
/ /:задаем ему строку для соединения с базой
SqiDataAdapter DataAdapter =
new SqlDataAdapter fcommandString, connectionScring);
//создаем объект DataSet
DataSet ds - new DataSetO;
//заполняем таблицу "Customers" объекта ds данными из базы
DataAdapter.Fill (ds, "Customers"];
/ / связываем источник данных объекта custorr.erDG с
// таблицей "Customers" объекта ds
customerDG.DataSource=
ds.Tables["Customers"].DefaultView;
i
346 Раздел I I I . Программирование для Windows
protected override void Dispose(bool disposing)
if (disposing)
if (components =-• null)
components.Dispose ();
base.Dispose(disposing);
private void InitializeComponent( )
this.components -
new System.ComponentModel.Container ( );
this.customerDG =
new System.Windows.Forms.DataGrid ( ];
customerDG.Beginlnit ( I;
customerDG.Location =
new System.Drawing.Point (8, 24);
customerDG.Size =
new System.Drawing.Size (656, 224);
customerDG.DataMember ^ "";
customerDG.Tablndex = 0;
this.Text = "Using the Data Grid";
this.AutoScaleBaseSize •=
new System.Drawing.Size (5, 13);
this.CiientSize = new System.Drawing.Size (672, 273)
this.Controls.Add (this.customerDG];
customerDG.Endlnit ( );
public static void Main(string[ 1 argsl
Application.Run (new DataGridUsingForrr ( ) ] ;
Анализ кода программы
Единственный код данной программы, который требует дополнительного
объяснения (при условии, что вы внимательно прочитали предыдущие
разделы), это связывание DataGrid и DataSet.

(tm)_(tm)(tm)* Работа с базами данных 347
cusr.omerDG . DataSource =
ds .Tables["Customers"] .DefaultView;
Класс DataGrid имеет свойство DataSource, которое определяет источник
данных для отображения. Однако это не тот источник данных, который
используется классом SqIDataAdapter. Источником данных для DataGrid
может являться объект одного из типов:
• DataTable;
• DataView;
• DataSet;
• DataViewManager.
В нашем случае мы использовали DataView. Для получения

Список страниц

Закладка в соц.сетях

Купить

☏ Заказ рекламы: +380504468872

© Ассоциация электронных библиотек Украины

☝ Все материалы сайта (включая статьи, изображения, рекламные объявления и пр.) предназначены только для предварительного ознакомления. Все права на публикации, представленные на сайте принадлежат их законным владельцам. Просим Вас не сохранять копии информации.