ПредишенСледващото

Денис Kondratyev
visualdesign.ru

ADO.NET технология, за разлика от своите предшественици, АДО и OLE DB, е разработен специално за използване в уеб приложения, в които няма трайни връзки към базата данни. Традиционен работа с данни в ADO.NET се основава на следната схема: а Connection връзка, а след това се отваря чрез Open, създаде команда Command обект капсулира SQL команда, то се изпълнява и след това връзката е затворена. Този подход осигурява достъп до резултатите от в онлайн заявка. Т.е. четене на данни с помощта на DataReader, не може да прескочи няколко записи или да се върнете към предишната. Достъп Flow има най-добро представяне.
ADO.NET е предназначена за достъп до данни без никаква реална връзка с базата данни. В този случай, всички данни се съхраняват в RAM. Работа с данни в ADO.NET изключват посредством имена пространство System.Data клас.

Най Wyżne клас, когато се работи с прекъснат данни - набор от данни. След получени резултатите от заявките, използващи DataAdapter обект и се съхраняват в данните "е връзката между базата данни и базата данни за обект престане да съществува. Промени в данните не засягат база данни и обратно на. DataSet клас включва набор от DataTable таблици и връзки между таблици DataRelation. DataTable клас включва набор от линии на колоната DataRow, DataColumn слагам масата, и определя ChildRelations ParentRelations отношенията между колони от различни таблици в базата данни. DataRow клас капсулира информация за реда в таблицата и изтрит лентата на състоянието, Modified, Нова и непроменени. Клас Ограничение се използва за да се запази целостта на данните в таблиците.

Предимства на работата с изключен данни:
1. не изисква постоянна връзка с базата данни, което е необходимо, например за уеб приложения;
2. улеснява създаването на многослойни приложения. Ако приложението достъп до базата данни с помощта на обектите на ниво DAL, бизнес обекти в БЕЛ могат да прехвърлят данни. Актуализациите на базата данни също могат да бъдат предавани чрез DataSet;
3. улеснено сортиране, търсене, филтриране, както и навигация данни;
4. улеснена работа с релационни данни;
5. е възможно да се кешира промените. DataSet обект позволява промени кеш, а след това с помощта на DataAdapter премине всички промени в базата данни за 1 пъти;
6. Интегриране с XML. Съдържанието на набора от данни могат да се зареждат и записани във формат XML.

С помощта на набор от данни обекти

По-долу е пример за използване DataSet обект. Всички примери в статията се използва базата данни Northwind DB MS SQL Server.

stringconn = "Доставчик = SQLSQL; Data Source = (местни) \\ NetSDK; InitialCatalog = Northwind; Trusted_Connection = Да;";
низ на заявката = "Изберете CustomerID, CompanyName, ContactName, Телефон от клиенти";
SqlDataAdapter га = нов SqlDataAdapter (заявка, CT);
Набор от данни DS = нов DataSet ();
da.Fill (ДП, "Клиенти");

Първо се създаде връзка низ и SQL база данни заявка за да извлича данни. DataAdapter поставя резултатите от заявките в съответната таблица DataTable, намиращ се в набор от данни. Използването Попълнете претоварен метод може да се поставя директно в данните и DataTable. За една маса, можете многократно да се обадите на метод Fill, обаче, ако се обадите на метода на запълване за данните, без изрично да се посочи името на таблицата, данните ще бъдат преместени в различни таблици (например, "Таблица", "Таблица 1", "Таблица 2",). За достъп до данните в таблицата, има редове имот, който се връща на набор от DataRow обекти

DataTable маса = ds.Tables [0];
DataRow ред = table.Rows [0];
Console.WriteLine ( "OrderID:" + ред [ "OrderID"]);
Console.WriteLine ( "CustomerID:" + ред [ "CustomerID"]);

В DataRow има т Имотът, който се връща на съдържанието на дадена област. Можете да укажете името на областта в примерния код, или цяло число, съответстващо на поредния номер на колоната. При търсене на сондажната индекс данни се върна по-бързо, отколкото ако търсите името на колоната.

Промяна на съдържанието на DataTable

NewRow () метод съществува, за да добавите нов ред в таблицата, което създава нов обект на DataRow, но не добавите записа към масата. Област на новите стойности рекорд зададените настройки или Null, ако няма стойност е зададена по подразбиране.

