Capita a volte di dover utilizzare delle funzionalita’ di Windows che non sono accessibili direttamente tramite il .NET framework. In questi casi e’ necessario utilizzare delle chiamate a funzioni contenute in DLL di sistema. Utile e’ il sito http://www.pinvoke.net/ , che ci aiuta a definire la corretta firma i vari metodi delle DLL da inserire nel nostro codice .NET.
Una volta presa la firma delle funzioni che ci interessano, queste chiamate vanno wrappate in modo che sia piu’ semplice utilizzarle.
Su questo sito e’ presente una collection di componenti C# che permette di fare chiamate ad API di Windows direttamente da codice managed, senza stare a scrivere manualmente le firme dei metodi. In pratica e’ sufficiente aggiungere la DLL al proprio progetto .NET ed invocare i metodi esposti da essa. I metodi sono categorizzati in namespace, quindi e’ facile trovare quello che ci serve. Inoltre sono disponibili i sorgenti, cosi’ da poter aggiungere eventuali altre chiamate a API non presenti.
Technorati Tag:
API,
.NET,
pinvoke
Pubblicato il: 9 giugno 2010 0:34; 1 commenti so far.
Tags: Programmazione
Mi e’ capitato in questi giorni di dover fare una query per controllare il numero di record all’interno di due tabelle (ad es. Customers e Orders), ovviamente la mia intenzione era quella di fare tutto con un’unica chiamata.
Un modo per fare questa query potrebbe essere il seguente:
(SELECT COUNT (*) FROM Northwind.dbo.Customers)
UNION ALL
(SELECT COUNT (*) FROM Northwind.dbo.Orders)
Ottenendo il seguente risultato:

Ho avuto quel che volevo su di un’unica colonna. Ma se io volessi entrambi sulla stessa riga ma su due colonne diverse?
Per fare questo si potrebbe utilizzare la seguente query:
SELECT
(SELECT COUNT (*) FROM Northwind.dbo.Customers) AS CustomersCount,
(SELECT COUNT (*) FROM Northwind.dbo.Orders) AS OrdersCount
Questa query ha il seguente risultato:

Cosi’ facendo ho un modo chiaro per identificare il risultato delle 2 tabelle. Purtroppo questa query funziona in SQL Server ma non in Access. C’e’ un modo per scrivere la stessa query in un SQL che vada bene per entrambi?
Ecco la soluzione:
SELECT Sum(Cust) AS CustomersCount, Sum(Ord) AS OrdersCount FROM
(
SELECT COUNT (*) AS Cust, 0 AS Ord FROM Northwind.dbo.Customers
UNION ALL
SELECT 0 AS Cust, COUNT (*) AS Ord FROM Northwind.dbo.Orders
) AS T
Come si puo’ vedere, il risultato e’ identico anche in Access:

Technorati Tag:
SQL,
Programmazione
Pubblicato il: 8 maggio 2010 10:46; 0 commenti so far.
Tags: Programmazione