Download - Aplikacje sieciowe

Transcript
Page 1: Aplikacje sieciowe

Aplikacje sieciowe

Warstwy aplikacji sieciowych

Page 2: Aplikacje sieciowe

Architektura warstwowa

Warstwa prezentacji

Warstwa logiki (aplikacji)

Warstwa danych

Page 3: Aplikacje sieciowe

Warstwa prezentacji

• Strona aspx

• Arkusze stylów css

• Kontrolki wizualne

Page 4: Aplikacje sieciowe

Warstwa logiki (aplikacji)

• Własne obiekty

• Obiekty z bibliotek .NET

• Obiekty komunikacji ze źródłem danych public partial class Kontakt : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e) { }

protected void SendMailBtn_Click(object sender, EventArgs e) {

MailMessage mail = new MailMessage( MailFromInp.Text,ConfigurationManager.AppSettings["contactPersonMailAdress"] , MailSubjectInp.Text, MailBodyInp.Text );

SmtpClient smpt = new SmtpClient();

smpt.Send(mail);

}

}

Page 5: Aplikacje sieciowe

Warstwa danych

Page 6: Aplikacje sieciowe

Źródła danych

• Bazy danychAccess, MS Sql, inne

• Pliki XML- formaty typu SiteMap- inne formaty XML

• Obiekty (tablice, kolekcje itp..)

• Pliki tekstowe i inne

Page 7: Aplikacje sieciowe

Podstawowe obiekty Bazodanowe

• SqlCommand

• SqlConnection

• ConnectionString

Page 8: Aplikacje sieciowe

Warstwowy schemat pracy ze źródłem danych

<TeacherList>

<teacher name="Paweł Fałat" certificates="MCP, MCAD"/>

<teacher name="Kornel Warwas" certificates="MCP, MCAD"/>

<teacher name="Szymon Tegler" certificates="MCP, MCAD"/>

<teacher name="Andrzej Polański" certificates="MCP, MCAD"/>

<teacher name="Tomasz Gancarczyk" certificates="MCP, MCSE"/>

</TeacherList>

Page 9: Aplikacje sieciowe

Obiekty typu DataSource

Page 10: Aplikacje sieciowe

Tworzenie Menu: Źródło dokument typu SiteMap

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >

<siteMapNode url="Default.aspx" title="Home" description="">

<siteMapNode url="~/ConferenceCommity.aspx" title="Conference Commity" description="" />

<siteMapNode url="~/ScientificCommity.aspx" title="Scientific Commity" description="" />

<siteMapNode url="~/Null3.aspx" title="Comunicates" description="" >

<siteMapNode url="~/Null3a.aspx" title="Comunicate nr 1" description="" />

<siteMapNode url="~/Null3b.aspx" title="Comunicate nr 2" description="" />

<siteMapNode url="~/Null3c.aspx" title="Comunicate nr 2" description="" />

</siteMapNode>

...

</siteMap>

Page 11: Aplikacje sieciowe

Źródło danych: dokument XML

<TeacherList>

<teacher name="Paweł Fałat" certificates="MCP, MCAD"/>

<teacher name="Kornel Warwas" certificates="MCP, MCAD"/>

<teacher name="Szymon Tegler" certificates="MCP, MCAD"/>

<teacher name="Andrzej Polański" certificates="MCP, MCAD"/>

<teacher name="Tomasz Gancarczyk" certificates="MCP, MCSE"/>

</TeacherList>

Page 12: Aplikacje sieciowe

SqlDataSource

Page 13: Aplikacje sieciowe

SqlDataSource: funkcje operujące na danych

• Select()• Update()• Insert()• Delete()

Wykorzystują przygotowane obiekty typu SqlCommand połączone z kolekcjami parametrów

zapytania:• SelectQuery• InsertQuery• UpdateQuery• DeleteQuery

Page 14: Aplikacje sieciowe

SqlCommand

Page 15: Aplikacje sieciowe

SqlCommand przykład koduusing System.Data;

using System.Data.SqlClient;

public static String GetUserNameForReview(String ReviewID) {

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConfernceDBConnectionString"].ConnectionString);

SqlCommand getUserNameCommand = new SqlCommand();

getUserNameCommand.CommandType = CommandType.Text;//CommandType.StoredProcedure// TableDirect

getUserNameCommand.Parameters.Add("@ReviewID", SqlDbType.NVarChar);

getUserNameCommand.Connection = connection;

getUserNameCommand.Parameters["@ReviewID"].Value = ReviewID;

getUserNameCommand.CommandText = "SELECT aspnet_Users.UserName"

+ " FROM Review INNER JOIN aspnet_Users"

+ " ON Review.ReviewerID = aspnet_Users.UserId"

+ " WHERE (Review.ReviewID = @ReviewID)";

connection.Open();

//getUserNameCommand.ExecuteXmlReader(); ExecuteReader(); ExecuteNonQuery() ;

string UserName = getUserNameCommand.ExecuteScalar().ToString();

connection.Close();

if (UserName == null) return "NullUser";

return UserName;

}

Page 16: Aplikacje sieciowe

DataSet

• Może odzwierciedlić strukturę bazy danych z tabelami i związkami między nimi. Umożliwia wykorzystanie i modyfikację tej struktury