. DataRow ред = ds.Tables [ "клиенти"] NewRow ();
ред [ "CustomerID"] = "Вася";
ред [ "Фирма"] = "Фирма";
ред [ "ContactName"] = "John Doe";
ред [ "Телефон"] = "11/22/33";
ds.Tables [ "клиенти"] Rows.Add (ред) .;

Има и друг начин за добавяне на записи в таблицата - метод LoadDataRow (). Първият параметър на този метод - е масив от стойности на елементите на които съответстват на колоните на таблицата. Второ - тя позволява да се контролира стойността на нов рекорд RowState имота. Ако преминете фалшива, стойността на този имот ще бъде добавен, както и с добавянето на нов запис Добавете начин.

Редактирането на съществуващ запис, както следва:

DataRow ред = ds.Tables [ "клиенти"] [0];
ред [ "ContactName"] = "John Doe";

или чрез метод ItemArray:

За да изтриете запис трябва да бъде извикана DataRow.Delete (метод). В същото дистанционно запис не е действително отстранена от DataTable и е маркиран като изтрит - това RowState собственост е настроена да изтрити. Ако преди да се обадите RowState Delete стойност е добавен, totolko в този случай редът се изтрива от масата.

Използването на колони с autoincrement

В подкрепа на колони с автоматично увеличение на стойността на DataColumn има имот AutoIncrement, AutoIncrementSeed и AutoIncrementStep. За да създадете автоматично увеличаване DataColumn колона AutoIncrement трябва да зададете на имота, за да е истина. Стойността на брояч ще започне от AutoIncrementSeed (ако то не нарушава коректността на данните в таблицата) и увеличението на стойността AutoIncrementStep. За колони с автоматично увеличение Препоръчително е да зададете ReadOnly собственост, за да е истина. По-долу е пример за вмъкване в таблицата колона с autoincrement

DataColumn колона = table.Columns.Add ( "CustomerID", typeof (Int32));
column.AutoIncrement = вярно;
column.AutoIncrementSeed = 1;
column.AutoIncrementStep = 1;

Ако имате намерение да разруши промяна в базата данни от DataAdapter.Update (), се препоръчва да се определят свойствата и AutoIncrementSeed AutoIncrementStep стойност -1. Това гарантира, че ADO.NET ще генерира стойност етикет, който не е в базата данни. Когато се обадите на метода на актуализация в базата данни ще имат уникални ценности.

Работа с набор от данни в Visual Studio .NET среда,

Набор от данни обекти могат да създават както програмно и с помощта на Visual Studio среда. За втория случай е раздела Data в кутията с инструменти. Първо трябва да плъзнете в мрежата или да спечели форма обект SqlDataAdapter.

Работа с данни офлайн в, шум

След това, в инструкциите, за да създадете нова връзка към базата данни чрез въвеждане на база данни Northwind и начин за достъп до базата данни като «Използване на SQL отчети». След това изберете таблицата с клиентите и маркирайте всички колони на таблицата.

Работа с данни офлайн в, шум

Повторете процеса за маса Поръчка, с помощта на готови връзка. След това щракнете с десния бутон върху панела създаден DataAdapter е, изберете от контекстното меню Генериране на набор от данни.

Работа с данни офлайн в, шум

Отбележете два DataAdapter и след това върху OK.

Работа с данни офлайн в, шум

Добавен DataSet обект показва в компонентите на панела. Добавили сме така наречената DataSet силно написали (а написали DataSet), за които ще намерите говорим по-късно. структура на данните може да се намери в създаден файлово разширение XSD.

Работа с релационни данни

Работа с релационни данни с помощта DataRelation обект клас, свързващи колона DataColumn DataTable две маси. Можете да създадете такъв обект, както следва:

