mai 2008 - Messages
Et voilà, le MSDN Tour est de passage à Marseille, et BEWISE est présent !
Les Sessions ont bien commencé, certaines salles sont déjà bien pleine, c'est bon signe :)
J'ai quelques photos, prises ce matin par Laurent Galmiche, responsable de l'agence BEWISE à Aix en Provence :
Photo 1 : Le calme de l'accueil avant la tempête
Photo 2 : La tempête débarque 
Photo 3 : Le stand BEWISE, où nous nous retrouvons entre les sessions (notez la touch-classe from Vertice)
Photo 4 : Préparation d'une session
Photo 5 : Un session DEV en cours

Avec l'arrivée du Framework 3.5 SP1 béta, de nouvelles classes ont fait leur apparition.
Notamment un ensemble de classes pour gérer le nouveau type SQL SERVER 2008 : FILESTREAM.
Lors de mes différentes présentations sur le sujet, j'ai toujours du utiliser une classe encapsulant un appel à une dll C, que je ne présentais pas d'ailleurs :) en expliquant que "bientôt" nous aurions droit à de vrais classes managed pour gérer tout ça
Et bien, c'est le cas; le framework (3.5 SP1 béta) est là !
Maintenant, tout devient (relativement) simple 
D'abord le script de création d'une table contenant un type FILESTREAM :
-- 1. Enable FILESTREAM support
EXEC [sp_filestream_configure] @enable_level = 3;
-- 2. Create a database with a File Group that contains FILESTREAM
CREATE DATABASE FileManagement
ON
PRIMARY (
NAME = FileManagement_Primary,
FILENAME = 'c:\temp\data\FileManagement.mdf'),
FILEGROUP FileStreamGroup CONTAINS FILESTREAM (
NAME = FileManagement_FileGroup,
FILENAME = 'c:\temp\data\FileManagement')
LOG ON ( NAME = FileManagement_Log,
FILENAME = 'c:\temp\data\FileManagementLog.ldf')
GO
-- 3. Create a Table with FILESTREAM
CREATE TABLE [dbo].[Files]
(
FileID uniqueidentifier NOT NULL ROWGUIDCOL PRIMARY KEY,
FileContents varbinary(max) FILESTREAM DEFAULT(0x)
)
GO
En préambule, on crée une transaction (BIENSUR !)
SqlTransaction tx = conn.BeginTransaction();
J'insère dans ma table, contenant un filestream, une ligne (tout ça pour récupérer un contexte de transaction par la suite)
SqlCommand insertFileCommand = conn.CreateCommand();
insertFileCommand.Transaction = tx;
insertFileCommand.CommandText = "INSERT INTO Files (FileID) VALUES (@FileID)";
Guid newFileID = Guid.NewGuid();
insertFileCommand.Parameters.Add("@FileID", SqlDbType.UniqueIdentifier).Value = newFileID;
insertFileCommand.ExecuteNonQuery();
Je récupère le contexte de transaction :
SqlCommand getPathAndTokenCommand = conn.CreateCommand();
getPathAndTokenCommand.Transaction = tx;
getPathAndTokenCommand.CommandText = "SELECT FileContents.PathName(), GET_FILESTREAM_TRANSACTION_CONTEXT() FROM Files WHERE FileID = @FileID";
getPathAndTokenCommand.Parameters.Add("@FileID", SqlDbType.UniqueIdentifier).Value = newFileID;
SqlDataReader tokenReader = getPathAndTokenCommand.ExecuteReader(CommandBehavior.SingleRow);
tokenReader.Read();
SqlString filePathName = tokenReader.GetSqlString(0);
SqlBinary fileToken = tokenReader.GetSqlBinary(1);
tokenReader.Close();
Et maintenant j'utilise ce fameux nouveau type, comme un simple type FileStream (j'ouvre un flux, et j'écris dedans !)
FileStream inputFile = File.OpenRead("TextFile1.txt");
SqlFileStream sqlFile = new SqlFileStream(filePathName.Value, fileToken.Value, System.IO.FileAccess.Write);
byte[] buffer = new byte[512 * 1024]; // 512Kb
int bytesRead = inputFile.Read(buffer, 0, buffer.Length);
while (bytesRead > 0)
{
sqlFile.Write(buffer, 0, bytesRead);
bytesRead = inputFile.Read(buffer, 0, buffer.Length);
}
J'oublie pas de tout fermer hein ;)
sqlFile.Close();
inputFile.Close();
tx.Commit();
conn.Close();
Et voilà !
Bon FILESTREAM ! 
Un article très bien écrit par mon collègue Djeepy sur la Géolocalisation dans SQL SERVER 2008
Premiers pas dans l’espace
Pour vous mettre en appétit :


Bonne lecture !
Je viens d'installer le SP1 du Framework 3.5 ainsi que le SP1 de Visual Studio 2008.
Il est clair qu'il y a beaucoup de nouveautés trés excitantes dans le SP1.
Support de l'intellisense poussé de Javascript, Support d'Entity Framework, Astoria, AJAX History, amélioration des perfs de Visual Studio 2008 etc ...
Mais aussi plus proche de SQL Server 2008, le support de celui dans Visual Studio 2008 (ENFIN !!)
Et bien sachez que je viens de découvrir une nouveauté peu relayée du SP1.
Une mise à jour du Designer de Sync Services qui supporte non seulement SQL Server 2008, mais aussi une des features de celui ci : Le Change Tracking !
Notez le petite case à cocher : "User Sql Server Change Tracking"
J'avais déjà auparavant fais du change tracking avec SQL Server 2008 et Sync Services (cf ma démo au Tech Days 2008) mais l'avoir intégré nativement dans le designer, je trouve ça juste ... cool !
Bon là il est un peu tard, mais promis je vais fous faire un petit article sur le Change Tracking et Sync Services, qui sont "ON NE PEUT PLUS" complémentaire l'un et l'autre !
Restez à l'écoute, je me sens d'humeur inspirée !!!
Bonjour à tous,
| Je viens de découvrir un tool absolument "Must Have" pour tout bon développeur qui se respecte : LinqPad Cet utilitaire est grosso-modo un Notepad Pour Linq. |
J'adore !
Vous lancez et vous faites du LINQ :
J'ai trouvé tout de suite, un cas d'utilisation direct de cet outil.
Je veux faire du Linq To Sql dans une base de donnée, vite fait pour voir le contenu de la table Client.
Et bien avec LinqPad, pas besoin de créer un projet VS.Net, de créer un DataContext, une classe console, ou une winforms, blah blah blah ...
Je lance juste LinqPad, je me connecte à ma base de donnée (si ça n'a pas été déjà fait dans une session antérieure) et j'interroge directement ma table client... en LINQ !
En plus vous trouverez plein d'exemples, que ce soit LINQ simple ou LINQ to SQL ou encore LINQ To XML.
Enormissime !