Спонсор: Microsoft
Опубликован: 14.11.2006 | Доступ: свободный | Студентов: 5820 / 513 | Оценка: 4.18 / 3.74 | Длительность: 16:37:00
ISBN: 978-5-9556-0085-7
Лекция 6:

Работа с базами данных

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >

DataAdapter

DbDataAdapter является родительским классом для SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter. Этот класс содержит 4 объекта типа Command. Классы DataAdapter обеспечивают двусторонний обмен информацией.

SelectCommand — эта команда используется для выборки данных из базы. При этом класс DataTable заполняется данными.

UpdateCommand — обновляет данные (редактирование записей ).

InsertCommand — добавление новых записей.

DeleteCommandкоманда для удаления записей.

Метод Fill класса DbDataAdapter заполняет объекты DataSet или DataTable данными, прочитанными в результате выполнения команды SelectCommand. Эта команда должна быть запросом SQL типа Select. Если таблицы уже существуют, в него добавляются новые таблицы. Вообще метод Fill перегружен 8 раз. Например, DbDataAdapter.Fill Method ( DataSet, String ) добавляет в DataSet таблицу с именем, указанным во втором параметре. Если такая таблица уже есть, она обновляется. Доступ к таблице можно получить с помощью ее имени индексатором:

DataTable tblProducts = data.Tables["Products"];

Метод DbDataAdapter.Update записывает в базу данных все изменения, которые произошли в связанном с ним объекте DataSet.

DataSet

DataSet — это класс, содержащий в себе одну или несколько таблиц DataTable и связи между ними. Класс DataSet — это представление в памяти информации, считанной через ADO из баз данных или XML. Он позволяет манипулировать данными после отключения от источника данных.

Коллекция таблиц хранится в свойстве Tables, а отношений — в свойстве Relations.

Основываясь на таблицах DataSet, можно создавать представления — DataView.

Напишем страницу, в которой будут использоваться представленные классы.

База Northwind входит в комплект SDK. Ее можно установить на сервере, запустив командную строку SQLExpress:

sqlcmd -E -S (local)\SQLExpress -i InstNwnd.sql

<%@ Page Language="C#" AutoEventWireup="true" 
CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Работа с базой</title>
    </head>
    <body>
      <form id="Form1" runat="server">
        <asp:DropDownList ID="DropDownList1" runat="server">
        </asp:DropDownList>
        <asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
        </form>
    </body>
</html>

Файл с кодом:

using System;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        String strConnect;
        String strCommand;
        strConnect = @"Data Source=.\SQLExpress;Initial 
Catalog=Northwind;Integrated Security=True";
        SqlConnection myConn = new SqlConnection(strConnect);
        strCommand = "SELECT CategoryName, CategoryID FROM 
Categories";
        SqlDataAdapter myData = new SqlDataAdapter(strCommand, 
myConn);

        DataSet DataSet1 = new DataSet();
        myData.Fill(DataSet1, "Categories");
        strCommand = "SELECT ProductName, UnitPrice, CategoryID 
FROM Products";
        myData.SelectCommand.CommandText = strCommand;
        myData.Fill(DataSet1, "Products");
        DataSet1.Relations.Add(DataSet1.Tables[0].Columns["CategoryID"], 
DataSet1.Tables[1].Columns["CategoryID"]);

        DataView myView = new DataView(DataSet1.Tables["Products"], 
"", "ProductName", DataViewRowState.CurrentRows);
        DataGrid1.DataSource = myView;
        DataGrid1.DataBind();
        DropDownList1.DataSource = DataSet1.Tables[0];
        DropDownList1.DataTextField = "CategoryName";
        DropDownList1.DataValueField = "CategoryID";
        DropDownList1.DataBind();
        myConn.Close();

    }
}
< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Алексей Савельев
Алексей Савельев

https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx

Денис Прокофьев
Денис Прокофьев

Везде написано, что это самый независимый и простой в использовании навигационный элемент управления, что он работает сразу с web.sitemap и не требует определения SiteMapDataSource.

Моя карта сайта состоит из двух страниц, вложенных друг в друга. asp:Menu, asp:TreeView отбображаются как ожидалось, а вот asp:SiteMapPath - нет. Он не виден нигде. Однако на его месте формируется разметка: <span id="SiteMapPath1"><a href="#SiteMapPath1_SkipLink" style="position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;">Проход по ссылкам навигации</a><a id="SiteMapPath1_SkipLink"></a></span> - т.е. элемент отрабатывает.

В словах xHTML это выглядит так: <asp:SiteMapPath ID="SiteMapPath1" runat="server" />. Причем не важно - внутри тега form или снаружи - всегда одинаково.

Т.к. другие нав. ЭУ работают через простой источник данных без ошибок, делаю вывод - карта составлена правильно. ИД: <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />

Карта: <?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/L11_1_simplePage.aspx" title="Страница 1"  description="Простая страница 1." >
    <siteMapNode url="~/L11_1SimplePage2.aspx" title="Страница 2"  description="Простая страница 2" />
  </siteMapNode>
</siteMap>

Почему так происходит? Вроде делаю все по примерам. VS Community 2015. NetFramework в проекте: v4.0.30319

Анна Малова
Анна Малова
Азербайджан, Баку
Дмитрий Крюков
Дмитрий Крюков
Россия, Москва