ds.Relationships.Add (нов DataRelation ( "CustomersOrders", ds.Tables [ "Клиентите"] Колони [ "CustomerID"], ds.Tables [ "поръчки"] Колони [ "CustomerID"]) ..;

Ако искате да се определи съотношението на базата на няколко колони, трябва да използвате конструктор, който се масив от DataColumn:

DataTable tblParent = ds.Tables [ "ParentTable"];
DataColumn [] colsParent = нов DataColumn [];
DataTable tblChild = ds.Tables [ "ChildTable"];
DataColumn [] colsChild = нов DataColumn [];
ds.Relationships.Add (нова DataRelation ( "ParentChild", colsParent, colsChild));

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

Основното приложение DataRelation Целта е да се търси информация, свързана. Въпреки DataRelation самия обект не осигурява тази функционалност е реализирана методи DataRow класа: GetChildRow (), GetParentRow () и GetParentRows ().
За да търсите за деца записи използват метод GetChildRow () на съответния обект DataRow. Той предава името му DataRelation обект, който определя отношенията. Този метод връща документите на детето в масив от DataRow обекти.

DataRow ред = ds.Tables [ "Клиентите"] редове [0] .;
foreach (DataRow rowOrder в row.GetChildRows ( "CustomersOrders"))
Console.WriteLine (rowOrder [ "OrderID"] + rowOrder [ "ORDERDATE"] + "\ п");

Намери рекорд майка с помощта DataRelation възможен метод DataRow.GetParentRow ().

DataRow rowOrder = ds.Tables [ "поръчки"] редове [0] .;
Console.WriteLine ( "\ т" + rowOrder.GetParentRow ( "CustomersOrders") [ "ContactName"] + "\ п");

В случай на връзката "едно към много", за да намерите всички родителят записва специфичен DataRow обект може да бъде GetParentRows методът (), както и името на хоста на връзката, и връща масив от обекти майки.

Добавянето DataRelation обект в Visual Studio .NET

За да добавите DataRelation отношения в данните на силно написали вие трябва да отидете на структурата на данните, като кликнете върху файла с разширение на XSD, който определя структурата на набор от данни. Кликвайки върху DataTable родител е необходимо още от контекстното меню изберете Add / New връзка.

Работа с данни офлайн в, шум

В диалоговия прозорец Редактиране на връзка, уточнява родител и дете обекти.

Работа с данни офлайн в, шум

Когато кликнете върху OK в XML Схема дизайнер изглежда графично представяне DataRelation - линията, свързваща двата обекта.

Търсене записи

За заявки към базата данни, често е необходимо да се намери запис на неговия първичен ключ. За да намерите записи в там метод DataRowCollection.Find () на DataTable.

table.PrimaryKey = нов DataColumn [];
DataRow ред = tbl.Rows.Find ( "Вася");
ако (ред == нула)
Console.WriteLine ( "Запис не е намерен");
още
Console.WriteLine (ред [ "CompanyName"]);

Ако основният ключ се състои от няколко колони, а след това в метода на търсене (), можете да мине масив от обекти.
За да търсите произволен SQL заявки от DataTable има метод за търсене (). Например, за да се получи имената на всички клиенти, които са в Уфа, можете да използвате този код

DataRow [] редове = table.Select ( "City = 'Ufa");
foreach (DataRow ред в редове)
Console.WriteLine (ред [ "CompanyName"] + "\ п");

Ако трябва да се върне данните са подредени, можете да използвате претоварен вариант на този метод. Тя симулира ORDER BY раздел SQL заявител.

DataRow [] редове = table.Select ( "City = 'Ufa", "CompanyName ASC");

Работа с DataSet обекти силно въведен

Ние вече са създали набор от данни, обекти са силно въвели. Помислете за това, което нова функционалност се добавя към въведен набор от данни.

Добавяне на запис

Всички класове, които съответстват на DataTable в данните, които ви позволяват да добавите нови записи по два начина. Нов метод [table_name] ред () връща нов ред в таблицата:

DataSetTest DS = нов DataSetTest ();
DataSetTest.CustomersDataTable tblCustomers = ds.Customers;
DataSetTest.CustomersRow rowCustomer = tblCustomers.NewCustomersRow ();
rowCustomer.CustomerID = "Вася";
rowCustomer.CompanyName = "дружество";
rowCustomer.ContactName = "John Doe";
rowCustomer.Phone = "11/22/33";
tblCustomers.AddCustomersRow (rowCustomer);

Вторият начин - е да се използва Row () метод за добавяне на [таблица_име], която се масив от обекти на подходящи полета рекордни:

DataSetTest DS = нов DataSetTest ();
DataSetTest.CustomersDataTable.AddCustomersRow ( "Вася", "Фирмата", "John Doe", "11/22/33");

запис Търсене

Търсене записи в таблицата, също се е променило. Например, за да търсите в таблицата с подробности за композитни ключове имаше метод следния метод

DataSetTest.Order_DetailRow = tblDetails.FindByOrderIDProductID (112,233, 456);

Също така въведен набор от данни за подкрепа на руски букви в имената на таблици и полета на маса.

ds.Statistika.AddStatistikaRow (15.9 ", фирма", вярно);

Трансфер актуализациите на базата данни

За да прехвърлите промяна в базата данни с помощта на DataAdapter. една от трите опции може да се използва за създаване на база данни актуализации логика:
1. ръчно да конфигурирате DataAdapter по време на развитие;
2. използване CommandBulder Обектът по време на изпълнение;
3. използване по време на развитието на DataAdapter Wizard конфигурация.

Ръководство конфигурация DataAdapter

DataAdapter 3 има имоти за предаване на промени в базата данни: InsertCommand, UpdateCommand и DeleteCommand. Стойностите на тези имоти трябва да бъдат определени преди DataAdapter.Update на метод повикване () с оглед на това, което бяха направени промени в набор от данни. Когато методът за Обновяване () добавя, ъпдейти или изтрива ред в таблицата, тя създава съответната команда.
Ако в хода на действията ви току-що сте добавили линия на масата, а след това трябва да посочите само InsertCommand стойност. По-долу е кодът за тази ситуация:

низ вр = "Доставчик = SQLSQL; Data Source = (местни) \\ NetSDK; Първоначална Catalog = Northwind; Trusted_Connection = Да;";
низ на заявката = "Изберете CustomerID, CompanyName, ContactName, Телефон от клиенти"; SqlDataAdapter га = нов SqlDataAdapter (заявка, CT); DataSet маса = нов DataSet (); da.Fill (маса, "Клиенти");

// добавяне на нов ред на таблицата
.

// създаване на команда, за да вмъкнете нови рекорди
заявка = "INSERT INTO клиентите (CustomerID, CompanyName, ContactName, Телефон) стойности (.)";
SqlCommand CMD = нов SqlCommand (заявка, CT);
SqlParameterCollection бр = cmd.Parameters; pc.Add ( "CustomerID", SqlType.Integer, 0 "CustomerID");
pc.Add ( "CompanyName", SqlType.String, 0 "CompanyName");
pc.Add ( "ContactName", SqlType.String, 0 "ContactName");
pc.Add ( "Телефон", SqlType.String, 0, "Телефон");
da.InsertCommand = CMD;
da.Update (маса);

Такъв подход може да се използва при предаването на актуализации на базата данни с помощта на съхранени процедури. Да приемем, че името на съхранената процедура, за да добавите нов купувач е spInsertCustomer. Тогава промените кода, както следва:

OleDbCommand CMD = нов OleDbCommand ( "spInsertCustomer", CT);
cmd.CommandType = CommandType.StoredProcedure;
OleDbParameterCollection бр = cmd.Parameters;
pc.Add ( "CustomerID", SqlType.Integer, 0 "CustomerID");
pc.Add ( "CompanyName", SqlType.String, 0 "CompanyName");
pc.Add ( "ContactName", SqlType.String, 0 "ContactName");
pc.Add ( "Телефон", SqlType.String, 0, "Телефон");

Използване на CommandBuilder

CommandBuilder генерира SQL заявки, отнасящи се до базата данни за метаданни за маси. За да използвате CommandBuilder изисква при следните условия: 1. заявката връща данните от само една маса;
В Таблица 2. първичен ключ;
3. Първичният ключ е в резултатите от заявките.
По-долу е пример за използване на CommandBuilder.

низ против = "Доставчик = SQLOLEDB; Data Source = (местни) \\ NetSDK; InitialCatalog = Northwind; Trusted_Connection = Да;";
низ на заявката = "SELECT OrderID, ProductID, Количество, UNITPRICE FROM [Подробности за поръчката]";
OleDbDataAdapter га = нов OleDbDataAdapter (strSQL, strConn);
OleDbCommandBuilder вб = нов OleDbCommandBuilder (га);
da.InsertCommand = cb.GetInsertCommand ();
da.Update (TBL);

Използване на съветника за Wizard данни адаптер Configuration

Един от предназначението на капитана - логиката творение да се актуализира базата данни. В четвъртия стъпка на помощника на командата Advanced Options показва диалогов прозорец, в който можете да укажете дали да се създаде команди за вмъкване, актуализиране и изтриване на записи в базата данни.

Работа с данни офлайн в, шум

На третата стъпка на съветника, можете да посочите метод за предаване на актуализации на базата данни: с помощта на SQL заявки, като се използва съществуваща съхранена процедура или да се създаде нова запомнена процедура. В момента няма допълнителни стъпки, за да се създаде логика актуализация не е необходимо.

Работа с данни офлайн в, шум

Свързани статии

Подкрепете проекта - споделете линка, благодаря!