La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

SQL CE 2.0 e SQl 2005 Mobile Roberto Brunetti

Presentazioni simili


Presentazione sul tema: "SQL CE 2.0 e SQl 2005 Mobile Roberto Brunetti"— Transcript della presentazione:

1

2 SQL CE 2.0 e SQl 2005 Mobile Roberto Brunetti Roberto@DevLeap.com
Fabio Santini

3 eVB 3.0 eVC 3.0 VS .NET (VB.NET, C#) ADO.NET OLEDB CE IIS
.NET CF / Managed Stack VS .NET (VB.NET, C#) Native/Unmanaged Stack eVB 3.0 eVC 3.0 ADO.NET Ethernet SQL Server CE Data Provider SQL Server Client Data Provider TDS ADO CE v3.1 Scenario Connesso CLR / .NET CF OLEDB CE OLEDB / Replication API 802.11b, CDPD, GSM, CDMA, TDMA, etc. SQL CE Edition v2.0 Data Provider Client Agent: Replication and RDA IIS Server Agent: Replication and Remote Data Access OLEDB QP/Cursor Engine/ES OLEDB HTTP Storage Engine / Repl Tracking Scenario Disconnessos CLIENT SERVER

4 SQL Server CE Compatibilità con SQL Server Footprint Disponibile
Stesso Resultset Data Type Compatible Footprint ~700kb per CPU X86 Disponibile Windows CE 2.11 e successive Usato nativamente o replicando da SQL

5 Cos’é? OLEDB Provider E’ un database con un DLL wrapper
Non proprio conforme alle specifiche OLEDB E’ un database con un DLL wrapper In CE non esistono i servizi Supporta ADOCE Supporta OLEDB CE API Supporta ADO.NET del .NET CF

6 SQL Server CE v2.0 é supportato
Pocket PC 2000 – 2002 2003 Windows Mobile 5.0 Windows CE 4.2 Non è supportato da SmartPhone 2003 Sql 2005 Mobile Edition e VM 5.0

7 Database Feature 1.x Multi-column indexes Referential integrity
Sub-selects (IN) Default Inner/outer join 32 index per table One file database Null support Unicode support Transaction Data-types Real, Numeric, NVarChar, NText, Image, Integer, DateTime, VarBinary, UniqueIdentifier, Money Having/group by Seek on index Set functions Identity attribute TCO support Local security - DB encryption (128bit) and database password

8 2.0 Features Union Intrinsic Function (CASE, @IDENTITY)
SELECT * FROM A UNION SELECT * FROM B Intrinsic Function Query parametriche INSERT INTO mytable (col1, col2) VALUES (?, ?); Index Pull Recupero indici durante scaricamento con RDA Connectivity Setup Wizards Setup più semplice Optional Error Strings DLL per messaggi errore ISQLW CE piú visuale

9 Amministrazione ISQLW Nativo Remote SQL CE da Desktop ISQLW Commovente
30-day trial 29,99 $ con licenza e supporto

10 Remote SQL CE Generazione di SDF da DB Desktop

11 Integrazione con .NET CF
System.Data.SqlServerCE Espone tutte le funzionalitá SQL CE SqlCEDataReader SqlCEDataAdapter SqlCECommand SqlCEParameter Utilizzo di Try/Catch System.Data.SqlServerCe.SqlCeException Utilizzabile stand-alone Demo Cerca in locale Aggiorna locale

12 SqlCeConnection “Provider=Microsoft.SQLServer.OLEDB.CE.1.0;DataSource=\directory\file.sdf” .Open .Close SQL CE 2.0 non supporta connessioni contemporanee !!!

13 Creazione di .sdf da codice
try { SqlCeEngine sqlEngine = new SqlCeEngine("Data Source=\Pippo.sdf”); sqlEngine.CreateDatabase(); } catch (SqlCeException ex) ShowErrors(ex, "Impossibile creare il db locale"); Campeggi/Inizializza

14 Campeggi/Inizializza
Tabelle di sistema INFORMATION_SCHEMA.TABLES SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='Clienti' Campeggi/Inizializza

15 Sincronizzazione Due metodologie
RDA – Remote Data Access SQL Server 6.5 Service Pack 5 + Merge Replication con SQL 2000 SQL Server puo’ fare da ponte verso altri database Utilizzando i Linked Server L’utilizzo di tabelle locali ha comunque senso per ridurre la banda

16 Connectività verso LAN
Come sempre: Web HTTP Internet e Intranet Sicurezza gestita da IIS Authentication (anonymous, basic, NTLM) Authorization Encryption (SSL) Accesso consentito tramite firewall Ma Compressione per banda ridotta Message-based per meno roundtrip

17 Demo MMC Connectivity Management
Configurazione IIS SSCESA20.DLL e’ l’applicazione (estensione) ISAPI da utilizzare Serve Virtual Directory con permesse Execute SQL Server CE Connectivity Management Configura Virtual Directory Sicurezza IIS Sicurezza ACL sulla cartella Demo IIS Demo MMC Connectivity Management

18 Remote Data Access Se il device è connesso “spesso”
Dove la Merge Replication non è necessaria Dove la Merge Replication è troppo pesante Per avere più controllo da codice Elimina la necessità di un Desktop Accesso a SQL Server 7.0 e 2000 Download to device e disconnessione Tracking anche disconnesso

19 Remote Data Access Download dati clienti e piazzole Disconnessione
Giro delle piazzole per controllo Per “irregolarità” o modifiche Tabella Piazzole Tabella Segnalazioni Connessione Sincronizzazione dei Dati

20 RDA: Metodi Pull Push Submit SQL Porta i dati sul device
Selezione via statement SQL Viste / Stored Procedure / Query SQL Creazione tabelle locali Push Invia le modifiche al server Submit SQL Invio diretto di SQL DML

21 Inizializzazione Dim x = New SqlCeRemoteDataAccess
x.InternetLogin = “” x.InternetPassword = “” x.InternetUrl = “x.com/sqlce/sscesa20.dll” x.LocalConnectionString x.InternetProxyServer

22 Pull Demo con Debug e Profiler Object.Pull ( ) Demo Campeggi
“tabella locale”, “statement sql”, “oledb connection usata lato server”, [RdaTrackOption], [“tabella segnalazione errori”] ) Demo Campeggi Demo con Debug e Profiler

23 OLEDB Connection String
E’ la stringa usata da sscesa20.dll per accedere al database Specificare il tipo di autenticazione verso SQL Standard Specificare Username e Password Integrata Viene usato l’account utilizzato da IIS per far girare sscesa20.dll Se accesso anonimo consentito IUSR_nomemacchina Altrimenti User e Password specificati sull’oggetto SqlCeRemoteDataAccess

24 Tabelle Create Le tabelle vengono create in locale Demo
Vediamo la strutture s_operation Tiene l’operazione effettuata Indice per successivo sort durante il Push s_BinaryKey Chiave primaria Scaricata tramite sp_primary_keys_rowset NON devono esistere Gestione incrementale manuale

25 Push Demo con Debug e Profiler Object.Push ( ) Demo Campeggi
“tabella locale”, “oledb connection usata lato server”, [RdaBatchOption] ) Demo Campeggi Demo con Debug e Profiler

26 BatchingOn SET IMPLICIT_TRANSACTIONS ON declare @P1 int set @P1=1
exec output, varchar(50)', N'INSERT INTO "SEGNALAZIONI"("IdNota", "IdPiazzola", "TipoNota", @P4)', 1, 1, 0, NULL // Lancia tutti i comandi effettuati sulla tabella exec sp_execute 1, 3, 2, 0, 'tutto ok' // Unprepare dei comandi exec sp_unprepare 1 IF > 0 COMMIT TRAN

27 BatchingOff // Dichiarazione dei comandi di INSERT/UPDATE/DELETE
int exec output, int', N'UPDATE "PIAZZOLE" SET "IdPiazzola" "IdCliente" "DataArrivo" "DataPartenza" "Persone" "Tende" WHERE "IdPiazzola" 1, 1, 'Jun :00:00:000AM', 'Jan :00:00:000AM', 4, 2, 1 Lancia tutti i comandi effettuati sulla tabella exec sp_execute 1, 2, 2, 'May :00:00:000AM', 'Jan :00:00:000AM', 1, 1, 2 // Unprepare dei comandi exec sp_unprepare 1

28 SubmitSql Object.SubmitSQL ( ) Demo Campeggi
“statement sql”, “oledb connection usata lato server” ) Demo Campeggi N.B. Non si usa se connessione diretta Utilissimo se connessione Http

29 Gestione Eccezioni SQLCE
Classe SqlCeException Espone collezione Errors For Each err in SqlCeException.Errors err.HResult.ToString(“X”) err.Message err.NativeError err.Source err espone anche NumericErrorParameters Collezione di string Campeggi/ ShowErrors

30 Eccezioni in Push Per ogni conflitto o problema
Viene utilizzata (se specificata) la tabella locale indicata come tabella di errore A fronte di una eccezione si possono analizzare i record Utilizzando ADO.NET direttamente sulla tabella

31 Limiti di RDA Pull crea le tabelle Campi Identity Master Detail
Non è incrementale Campi Identity Master Detail Logica Business su diversi record Facciamo due chiacchere

32 La RAM scarseggia….e l’applicazione non galleggia
Performance La RAM scarseggia….e l’applicazione non galleggia

33 Native VS Managed In assoluto il codice via OLEDBCE è più veloce
Più codice da scrivere Più difficile da manutenere SQLCE SQLMobile

34 In un Post “Gira bene in SQL Server 2000, ma non sotto SQL CE…”
SELECT IMEI, ProductCode, Quantity FROM (SELECT NULL AS IMEI, product AS ProductCode, (physicalqty - allocatedqty) AS Quantity FROM importstock WHERE (NOT mpstype IN(N'U', N'C', N'M', N'X', N'Y', N'P')) AND product IN (SELECT ProductCode FROM (SELECT importstock.product AS ProductCode FROM StockCountSchedule INNER JOIN StockCountProductCategories ON (StockCountSchedule.ID = StockCountProductCategories.ID) INNER JOIN importstock ON (StockCountProductCategories.Product_Type = importstock.product_type) WHERE (StockCountSchedule.IsRecount = 0) AND (StockCountSchedule.ID = ) UNION SELECT ProductCode FROM StockCountSchedule INNER JOIN CrossDevice_ProductsToRecount ON (StockCountSchedule.ID = CrossDevice_ProductsToRecount.StockCountID) WHERE (StockCountSchedule.IsRecount = 1) AND (StockCountSchedule.ID = )) AS StockCountProducts) UNION SELECT IMEI.imei AS IMEI, NULL AS ProductCode, NULL AS Quantity FROM importstock INNER JOIN IMEI ON importstock.product = IMEI.product WHERE (mpstype IN(N'U', N'C', N'M', N'X', N'Y', N'P')) AND importstock.product IN (SELECT ProductCode FROM (SELECT StockCountSchedule.ID AS StockCountID, importstock. product AS ProductCode FROM StockCountSchedule INNER JOIN StockCountProductCategories ON (StockCountSchedule.ID = StockCountProductCategories.ID) INNER JOIN importstock ON (StockCountProductCategories.Product_Type = importstock.product_type) WHERE (StockCountSchedule.IsRecount = 0) UNION SELECT StockCountSchedule.ID AS StockCountID, ProductCode FROM StockCountSchedule INNER JOIN CrossDevice_ProductsToRecount ON (StockCountSchedule.ID = CrossDevice_ProductsToRecount.StockCountID) WHERE (StockCountSchedule.IsRecount = 1)) AS StockCountProducts)) AS StockCountItems “Gira bene in SQL Server 2000, ma non sotto SQL CE…”

35 General Performance Tips
Limitare record e colonne nelle SELECT Fare poche Open/Close Meglio lasciare aperta una connessione Occhio al numero di oggetti in menoria SqlCeDataReader.Close/Dispose Classi riusabili di accesso ai dati Scriversele Data Access Application Block OpenNETCF 1.3 Meglio Comprende anche Cache dei parametri SQLCE SQLMobile

36 DAAB Architecture Versione ridotta dell’analogo per Desktop

37 Non usare SqlCeCommandBuilder
SqlCeConnection connection = GetConnection(); DataSet ds = new DataSet(); string sql = “…"; SqlCeHelper.FillDataset(connection, sql, ds, new string[] { “Prodotti" } ); DataTable table = ds.Tables["Products"]; DataRow addedRow = table.Rows.Add(new object[] { DBNull.Value, “Nuovo", DBNull.Value, 10 } ); table.Rows[0]["ProductName"] = “Prod Modificato"; SqlCeCommand insertCmd = SqlCeHelper.CreateCommand(connection, "INSERT INTO Products (ProductName, UnitPrice) VALUES(?, ?)", "ProductName:String", "UnitPrice:Currency"); SqlCeCommand updateCmd = SqlCeHelper.CreateCommand(connection, "UPDATE Products SET ProductName = ? WHERE ProductID = ?", "ProductName:String", "ProductID:Int32" ); SqlCeCommand deleteCmd = SqlCeHelper.CreateCommand(connection, "DELETE Products WHERE ProductID = ?", "ProductID:Int32" ); SqlCeHelper.UpdateDataset(insertCmd, deleteCmd, updateCmd, ds, “Prodotti");

38 Performance Big-hitters
Base Table Cursors Parameterized Queries DataReader versus DataSet SqlCeResultSet versus DataSet Indici

39 SqlMobile/SqlCEResultSet/CaricaDatiClienti
Base Table Cursor Bypassano il Query Processor Tutte le colonne per ogni riga recuperata Massimo delle performance per leggere tutte le colonne SqlCeCommand cmd = new SqlCeCommand(); cmd.CommandText = "Orders"; cmd.CommandType = CommandType.TableDirect; SqlMobile/SqlCEResultSet/CaricaDatiClienti SQLCE SQLMobile

40 Seek/SetRange – Basic Utilizzabile per aprire l’indice
Massimo delle performance per Range Massimo delle performance per singolo record cmd.CommandType = CommandType.TableDirect; cmd.CommandText = "Orders"; //Assunzione: L’indice contiene una sola colonna [datetime] cmd.IndexName = "SomeIndex";// Lettura tradizionale

41 Use Queries? SELECT "Customer ID" FROM Orders WHERE "Order ID" = VS Base Table

42 Parameterized Queries
Compilate “once” e eseguite molte volte Usare lo stesso object SqlCeCommand che cacha i “compiled plan” Sql 2005 Mobile anche Named Parameter cmd.CommandText = “UPDATE myTable set col1=? where col2=?"; // Evitare SqlCeParameter(string, object) constructor cmd.Parameters.Add("p1", SqlDbType.Decimal); cmd.Parameters.Add("p2", SqlDbType.SmallInt); cmd.Prepare(); // Eseguire più volte … Multithreading20/UiUpdate/FaiQualcosa SQLCE SQLMobile

43 Parameterized Queries

44 Data Reader VS Data Set Dove possibile usare il DataReader
Più veloce del DataSet, soprattutto con result sets grandi (5x in alcuni casi) Accesso diretto a SQL Server CE Nessun doppio buffering Contro Non bindable ai controlli No scrollin, no update DataReader non usabile per remotizzare Web Service / MSMQ …etc SQLCE SQLMobile

45 Performance: Simple Usare Typed Access Usare campi posizionali !!! 
GetString / GetInt… Usare campi posizionali !!!  X = dr.GetOrdinal(“nome”) Y = dr.GetOrdinal(“cognome”) Ciclo dr.GetString(x) dr.GetString(y) Fine Ciclo

46 Data Reader – Optimal Usage
Usare accesso Strongly-typed Usare parametri posizionali Usare CLR Type al posto di SqlType Per leggere un’intera riga usare GetValues() al posto di GetXXX molte volte object[] row = new object[rdr.FieldCount]; while (rdr.Read()) { // Meno function call // processare l’array

47 Encryption…paura ? 160K rows UPDATE Table Set NonIndexCol = ‘Roberto’
SELECT DateDataType FROM Table Qtek 2020 XScale PXA250 (400mhz) 190 188 347 335 50 100 150 200 250 300 350 Time in Seconds SELECT UPDATE Encryption vs No Encryption Encyrpted No Encryption

48 Performance Storage Media?
Chi lo sa ?!?! RAM, SD, CF, IPSM (NOR), Toshiba NAND SD più veloci di MMC 142 155 144 209 314 348 100 200 300 400 Time In Seconds SELECT UPDATE Various storage medias RAM SD IPSM

49 Altre cosette SET RUN_MUCH_FASTER = “true”  Database Compact
Corregge eventuali “corruzioni” Tabelle contigue Se indice PK/Unique ordinate per indice Update delle statistiche QP Statistic Servono per la valutazione dei “costi” Modificare la location del tempdb per transazioni “grandi” Il QP di SQL CE QP non fa distinzioni fra RAM e Flash SQLCE

50 Sql 2005 Mobile

51 SQL 2005 Mobile VS .NET (VB.NET, C#) IIS eDB – sqlcese30.dll (300KB)
XML/BizTalk/CS 2002/DTS System.Data.SqlClient (160KB) System.Data.SqlServerCe (140KB) System.Data.Common (124KB) Managed SQL CE + eDB Apps TDS sqlceoledb30.dll (200KB) OLE DB OLEDB / Replication sqlceca30.dll (360KB) sqlcesa30.dll (150KB) sqlcerp30.dll (100KB) sqlceqp30.dll (800KB) IIS Server Agent: Replication and Remote Data Access Replication and RDA Internal QP API QP HTTP eDB – sqlcese30.dll (300KB) eDB API Internal SE API Storage Engine CLIENT SERVER

52 SQL Mobile Platforms PocketPC 2003, Phone Edition Smart Phone 5.0
Windows CE.NET 5.0 TabletPC Visual Studio 2005 (Development)

53 SQL Server CE Necessità Nuove funzionalità
Integrazione con SQL Server 2005 Amministrazione DTS Integrazione con Visual Studio 2005 e .NET CF v2.0 Desktop Development e Deployment Nuove funzionalità Performance (anche se già buone) Più connessioni contemporanee SmartPhone e TabletPC Upgrade Tool per SDF 2.0

54 Storage Engine Riscritto totalmente Multi-User support Stabilità
Row level locking data Page level locking index Lock Escalation Stabilità ACID Transaction Auto re-use di pagine vuote Non necessario Compact

55 Query Processor Cost-Based Optimization Execution Plan e Query Hints
QP usa piani Cost-based QP usa le statistiche dello storage engine Execution Plan e Query Hints Come in SQL 2000: Analisi e correzione query SqlCeResultSet Accesso via Scrolling Accesso Random Update Parametri Named

56 SQL Server 2005 Management Studio
Connessione a SQL Server o SQL Mobile Funzionalità identiche Object Explorer Query Editor Management Dialog Connessione a DB Sul desktop o direttamente sul Device Query Plan e Hint Subscription Wizard Supporto SSIS (ex DTS) Creare SQL Mobile DB

57 Demo SQL 2005 SqlMobile/TestDB Registered Server di tipo Sql Mobile
Su DeskTop (SqlMobile\TestDB\Test.sdf) Su Device (Browse...) Connect -> Object Browser New Table / Column / Index Views – Programmability (Type) Replication Subscription per Merge Repl Connect -> New Query SqlMobile\TestDB\QueryPlan.sqlce

58 VS 2005 Create SDF

59 VS 2005 Create Table

60 Connessione a SDF su Device

61 Demo VS 2005 SqlMobile/TestVS Server Explorer
Connect to Database Connessione a SDF su Device/Emulatore/Desktop Gestione Schema (Create Table/Modify) Visualizzazione (New Query) / Edit dei dati SDF nel progetto (anche Add New Item) Tipologia Content Creazione Typed DS automatico (Vedere) Diventa un Project Data Source Drag and Drop Controllo Binding Source Drag Tabelle o Colonne sul form per creare controlli Bound SmartTasks per Master / Details Typed ResultSet class baked into generated code DataSource Window per legare un SDF al progetto

62 List View Summary View Edit View BindingSource Typed DataSet
Web Service Remoto Typed DataSet SqlMobile Database

63 Binding The Data To The UI

64 Occhio !!!! Con Drag & Drop diretto Creiamo un DataSet
Che fa double buffering Montiamo l’insfrattura di binding BindingContext[source].Position ++ Non possiamo fare operazioni in Background Sono 5 righe di codice per fare molto molto meglio a mano Se siamo programmatori SCRIVIAMOLE

65 SqlCeResultSet Connessione diretta ai dati Scrolling Update
DataBinding Simile al DataSet come funzionalità Veloce quasi come il DataReader Accesso diretto Nessun double-buffer

66 SqlCeResultSet Deriva daSqlCeDataReader
Strongly Typed GetInt32(), GetString() SetInt32(), SetString() Espone Read per forward Codice identico al Reader Creabile da cmd.ExecuteResultSet()

67 SqlCeResultSet private SqlCeResultSet resultSet = null;
private ResultSetView view1 = null; /// private void _bindData() { ... command.CommandText = “SELECT * FROM Orders”; ResultSetOptions options = ResultSetOptions.Scrollable | ResultSetOptions.Updatable; this.resultSet = command.ExecuteResultSet(options); this.view1 = this.resultSet.ResultSetView; int[] ordinals = new int[] { 1,3,5,8 }; this.view1.Ordinals = ordinals; this.dataGrid.DataSource = view1;

68 ResultSetOptions Combinabili con | None Scrollable Updatable
Insensitive Non intercetta le modifiche al DataSource Sensitive Intercetta le modifiche al DataSource Usare sempre il più leggero possibile

69 SqlCeResultSet.Update()
SqlCeResultSet rs = commmand.ExecuteResultSet(ResultSetOptions.Updatable); int idxProductId = rs.GetOrdinal("ProductId"); int idxDesc = rs.GetOrdinal("Desc"); int idxUnitPrice = rs.GetOrdinal("UnitPrice"); while (rs.Read()) { // Retrieve current values string productId = rs.GetString(idxProductId); string desc = rs.GetString(idxDesc); double unitPrice = rs.GetDouble(idxUnitPrice); // Prepend Product ID to the description rs.SetString(idxDesc, productId + " - " + desc); // Increase the price by 10% rs.SetDouble(idxUnitPrice, unitPrice * 1.1); // Apply record changes to db rs.Update(); }

70 SqlCeResultSet ResultSetOptions.Scrollable ReadFirst, ReadLast
Read, ReadPrevious ReadAbsolute ReadRelative

71 SqlCeResultSet SqlCeResultSet rs =
commmand.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable ); // Read entire result backwards rs.ReadLast(); while(rs.ReadPrevious(); { // ... } // Absolute positioning rs.ReadAbsolute(10); // Read 10 records from beginning rs.ReadAbsolute(-10); // Read 10 records from end // Relative positioning rs.ReadRelative(5); // Read forward 5 records rs.ReadRelative(-5); // Read backward 5 records

72 SqlCeResultSet Binding
Qualunque ResultSetOptions Ma includere ResultSetOptions.Scrollable Bind verso ResultSetView Esposta come proprietà Stesse interfacce del DataView ITypedList, IBindingList, IList, ICollection, IEnumerable, IDisposable Utilizzabile con qualunque controllo “bindable” listBox1.DataSource = rs.ResultSetView; listBox1.DisplayMember = "Desc"; listBox1.ValueMember = "ProductId"; textBox1.DataBindings.Add("Text", rs, "UnitPrice"); SqlMobile/SqlCeResultSet

73 SQL 2005 Replica Molto automatizzato Demo

74 © 2004 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY. Content created by 3 Leaf Solutions


Scaricare ppt "SQL CE 2.0 e SQl 2005 Mobile Roberto Brunetti"

Presentazioni simili


Annunci Google