.NET Corso Base HTML5

This entry is part 1 of 1 in the series .NET Corso base

Descrizione del corso:
Introduzione ad Html5 basata su WebForms
Target: certificazione corso 20480B
Repository delle slide e del codice di esempio:
https://github.com/daitangio/html5
Lingua: Italiano
Tecnologia: Visual Studio 2013 (Trial Supported)
Extra software required: SQL Express

Esempi

Scaricabili da https://github.com/daitangio/cqrs-journey-code

Code Example speciali

  1. Localization API
  2. Documentazione Localization API

Come evitare iniezioni SQL lato DB in SQLServer, Oracle, MySQL

 Come evitare iniezione SQL: lato SQL Server (SP_EXECUTESQL)

In generale va evitato nel modo più assoluto la scrittura di query sql diamiche.

Va evitato cioè  l’uso lato SQL Server di sp_executesql e EXEC

Di seguito mostriamo come trasformare una query “dinamica” in una “statica”

 

CREATE PROCEDURE search_orders @custid   nchar(5)     = NULL,

@shipname nvarchar(40) = NULL AS

DECLARE @sql nvarchar(4000)

SELECT @sql = ' SELECT OrderID, OrderDate, CustomerID, ShipName ' +

' FROM dbo.Orders WHERE 1 = 1 '

IF @custid IS NOT NULL

SELECT @sql = @sql + ' AND CustomerID LIKE ''' + @custid + ''''

IF @shipname IS NOT NULL

SELECT @sql = @sql + ' AND ShipName LIKE ''' + @shipname + ''''

EXEC(@sql)

….

In tale esempio, a fronte di un form con parametri opzionali come custid e shipname, viene erroneamente utilizzata una query dinamica. Il modo corretto di procedere è invece il seguente.

1 Definire la stored procedure come:

 

CREATE PROCEDURE search_orders @custid   nchar(5)     = NULL,

@shipname nvarchar(40) = NULL AS

DECLARE @sql nvarchar(4000)

SELECT OrderID, OrderDate, CustomerID, ShipName
FROM dbo.Orders
WHERE ((@custid  IS NULL) OR (CustomerID like @custid))
AND   ((@shipname IS NULL) OR (ShipName LIKE @shipname))

….

 

2 Far sì che la stored procedure  va chiamata attraverso l’uso dei Parameters descritti nel paragrafo precedente.

 

La query così definita ha i seguenti vantaggi:

  1. E’ molto sicura
  2. E’ facile da mantenere (per esempio per aggiungere/togliere condizioni)
  3. E’ compilata come stored procedure, e quindi il suo piano di esecuzione viene ottimizzato dopo ogni esecuzione (una query passata ad EXEC è interpretata, compilata, ecc ogni volta e molte versioni di SQL Server di norma  non mantengono il piano di esecuzione di una query on the fly)
  4. Poiché le condizioni in OR sono facili da verificare, il database ottimizza automaticamente la query a fronte degli input, evitando le verifiche inutili. Per esempio se sono nulli entrambi gli input, il database effettua una semplice query
    SELECT OrderID, OrderDate, CustomerID, ShipName FROM dbo.Orders
  5. Non dipende da estensioni proprietarie e quindi è più facile da migrare a differenti versioni di SQL Server o di Oracle.
  6. E’ facile da leggere, capire e trascrivere.

 

Per maggiori informazioni

Why your IoC container could be a pain for you, young Padawan

Inversion of Control (IoC) is a very good idea.

But as the clever Joel Spolsky  noted, sometimes you need to be a super-natural hero to use it:


I try not to be judgemental (HAHA!), but I think that people who use IoC containers are (A) very smart and (B) lacking in empathy for people who aren’t as smart as they are. Everything makes perfect sense to them, so they have trouble understanding that many ordinary programmers will find the concepts confusing. It’s the curse of knowledge. The people who understand IoC containers have trouble believing that there are people who don’t understand it.

I have trouble using Spring in at least two projects. On the third, it was a disaster, because a single software-architect-guy keeps passing around the Spring context factory as method parameter, getting beans from it!

Continue reading “Why your IoC container could be a pain for you, young Padawan”

dapper-dot-net – Simple SQL object mapper for SQL Server – Google Project Hosting

 

 Dapper is a single file you can drop in to your project that will extend your IDbConnection interface.
[…]

A key feature of Dapper is performance. The following metrics show how long it takes to execute 500 SELECT statements against a DB and map the data returned to objects.

The performance tests are broken in to 3 lists:

  1. POCO serialization for frameworks that support pulling static typed objects from the DB. Using raw SQL.
  2. Dynamic serialization for frameworks that support returning dynamic lists of objects.
  3. Typical framework usage. Often typical framework usage differs from the optimal usage performance wise. Often it will not involve writing SQL.

via dapper-dot-net – Simple SQL object mapper for SQL Server – Google Project Hosting.

CScharpizzati

This entry is part 13 of 19 in the series Programming Languages

Nei mesi passati ho avuto l’opportunità di lavorare come software architect per un progetto basato su .NET e C#.

Da molti anni non bazzicavo in ambito Microsoft, e quindi è stata una utile palestra. Ho pensato di scrivere questo piccolo manuale per sviluppatori java con la ventura di dover diventare… C#-enabled.

Continue reading “CScharpizzati”