• Nenhum resultado encontrado

Computação Móvel. Nuno Flores, Departamento de Engenharia Informática Faculdade de Engenharia da Universidade do Porto

N/A
N/A
Protected

Academic year: 2021

Share "Computação Móvel. Nuno Flores, Departamento de Engenharia Informática Faculdade de Engenharia da Universidade do Porto"

Copied!
6
0
0

Texto

(1)

Universidado Portucalense

Mestrado em Informática

Nuno Flores,

Departamento de Engenharia Informática Faculdade de Engenharia da Universidade do Porto

Computação Móvel

Aplicação DataAdapter Fill( ) DBMS DBMS Dataset - Connection - Command (SQL) - CommandBuilder Update( ) 3 3 Visualização Databind( ) Sql… (SQLServer) Oracle… (Oracle)

OleDb… (BD’s com drivers OLEDB) Odbc… (BD’s com drivers ODBC)

CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

string connstr = “server=some; database=pubs; uid=sa; pwd=“; string command = “select * from titles”;

SqlConnection conn = new SqlConnection(connstr); SqlCommand comm = new SqlCommand(command, conn); SqlDataAdapter adapter = new SqlDataAdapter(comm); DataSet ds = new DataSet();

Ligação e configuração DataSet ds = new DataSet();

adapter.Fill(ds, “Titles”); list.DataSource = ds; list.DataMember = “Titles”; list.DataTextField = “title”; list.DataValueField = “price”; list.DataBind( ); Session[“MyDataSet”] = ds;

DataTable table = ds.Tables[“Titles”]; DataTable table = ds.Tables[“Titles”]; Modificação

Manipulação de um DataSet

4 4

DataTable table = ds.Tables[“Titles”]; DataRow row = table.NewRow( ); row[“title”] = “ADO.NET”; row[“price”] = 49.99; table.Rows.Add(row);

DataTable table = ds.Tables[“Titles”]; DataRow[ ] rows = table.Select(“price > 100.0”); foreach (DataRow row in rows)

row[“price”] = (decimal) row[“price”] – 5.00; DataTable table = ds.Tables[“Titles”];

