https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Работа с базами данных
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(); } }