Введення в ADO.NET III, ADO.NET, ASP, статті



У перших статтях з цієї серії ми представили кілька особливостей Dataset Object. Нагадаємо їх:

1) Dataset не взаємодіє безпосередньо з істчніком даних.
2) Підтримує стосунки між різними таблицями.
3) Ви можете переміщатися за таблицями за допомогою цих відносин 4) Для передачі даних використовується
XML.
5) Крім расшренія переданих тііпов, це дозволяє переданому об’єкту не відчувати впливу брандмауерів.


Нижче наведена ілюстрація об’єктної моделі Dataset (взята з документації):


Як видно, Dataset має більш складну структуру, ніж Recordset
Object.
Схема наочно показує можливості зберігання некольких таблиць і програмного додавання зв’язків між ними.


Але як Dataset заповнюється перший раз? Дуже просто! Для цього використовується метод FillDataset () об’єкта DatasetCommand. Метод отримує два параметри – ім’я Dataseta який повинен бути заповнений і ім’я таблиці, яка буде додана до
Dataset.
Код нижче ілюструє заповнення Dataset на прикладі SQL provider:

public class SQLConnect {

public string openConnection(HttpResponse Response,String
dbConnectString,String cmdString) {
try {
Dataset dsOrders = new Dataset();
SQLConnection dataConn = new SQLConnection(dbConnectString);
SQLDatasetCommand dsCmd = new SQLDatasetCommand(cmdString,dataConn);
dsCmd.FillDataset(dsOrders,"Orders");
// Loop through Dataset "Orders" table
Response.Write("<table><tr><td><b>Order ID</b></td></tr>");
foreach (DataRow Order in dsOrders.Tables["Orders"].Rows) {
Response.Write("<tr>");
Response.Write("<td>" + Order["OrderId"].ToString() + "</td>");
Response.Write("</tr>");
}
Response.Write("</table>");
return "<p>SQL Server Data Connection Opened";
}
catch (Exception e) {
return(e.ToString());
}
}
} //End Class


Код багато в чому схожий на використаний при роботі з DataReader, хоча содіненіе і не підтримується під час перебору записів. Видно що після заповнення Dataset ми просмтріваем всі рядки таблиці. Замість ручного форматування таблиці, можна пов’язати Dataset з ASP + DataGrid змусити його виконати цю роботу:

<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SQL"%>
<html><head>
<script language="C#" runat="server">
public class SQLConnect {

public Dataset returnDataset(String dbConnectString,String cmdString) {
Dataset dsOrders = new Dataset();
SQLConnection dataConn = new SQLConnection(dbConnectString);
SQLDatasetCommand dsCmd =
new
SQLDatasetCommand(cmdString,dataConn);
dsCmd.FillDataset(dsOrders,"Orders");
return(dsOrders);
} } public void Page_Load(Object Src, EventArgs
E) { StringSQLconnStr="server=localhost;uid=sa;pwd=;database=Northwind";
String sql = "SELECT * FROM Orders";

//Open SQL Connection
SQLConnect SQLconn = new SQLConnect();
Dataset OrdersDataset = SQLconn.returnDataset(SQLconnStr,sql);
OrdersDataGrid.DataSource=OrdersDataset.Tables["Orders"].DefaultView;
OrdersDataGrid.DataBind();
}
</script>
</head>
<body bgcolor="#ffffff">
<ASP:DataGrid id="OrdersDataGrid" runat="server" Width="700"
BackColor="#E6E6CC" BorderColor="#000000" ShowFooter="false"
CellPadding=5 CellSpacing="0" Font-Name="Arial" Font-Size="8pt"
HeaderStyle-BackColor="#6C0A00" HeaderStyle-ForeColor="#ffffff"
MaintainState="false"
/>
</body>
</html>

На закінчення наведемо ще один приклад. Таблиці Customer і Orders з БД NorthWind будуть завантажені в dsTables.Затем вони будуть пов’язані один з одним через. Після установки відносин всі запити, пов’язані з кожним покупцем будуть поміщені в DIV тег і будуть з’являтися і зникати після клацання користувача.

<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SQL"%>
<html>
<script language="C#" runat="server">
public class SQLConnect {

public Dataset returnDataset(String dbConnectString,String
table1,String table2) {
Dataset dsTables = new Dataset();
SQLConnection dataConn = new SQLConnection(dbConnectString);
SQLDatasetCommand dsCmdCustomers = new SQLDatasetCommand(table1,dataConn);
SQLDatasetCommand dsCmdOrders = new SQLDatasetCommand(table2,dataConn);
dsCmdCustomers.FillDataset(dsTables,"Customers");
dsCmdOrders.FillDataset(dsTables,"Orders");
dsTables.Relations.Add( _
"CustomerOrders",dsTables.Tables["Customers"].Columns _
["CustomerId"],dsTables.Tables["Orders"].Columns["CustomerId"]);
return(dsTables);
}
} //End Class
public void Page_Load(Object Src, EventArgs E) {
String SQLconnStr = "server=localhost;uid=sa;pwd=;database=Northwind";
String table1 = @"SELECT * FROM Customers WHERE CustomerID LIKE “f%” _
ORDER BY ContactName";
String table2 = "SELECT * FROM Orders WHERE CustomerID LIKE “f%”";
String output = "";
//Open SQL Connection
SQLConnect SQLconn = new SQLConnect();
Dataset TablesDataset = SQLconn.returnDataset(SQLconnStr,table1,table2);
foreach (DataRow Customer in TablesDataset.Tables["Customers"].Rows) {
output += "<div onClick="showDetails(“";
output += Customer["CustomerID"].ToString() + "”)">";
output += "<br><span style="background: #02027a;color:";
output += "#ffffff;width: 400px;";
output += "cursor: hand;font-weight: bold"> Customer Name: ";
output += Customer["ContactName"].ToString() + "</span>";
output += "</div>";
output += "<div style=”width: 400px;display: none;background:";
output += "#efefef” id=”";
output += Customer["CustomerID"].ToString() + "”>";
// Iterate over orders data
foreach (DataRow Order in
Customer.GetChildRows(TablesDataset.Relations["CustomerOrders"])) {
output += "<br><b>Order:</b> #" + Order["OrderId"].ToString();
output += "&nbsp;&nbsp;&nbsp;&nbsp;<b>Order Date:</b>";
output += Order["OrderDate"].ToString();
}
output += "</div>";
}
content.InnerHtml = output;
}
</script>
<head>
<script language="JavaScript">
function showDetails(id) {
var loc = document.all(id);
if (loc.style.display == “none”) {
loc.style.display = “block”;
} else {
loc.style.display = “none”;
}
}
</script>
</head>
<body bgcolor="#ffffff">
<h2><b>Customer Orders</b></h2>
<div id="content" runat="server"/>
</body>
</html>

Переглянемо код. Видно, що при завантаженні спочатку завантажуються SQL рядка для отримання даних при створенні обох таблиць. Потім створюється об’єкт класу SQLConnect і викликається його метод returnDataset () Метод отримує з’єднання і SQL рядка для необхідні для роботи. Після приміщення цих рядків у Dataset створюється зв’язок між таблицями по CustomerID. Потім починається перегляд всіх замовлень.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*