DataRow[ ] rows = table.Select(“pubdate < ‘#1/1/1990’ ”); foreach (DataRow row in rows)

row.Delete( ); Novas linhas

Eliminação

CMOV

(2)

DataAdapter tem 4 propriedades que representam comandos SQL:

SelectCommand, InsertCommand, UpdateCommand, DeleteCommand

Insert, Update e Delete podem ser gerados a partir de SelectCommand usando um

CommandBuilder.

SqlDataAdapter adapter = new SqlDataAdapter( … );

SqlCommandBuilder builder = new SqlCommandBuilder( adapter );

adapter.Update(table);

Se houver necessidade de garantir alguma ordem (por exemplo fazer os DELETE’s

5 5 Se houver necessidade de garantir alguma ordem (por exemplo fazer os DELETE’s

antes dos INSERT’s):

DataTable deletes = table.GetChanges(DataRowState.Deleted); adapter.Update(deletes);

DataTable inserts = table.GetChanges(DataRowState.Added); adapter.Update(inserts);

DataTable updates = table.GetChanges(DataRowState.Modified); adapter.Update(updates);

CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

Dataset Ficheiro XML ReadXML( … ); WriteXML( … ); 6 6 Dataset Ficheiro XML CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

Todos os acessos a BDs necessitam de uma ligação e de um comando (SQL). O padrão usual de acesso envolve 5 passos:

• Criação de 1 objecto ligação representando uma BD através de uma connection string • Criação de 1 objecto ligação representando uma BD através de uma connection string • Criação de 1 objecto comando representando uma instrução SQL e associação a uma ligação • Abertura da ligação através do método Open( )

• Chamada de um método do objecto comando de modo a executá-lo na BD • Fecho da ligação através do seu método Close( )

Por exemplo (commando de leitura – select):

SqlConnection conn = new SqlConnection(“server=some; database=pubs; uid=sa; pwd=“); try {

conn.Open();

SqlCommand cmd = new SqlCommand(“select * from titles”, conn); SqlDataReader reader = cmd.ExecuteReader( );

7 7

SqlDataReader reader = cmd.ExecuteReader( ); while (reader.Read( ) )

Console.WriteLine(reader[“title”]); }

catch (SqlException ex) { Console.WriteLine(ex.Message); } finally { conn.Close(); } CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

Leitura de comandos que só retornam um valor

SqlCommand cmd = new SqlCommand(“select max(advance) from titles”, conn); SqlCommand cmd = new SqlCommand(“select max(advance) from titles”, conn); decimal amount = (decimal) cmd.ExecuteScalar();

Outro:

MemoryStream stream = new MemoryStream();

SqlCommand cmd = new SqlCommand(“select logo from pub_info where pub_id=‘0736’ ”, conn); byte[ ] blob = (byte[ ]) cmd.ExecuteScalar();

stream.Write(blob, 0, blob.Length()); Bitmap bitmap = new Bitmap (stream);

8 8

Bitmap bitmap = new Bitmap (stream); bitmap.Dispose(); finally { conn.Close(); stream.Close(); } CMOV

(3)

Comandos que não retornam informação (inserts, updates, deletes e outros)

SqlCommand cmd = new SqlCommand(“update titles set title_id=‘JP2002’ ” + “where title_id = ‘JP1001’ “, conn); cmd.ExecuteNonQuery();

SqlCommand cmd = new SqlCommand(“delete from titles where” + “title_id = ‘JP2002’ “, conn); cmd.ExecuteNonQuery(); 9 9 CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

Fazer uma transferência de uma conta para outra numa BD de um banco

SqlTransaction trans = null;

SqlConnection conn = new SqlConnection( . . . ); try {

try {

conn.Open();

trans = conn.BeginTransaction(IsolationLevel.Serializable); SqlCommand cmd = new SqlCommand( );

cmd.Connection = conn; cmd.Transaction = trans;

cmd.CommandText = “update accounts set balance = balance – 1000 where account_id=‘1111’ “; cmd.ExecuteNonQuery();

cmd.CommandText = “update accounts set balance = balance + 1000 where account_id=‘2222’ “; cmd.ExecuteNonQuery(); 10 10 trans.Commit( ); } catch (SqlException) { if (trans != null) trans.Rollback(); } finally { conn.Close();

} CMOV CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

A mesma operação de há pouco, mas com parâmetros:

SqlTransaction trans = null;

SqlConnection conn = new SqlConnection( . . . ); try {

conn.Open();

trans = conn.BeginTransaction(IsolationLevel.Serializable);

SqlCommand cmd = new SqlCommand(“update accounts set balance = balance + @amount “ + SqlCommand cmd = new SqlCommand(“update accounts set balance = balance + @amount “ +

“where account_id = @id”, conn); cmd.Parameters.Add(“@amount”, SqlDbType.Money); cmd.Parameters.Add(“@id”, SqlDbType.Char); cmd.Transaction = trans; cmd.Parameters[“@amount”].Value = -1000; cmd.Parameters[“@id”].Value = “1111”; cmd.ExecuteNonQuery(); cmd.Parameters[“@amount”].Value = 1000; cmd.Parameters[“@id”].Value = “2222”; 11 11 cmd.Parameters[“@id”].Value = “2222”; cmd.ExecuteNonQuery(); trans.Commit( ); } catch (SqlException) { if (trans != null) trans.Rollback(); } finally { conn.Close();

} CMOV CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

CREATE PROCEDURE proc_TransferFunds @Amount money, @From char(10), @To char(10) @To char(10) AS BEGIN TRANSACTION

UPDATE Accounts SET Balance = Balance - @Amount WHERE Account_ID = @From

IF @@ROWCOUNT = 0 BEGIN

ROLLBACK TRANSACTION RETURN

END

UPDATE Accounts SET Balance = Balance + @Amount WHERE Account_ID = @To

IF @@ROWCOUNT = 0 BEGIN

SqlConnection conn = new SqlConnection(…); try {

conn.Open();

SqlCommand cmd = new SqlCommand(“proc_TransferFunds”, conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(“@amount”, 1000); cmd.Parameters.Add(“@from”, “1111”); cmd.Parameters.Add(“@to”, “2222”); 12 12 BEGIN ROLLBACK TRANSACTION RETURN END COMMIT TRANSACTION GO cmd.Parameters.Add(“@to”, “2222”); cmd.ExecuteNonQuery( ); }

catch (SqlException ex) { Console.WriteLine(ex.Message); } finally { conn.Close(); } CMOV

(4)

DataSet Sql … Oracle … OleDb … Odbc … …DataAdapter

…Connection …Command…Command …CommandBuilder …DataReader DB 13 13 …Connection …Transaction …Command …Command …Parameter …Parameter …Exception …Error Data Provider CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

Computação Móvel

Permite a utilização de um modelo de arquitectura Smart Device Application

ADO.NET SQL Server CE client agent SQL Server CE RDA Merge replication modelo de arquitectura “mostly disconnected” opcional ADO.NET SqlServerCe .NET CF 15 15 SQL Server CE engine Database file (.sdf) Pocket PC Enterprise DB (SQL Server)

Classes extra em ADO.NET: SqlCeEngine

SqlCeReplication SqlCeRemoteDataAccess CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

Tipos de dados:

booleanos - bit

inteiros – tinyint, smallint, int, bigint

SQL Data Manipulation Statements: SELECT

inteiros – tinyint, smallint, int, bigint

numéricos – real, numeric, float

binários – binary, varbinary, image

unicode – nchar, nvarchar, ntext

outros – money, datetime, uniqueidentifier

Outras características:até 4 GBTransações internasCursors SELECT INSERT UPDATE DELETE

SQL Data Definition Statements: CREATE DATABASE CREATE TABLE CREATE INDEX ALTER TABLE 16 16Cursors

Segurança – encriptação e password

Índices, constraints (id, unique, pk, fk), defaults

ALTER TABLE DROP TABLE DROP INDEX Muitas funções e operadores:

@@IDENTITY RAND

trigonométricas PATINDEX datas e horas SQRT, EXP, LOG stringsCMOV CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPoutros FEUP

(5)

if (!File.Exists(@”\My Documents\db.sdf”)) {

string constr = @”Data Source=\My Documents\db.sdf”;

string cmd1 = “CREATE TABLE Persons(Pid int not null primary key identity(1, 1),” + “ Name nvarchar(100) not null)”;

string cmd2 = “CREATE TABLE Sells(Sid int not null primary key identity(1, 1),” + “ Pid int references Persons(Pid), “ +

“ Pid int references Persons(Pid), “ + “ Price money not null, “ +

“ Descr nvarchar(100) not null)”; SqlCeEngine eng = new SqlCeEngine(constr); eng.CreateDatabase();

SqlCeConnection conn = new SqlCeConnection(constr); try {

conn.Open();

SqlCeCommand cmd = new SqlCeCommand(cmd1, conn); cmd.ExecuteNonQuery(); cmd.CommandText = cmd2; 17 17 cmd.CommandText = cmd2; cmd.ExecuteNonQuery(); }

catch (SqlCeException ex) { …. } finally { conn.Close(); } CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

.NET CF 2.0 .NET CF 2.0

SQL Server CE 3.5 (SQL Server 2005 Mobile) Query Analyzer 3.5

Bases de dados: ficheiros *.sdf

Podem ser criadas em Visual Studio 2008

18 18 e com as ferramentas do SQL Server 2005

(SQL Server Management Studio)

CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

.NET CF Application SQL CE Server Agent SQL Server OLE DB Provider Internet HTTP SqlCeRemoteDataAccess SQL CE Client Agent O L E D B OLE DB 19 19 SQL Server Database Internet Information Server (IIS) Database SQL CE Engine O L E D B CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

public void RDAPull(){

SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess();

string ServerOledbStr =

“Provider=sqloledb; Data Source=dataserver;”+ Initial Catalog=Pubs;User Id=sa;Password=;”;

rda.LocalConnectionString =

@”Data Source=\My Documents\test.sdf”; rda.InternetURL = @“http://www.dataserver.com/sqlce/sscesa20.dll”; rda.InternetLogin = “MyDomain\someuser”; rda.InternetPassword = “HaRd2GuEsS!$*”; 20 20 rda.Pull( “Authors”,

“Select * from authors where state = ‘CA’”, ServerOledbStr, RdaTrackOption.TrackingOn); } query local table tracking behavior CMOV

(6)

public void RDAPush(){

SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess(); SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess();

string ServerOledbStr =

“Provider=sqloledb; Data Source=dataserver;”+ Initial Catalog=Pubs;User Id=sa;Password=;”;

rda.LocalConnectionString =

@”Data Source=\My Documents\test.sdf”; // set URL and IIS login/password

21 21 rda.Push( “Authors”, ServerOledbStr, RdaBatchOption.BatchingOn); } local table update as a single transaction CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP

public void UseRDA(){ public void UseRDA(){

SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess();

rda.InternetURL =

@“http://www.dataserver.com/sqlce/sscesa20.dll”; rda.InternetLogin = “MyDomain\someuser”;

rda.InternetPassword = “HaRd2GuEsS!$*”;

rda.SubmitSql(“Delete from authors where state <> ‘CA’”, “Provider=sqloledb; Data Source=dataserver;”+ Initial Catalog=Pubs;User Id=sa;Password=;”); }

command to run on server

CMOV

CMOV -- MIEIC MIEIC -- 2008/2009 2008/2009 -- Nuno Flores Nuno Flores -- FEUPFEUP 2222

}

Publisher

Publisher

Publisher

Distributor

Distributor

Subscriber

Subscriber

Publisher

Distributor

Distributor

Subscriber

Subscriber

Distribution

Database

Distribution

Database

Snapshot Agent

Snapshot Agent

Merge Agent

Merge Agent

Publication

Database

Publication

Database

Subscription

Database

Subscription

Database

23 23

Distribution

Working Folder

Distribution

Working Folder

CMOV

Referências

Documentos relacionados

Este tipo de implante em forma de lâmina era indicado para ser utilizado unido a dentes ou implantes. Após o preparo de um leito ósseo (canaleta) com uma caneta de

Este trabalho apresentou informações importantes sobre os bioindicadores tanto do meio epígeo quanto do meio hipógeo, demonstrando também a importância da

No presente trabalho é relatada a ocorrência de uma nova espécie de Corazuphium no Brasil, encontrada na Gruta do Gonçalo, no município de Campo Formoso, Bahia.. A nova espécie

No presente trabalho é relatada a ocorrência da terceira espécie troglóbia de Palpigradi do Brasil, encontrada na Gruta da Morena, no município de Cordisburgo, Minas Gerais.. Esta

Como objetivos específicos pretendeu-se iden- tificar os taxa existentes nesta gruta, determinar a riqueza de es- pécies de sua comunidade; verificar a influência de fatores

A estabilidade do corpo docente permanente permite atribuir o conceito muito bom, segundo os parâmetros da área, para o item 2.2 (pelo menos 75% dos docentes permanentes foram

29. Na especificação da receita e da despesa é utilizada a tabela de Medidas que consta do Anexo IV. O Orçamento inscrito em projetos e atividades abrange as despesas

Para Piaget, a forma de raciocinar e de aprender da criança passa por estágios. Por volta dos dois anos, ela evolui do estágio sensório motor, em que a ação envolve os