ADO.Net Disconnected model For Student

Содержание

Слайд 2

In-memory RDBMS Work with real RDBMS Typed DataSets

In-memory RDBMS
Work with real RDBMS
Typed DataSets

Слайд 3

DISCONNECTED MODEL КОМПОНЕНТЫ Connection Command DataAdapter DataSet

DISCONNECTED MODEL КОМПОНЕНТЫ

Connection
Command
DataAdapter
DataSet

Слайд 4

DATA SET

DATA SET

Слайд 5

DATASET = RDBMS В ПАМЯТИ

DATASET = RDBMS В ПАМЯТИ

Слайд 6

ОПИСАНИЕ “DB” СТРУКТУРЫ DataSet Tables Relations Table Primary Key Namespace Column

ОПИСАНИЕ “DB” СТРУКТУРЫ

DataSet

Tables

Relations

Table

Primary Key

Namespace

Column
Column Name
Allow Null
Data Type
Max Length



Relation


Constraints

Constraint


Слайд 7

ОПИСАНИЕ “DB” СТРУКТУРЫ. ТАБЛИЦЫ var ds = new DataSet("Northwind") { Namespace

ОПИСАНИЕ “DB” СТРУКТУРЫ. ТАБЛИЦЫ

var ds = new DataSet("Northwind") { Namespace = "Northwind" };
// Create table  var customerTable = ds.Tables.Add("Categories");
// Crete autoincrement Id (as primary key) var categoryId = new DataColumn() {     ColumnName = "CategoryID", AllowDBNull = false, DataType = typeof(int),     AutoIncrement = true, AutoIncrementStep = 1, AutoIncrementSeed = 1 }; customerTable.Columns.Add(categoryId); customerTable.PrimaryKey = new DataColumn[] { categoryId };
// Other columns customerTable.Columns.Add(new DataColumn()     {         ColumnName = "CategoryName", AllowDBNull = false, DataType = typeof(string), MaxLength = 15     });
customerTable.Columns.Add("Description", typeof (string)); customerTable.Columns.Add("Picture", typeof (byte[]));

Слайд 8

СВЯЗИ И ОТНОШЕНИЯ ds.Relations.Add( new DataRelation("FK_Products_Categories", categoryIdColumn, productTable.Columns["CategoryID"])); categoryTable.Constraints.Add( new UniqueConstraint(categoryIdColumn,

СВЯЗИ И ОТНОШЕНИЯ

ds.Relations.Add(     new DataRelation("FK_Products_Categories",          categoryIdColumn,          productTable.Columns["CategoryID"])); categoryTable.Constraints.Add(     new UniqueConstraint(categoryIdColumn, true)); productTable.Constraints.Add(     new ForeignKeyConstraint(categoryIdColumn, productTable.Columns["CategoryID"])     {         DeleteRule = Rule.SetNull,         UpdateRule = Rule.Cascade     });

Слайд 9

ДОБАВЛЕНИЕ И МОДИФИКАЦИЯ

ДОБАВЛЕНИЕ И МОДИФИКАЦИЯ

Слайд 10

ADD/CHANGE/DELETE ИЗ КОДА var categoriesTable = ds.Tables["Categories"]; var productsTable = ds.Tables["Products"];

ADD/CHANGE/DELETE ИЗ КОДА

var categoriesTable = ds.Tables["Categories"]; var productsTable = ds.Tables["Products"];
// Add new data categoriesTable.Rows.Add(null, "Beverages", "Soft drinks, coffees, teas, beers, and ales", null); categoriesTable.Rows.Add(null, "Condiments", "Sweet and savory sauces, relishes, spreads, and seasonings", null); productsTable.Rows.Add(null, "Chai", "10 boxes x 20 bags", 18.00m, 39, 0, 10, false, 1); productsTable.Rows.Add(null, "Chang", "24 - 12 oz bottles", 19.00m, 17, 40, 25, false, 1); productsTable.Rows.Add(null, "Chef Anton's Cajun Seasoning", "48 - 6 oz jars", 22.00m, 53, 0, 0, false, 2);
// Change price for one product var chaiRow = productsTable.Rows[1]; chaiRow["UnitPrice"] = (decimal)chaiRow["UnitPrice"] + 1;
// Delete one product productsTable.Rows[2].Delete();

Слайд 11

ФИЛЬТРАЦИЯ foreach (DataRow product in productsTable.Select("UnitPrice >= 20")) { Console.WriteLine(product["ProductName"]); }

ФИЛЬТРАЦИЯ

foreach (DataRow product in productsTable.Select("UnitPrice >= 20")) {     Console.WriteLine(product["ProductName"]); }

Слайд 12

MASTER / DETAIL ОТНОШЕНИЯ foreach (DataRow category in categoriesTable.Rows) { Console.WriteLine(category[1]);

MASTER / DETAIL ОТНОШЕНИЯ

foreach (DataRow category in categoriesTable.Rows) {     Console.WriteLine(category[1]);     foreach (DataRow product in category.GetChildRows("FK_Products_Categories"))         Console.WriteLine("\t{0}", product[1]); }

ds.Relations.Add(     new DataRelation("FK_Products_Categories",          categoryIdColumn,          productTable.Columns["CategoryID"]));

Describe relation

Navigate

Слайд 13

РАБОТА С XML var ds = CreateNorthwindDataSet(); ds.ReadXml("data.xml"); var productsTable =

РАБОТА С XML

var ds = CreateNorthwindDataSet(); ds.ReadXml("data.xml"); var productsTable = ds.Tables["Products"]; productsTable.Rows.Add(null, "New product", "1", 122.00m, 1, 0, 0, false, 2); ds.WriteXml("new_data.xml");

var ds = new DataSet(); ds.ReadXmlSchema("schema.xsd"); var categoriesTable = ds.Tables["Categories"]; categoriesTable.Columns.Add("Favorite", typeof(bool)); ds.WriteXmlSchema("new_schema.xsd");

Read / Write XML

Read / Write XML Schema

Слайд 14

РАБОТА С RDBMS

РАБОТА С RDBMS

Слайд 15

ЗАГРУЗКА ДАННЫХ var command = connection.CreateCommand(); command.CommandText = "select CategoryID, CategoryName,

ЗАГРУЗКА ДАННЫХ

var command = connection.CreateCommand();
command.CommandText =     "select CategoryID, CategoryName, Description, Picture " +     " from Northwind.Categories";
ds.Tables["Categories"].Load(command.ExecuteReader());

Слайд 16

DATA ADAPTER var adapter = new SqlDataAdapter( "select * from Northwind.Categories

DATA ADAPTER

var adapter = new SqlDataAdapter(     "select * from Northwind.Categories as Categories; " +     " select * from Northwind.Products",     connection);
adapter.TableMappings.Add("Table", "Categories"); adapter.TableMappings.Add("Table1", "Products");
adapter.Fill(ds);

Слайд 17

МАППИНГ var adapter = new SqlDataAdapter( "select ProductName, " + "

МАППИНГ

var adapter = new SqlDataAdapter(     "select ProductName, " +      " UnitPrice * (UnitsInStock + UnitsOnOrder) * (1 - Discontinued) TotalCost " +      " from Northwind.Products", connection); var mapping = adapter.TableMappings.Add("Table", "ProductCost");
mapping.ColumnMappings.Add("ProductName", "Name"); mapping.ColumnMappings.Add("TotalCost", "Cost"); adapter.Fill(ds);

Слайд 18

UPDATE var updateCommand = new SqlCommand( "update Northwind.Categories " + "

UPDATE

var updateCommand = new SqlCommand(     "update Northwind.Categories " +     " set CategoryName = @p1, Description = @p2, Picture = @p3 " +     " where CategoryID = @p4", connection);
updateCommand.Parameters.Add("@p1", SqlDbType.NVarChar, 15, "CategoryName"); updateCommand.Parameters.Add("@p2", SqlDbType.NText, 0, "Description"); updateCommand.Parameters.Add("@p3", SqlDbType.Image, 0, "Picture");
updateCommand.Parameters.Add(     new SqlParameter()     {         ParameterName = "@p4",         SourceColumn = "CategoryID",         SourceVersion = DataRowVersion.Original     }); adapter.UpdateCommand = updateCommand;

adapter.Fill(ds);
ds.Tables["Categories"].Rows[12]["CategoryName"] = "!!!";
adapter.Update(ds);

Слайд 19

INSERT var insertCommand = new SqlCommand( "insert into Northwind.Categories " +

INSERT

var insertCommand = new SqlCommand(     "insert into Northwind.Categories " +     " (CategoryName, Description, Picture) " +     " values(@p1, @p2, @p3); " +
    "select SCOPE_IDENTITY() as CategoryID", connection);
insertCommand.Parameters.Add("@p1", SqlDbType.NVarChar, 15, "CategoryName"); insertCommand.Parameters.Add("@p2", SqlDbType.NText, 0, "Description"); insertCommand.Parameters.Add("@p3", SqlDbType.Image, 0, "Picture");
insertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord; adapter.InsertCommand = insertCommand;

adapter.Fill(ds); var newRow =  ds.Tables["Categories"].Rows.
Add(null, "New Category", "New Category description"); adapter.Update(ds);
Console.WriteLine(newRow["CategoryID"]);