• Typed DataSetNa podstawie definicji tabel tworzy się plik xsd zawierający strukturę obiektów. Na podstawie tego pliku generowana jest klasa(y) wykorzystywane w trakcie tworzenia programu- Wsparcie dla Intelisense- Sprawdzanie składni w trakcie kompilacji

• Untyped DatasetDo dynamicznego ładowania nie zdefiniowanej wstępnie struktury tabel

Page 17: Aplikacje sieciowe

DataSet Designer

Page 18: Aplikacje sieciowe

DataSet Plik xsd<?xml version="1.0" encoding="utf-8"?>

<xs:schema id="UserListDataSet" targetNamespace="http://tempuri.org/UserListDataSet.xsd" xmlns:mstns="http://tempuri.org/UserListDataSet.xsd" xmlns="http://tempuri.org/UserListDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">

<xs:annotation>

<xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource">

<DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource">

<Connections>

<Connection AppSettingsObjectName="Web.config" AppSettingsPropertyName="ConfernceDBConnectionString" ConnectionStringObject="" IsAppSettingsProperty="true" Modifier="Assembly" Name="ConfernceDBConnectionString (Web.config)" ParameterPrefix="@" PropertyReference="AppConfig.System.Configuration.ConfigurationManager.0.ConnectionStrings.ConfernceDBConnectionString.ConnectionString" Provider="System.Data.SqlClient" />

</Connections>

<Tables>

<TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="aspnet_UsersTableAdapter" GeneratorDataComponentClassName="aspnet_UsersTableAdapter" Name="aspnet_Users" UserDataComponentName="aspnet_UsersTableAdapter">

<MainSource>

<DbSource ConnectionRef="ConfernceDBConnectionString (Web.config)" DbObjectName="dbo.aspnet_Users" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="false" UserGetMethodName="GetData" UserSourceName="Fill">

<DeleteCommand>

<DbCommand CommandType="Text" ModifiedByUser="false">

<CommandText>DELETE FROM [dbo].[aspnet_Users] WHERE (([ApplicationId] = @Original_ApplicationId) AND ([LoweredUserName] = @Original_LoweredUserName))</CommandText>

<Parameters>

<Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Guid" Direction="Input" ParameterName="@Original_ApplicationId" Precision="0" ProviderType="UniqueIdentifier" Scale="0" Size="0" SourceColumn="ApplicationId" SourceColumnNullMapping="false" SourceVersion="Original" />

<Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="String" Direction="Input" ParameterName="@Original_LoweredUserName" Precision="0" ProviderType="NVarChar" Scale="0" Size="0" SourceColumn="LoweredUserName" SourceColumnNullMapping="false" SourceVersion="Original" />

</Parameters>

</DbCommand>

</DeleteCommand>

.....

Page 19: Aplikacje sieciowe

DataSet Przykład kodu (źródło: msdn)

// Assumes a valid SqlConnection object named connection. SqlDataAdapter customerAdapter = new SqlDataAdapter( "SELECT CustomerID, CompanyName, Phone FROM Customers", connection); SqlDataAdapter orderAdapter = new SqlDataAdapter( "SELECT OrderID, CustomerID, EmployeeID, OrderAdapter FROM Orders", connection);

// Populate a strongly typed DataSet. connection.Open(); CustomerDataSet customers = new CustomerDataSet(); customerAdapter.Fill(customers, "Customers"); orderAdapter.Fill(customers, "Orders"); connection.Close();

// Add a strongly typed event. customers.Customers.CustomerChanged += new CustomerDataSet.CustomerChangeEventHandler(OnCustomerChanged);

// Add a strongly typed DataRow. CustomerDataSet.Customer newCustomer = customers.Customers.NewCustomeromer(); newCustomer.CustomerID = "NEW01"; newCustomer.CompanyName = "My New Company"; customers.Customers.AddCustomer(newCustomer);

Page 20: Aplikacje sieciowe

LINQ Language-Integrated Query

static void Main() { // The Three Parts of a LINQ Query: // 1. Data source. int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; // 2. Query creation. // numQuery is an IEnumerable<int> var numQuery = from num in numbers where (num % 2) == 0 select num; // 3. Query execution. foreach (int num in numQuery) { Console.Write("{0,1} ", num); } }

Źródło MSDN

Page 21: Aplikacje sieciowe

LINQ to SQL

// Northwnd inherits from System.Data.Linq.DataContext. Northwnd nw = new Northwnd(@"northwnd.mdf");

var companyNameQuery = from cust in nw.Customers where cust.City == "London" select cust.CompanyName;

foreach (var customer in companyNameQuery) { Console.WriteLine(customer); }

Źródło MSDN

Page 22: Aplikacje sieciowe

LINQ to XML

Źródło MSDN

XElement srcTree = new XElement("Root", new XElement("Element1", 1), new XElement("Element2", 2), new XElement("Element3", 3), new XElement("Element4", 4), new XElement("Element5", 5) );

XElement xmlTree = new XElement("Root", new XElement("Child1", 1), new XElement("Child2", 2),

new XElement("Child3", 3), new XElement("Child4", 4), new XElement("Child5", 5) );

xmlTree.Add(new XElement("NewChild", "new content")); xmlTree.Add(

from el in srcTree.Elements() where (int)el > 3 select el );

<Root> <Child1>1</Child1> <Child2>2</Child2> <Child3>3</Child3> <Child4>4</Child4> <Child5>5</Child5> <NewChild>new content</NewChild>

<Element4>4</Element4> <Element5>5</Element5>

</Root>