Barre horizontale de naviagtion

lundi 20 décembre 2010

Application Data

les informations sur les applications sont sauvegardé dans ce répertoire
Windows XP
C:\Documents and Settings\Administrateur\Application Data

windows 7:

C:\Users\Taoufik Rais\AppData\Local\

vendredi 17 décembre 2010

Comment faire pour configurer SQL Server 2005 afin de permettre les connexions à distance

Lorsque vous essayez de vous connecter à une instance de Microsoft SQL Server 2005 à partir d'un ordinateur distant, un message d'erreur peut s'afficher. Ce problème peut se produire lorsque vous utilisez un programme pour vous connecter à SQL Server. Par exemple, le message d'erreur suivant s'affiche lorsque vous utilisez l'utilitaire SQLCMD pour vous connecter à SQL Server :
Sqlcmd : Erreur : Microsoft SQL Native Client : 0800108001Une erreur s'est produite lors de l'établissement d'une connexion au serveur. Lors de la connexion à SQL Server 2005, cet échec peut être dû au fait que les paramètres par défaut de SQL Server n'autorisent pas les connexions à distance.
Ce problème peut se produire lorsque SQL Server 2005 n'est pas configuré pour accepter les connexions à distance. Par défaut, SQL Server 2005 Express Edition et SQL Server 2005 Developer Edition n'autorisent pas les connexions à distance. Pour configurer SQL Server 2005 afin d'autoriser les connexions à distance, procédez comme suit :
  • Activez les connexions à distance sur l'instance de SQL Server à laquelle vous voulez vous connecter à partir d'un ordinateur distant.
  • Activez le service SQL Server Browser.
  • Configurez le pare-feu afin d'autoriser le trafic réseau associé à SQL Server et au service SQL Server Browser.
Pour activer les connexions à distance sur l'instance de SQL Server 2005 ainsi que le service SQL Server Browser, utilisez l'outil Configuration de la surface d'exposition de SQL Server 2005. Cet outil est installé en même temps que SQL Server 2005.

Activation des connexions à distance pour SQL Server 2005 Express ou SQL Server 2005 Developer Edition

Vous devez activer les connexions à distance pour chaque instance de SQL Server 2005 à laquelle vous voulez vous connecter à partir d'un ordinateur distant. Pour ce faire, procédez comme suit :
  1. Cliquez sur Démarrer, pointez sur Programmes, sur Microsoft SQL Server 2005, sur Outils de configuration, puis cliquez sur Configuration de la surface d'exposition SQL Server.
  2. Dans la page Configuration de la surface d'exposition SQL Server, cliquez sur Configuration de la surface d'exposition pour les services et les connexions.
  3. Dans la page Configuration de la surface d'exposition pour les services et les connexions, développez Moteur de base de données, cliquez sur Connexions à distance, sur Connexions locales et distantes, sélectionnez le protocole approprié afin d'activer votre environnement, puis cliquez sur Appliquer.

    Remarque Cliquez sur OK lorsque le message suivant s'affiche :
    Les modifications apportées aux paramètres des connexions ne prendront effet que lors du redémarrage du service du moteur de base de données.
  4. Dans la page Configuration de la surface d'exposition pour les services et les connexions, développez Moteur de base de données, cliquez sur Connexions à distance, sur Connexions locales et distantes, sélectionnez le protocole approprié afin d'activer votre environnement, puis cliquez sur Appliquer.

Activation du service SQL Server Browser

Si vous exécutez SQL Server 2005 à l'aide d'un nom d'instance et si vous n'utilisez pas un numéro de port TCP/IP spécifique dans votre chaîne de connexion, vous devez activer le service SQL Server Browser afin d'autoriser les connexions à distance. Par exemple, SQL Server 2005 Express est installé avec le nom d'instance par défaut Nom_ordinateur\SQLEXPRESS. Vous devez uniquement activer le service SQL Server Browser une seule fois, quel que soit le nombre d'instances de SQL Server 2005 que vous exécutez. Pour activer le service SQL Server Browser, procédez comme suit.

Important Ces étapes peuvent présenter un risque plus élevé pour la sécurité. Elles rendent également votre ordinateur ou votre réseau plus vulnérable aux attaques d'utilisateurs malintentionnés ou de logiciels malveillants comme les virus. Nous vous recommandons de suivre le processus décrit dans cet article pour permettre aux programmes de fonctionner comme prévu, ou pour mettre en œuvre des fonctionnalités de programme spécifiques. Avant d'effectuer ces modifications, nous vous conseillons d'évaluer les risques qui sont associés à la mise en oeuvre de ce processus dans votre environnement particulier. Si vous choisissez de mettre en oeuvre ce processus, suivez les étapes supplémentaires appropriées pour protéger votre système. Il est recommandé d'utiliser ce processus uniquement si cela est nécessaire.
  1. Cliquez sur Démarrer, pointez sur Programmes, sur Microsoft SQL Server 2005, sur Outils de configuration, puis cliquez sur Configuration de la surface d'exposition SQL Server.
  2. Dans la page Configuration de la surface d'exposition SQL Server, cliquez sur Configuration de la surface d'exposition pour les services et les connexions.
  3. Dans la page Configuration de la surface d'exposition pour les services et les connexions, cliquez sur SQL Server Browser, sur Automatique pour Type de démarrage, puis sur Appliquer.

    Remarque Lorsque vous sélectionnez l'option Automatique, le service SQL Server Browser démarre automatiquement à chaque démarrage de Microsoft Windows.
  4. Cliquez sur Démarrer, puis sur OK.
Remarque Lorsque vous exécutez le service SQL Server Browser sur un ordinateur, ce dernier affiche les noms d'instance et les informations de connexion de chaque instance de SQL Server qui s'exécute. Ce risque peut être réduit en n'activant pas le service SQL Server Browser et en se connectant à l'instance de SQL Server directement via un port TCP affecté. La connexion directe à une instance de SQL Server via un port TCP n'entre pas dans le cadre de cet article. Pour plus d'informations sur le service SQL Server Browser et sur la connexion à une instance de SQL Server, consultez les rubriques suivantes dans la Documentation en ligne de SQL Server :
  • SQL Server Browser Service (Service SQL Server Browser)
  • Connecting to the SQL Server Database Engine (Connexion au moteur de base de données SQL Server)
  • Client Network Configuration (Configuration réseau client)

Création d'exceptions dans le pare-feu Windows

Ces étapes s'appliquent à la version du pare-feu Windows qui est incluse dans Windows XP Service Pack 2 (SP2) et dans Windows Server 2003. Si vous utilisez un système de pare-feu différent, consultez la documentation correspondante pour plus d'informations.

Si vous utilisez un pare-feu sur l'ordinateur qui exécute SQL Server 2005, les connexions externes à SQL Server 2005 seront bloquées à moins que le SQL Server 2005 et le service SQL Server Browser puissent communiquer via le pare-feu. Vous devez créer une exception pour chaque instance de SQL Server 2005 qui doit accepter les connexions à distance pour le service SQL Server Browser.

SQL Server 2005 utilise un ID d'instance dans le chemin lorsque vous installez ses fichiers programme. Pour créer une exception pour chaque instance de SQL Server, vous devez identifier l'ID d'instance correct. Pour obtenir un ID d'instance, procédez comme suit :
  1. Cliquez sur Démarrer, pointez sur Programmes, sur Microsoft SQL Server 2005, sur Outils de configuration, puis cliquez sur Gestionnaire de configuration SQL Server.
  2. Dans le Gestionnaire de configuration SQL Server, cliquez sur le service SQL Server Browser dans le volet droit, cliquez avec le bouton droit sur le nom de l'instance dans la fenêtre principale, puis sélectionnez Propriétés.
  3. Dans la page Propriétés de SQL Server Browser, cliquez sur l'onglet Avancé, recherchez l'ID d'instance dans la liste de propriétés, puis cliquez sur OK.
Pour ouvrir le pare-feu Windows, cliquez sur Démarrer, cliquez sur Exécuter, tapez firewall.cpl, puis cliquez sur OK.

Création d'une exception pour SQL Server 2005 dans le pare-feu Windows

Pour créer un exception pour SQL Server 2005 dans le pare-feu Windows, procédez comme suit :
  1. Dans le pare-feu Windows, cliquez sur l'onglet Exceptions, puis sur Ajouter un programme.
  2. Dans la fenêtre Ajouter un programme, cliquez sur Parcourir.
  3. Cliquez sur le programme exécutable C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe, sur Ouvrir, puis sur OK.

    Remarque Le chemin peut être différent suivant l'emplacement d'installation de SQL Server 2005. MSSQL.1 est un emplacement réservé pour l'ID d'instance que vous avez obtenu à l'étape 3 de la procédure précédente.
  4. Recommencez les étapes 1 à 3 pour chaque instance de SQL Server 2005 qui a besoin d'une exception.

Création d'une exception pour le service SQL Server Browser dans le pare-feu Windows

Pour créer un exception pour le service SQL Server Browser dans le pare-feu Windows, procédez comme suit :
  1. Dans le pare-feu Windows, cliquez sur l'onglet Exceptions, puis sur Ajouter un programme.
  2. Dans la fenêtre Ajouter un programme, cliquez sur Parcourir.
  3. Cliquez sur le programme exécutable C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe, sur Ouvrir, puis sur OK.

    Remarque Le chemin peut être différent suivant l'emplacement d'installation de SQL Server 2005.

connectionString="
Data Source=Server_TAOUFIK-B1C5832\Instance_SQLEXPRESS;
Initial Catalog=db_GED;
Persist Security Info=True;User ID=sa;Password=******
"
providerName="System.Data.SqlClient"/>

mardi 7 décembre 2010

Photoshop:Arrondi

pour dessiner un arrondi :
1-utiliser l'outille rectangle arrondi et dessiner
2-double clique sur le claque Form 1 (notre rectangle)
3-options de fusion :opacité du fond =0%
4-cocher Contour -->taille =1px
5-paramétrer la taille du calque from 1 avec Ctrl+T
6-déplacer le calque Form 1

WordPress: Front Office

pour paramétrer le front office
1-choisir le Thème.
2-Choisir les Widgets et leur Positions.
3-Modifier Options des Themes .
4-désactiver les commentaires.
5-Ajouter les extensions nécessaires.

lundi 6 décembre 2010

WordPress: backOffice

pour créer une interface admin pour votre client et une autre pour le web développer aller au menu Utilisateurs, vous créer deux utilisateurs un pour le client avec le profil Editeur et l'autre pour le web développer avec profil Administrateur vous choisissez le theme de l'interface admin du profil administrateur par exemple le Theme bleu pour le profil Editeur le theme par defaut gris.

Aller
/wp-admin/css/colors-fresh.css (theme Gris)
/wp-admin/css/colors-classic.css (Theme Bleu)

Pour le theme gris du client (editeur) vous faite ces Modifs (fichier colors-fresh.css)

/*Taoufik Modifay */
/***begin ***/
.versions
{
visibility:hidden;
display:none;
}

#menu-dashboard
{
visibility:hidden;
display:none;
}
#menu-comments
{
visibility:hidden;
display:none;
}
#update-nag
{
visibility:hidden;
display:none;
}
#toplevel_page_wpcf7
{
visibility:hidden;
display:none;
}
#dashboard_incoming_links
{
visibility:hidden;
display:none;
}
#dashboard_primary,#dashboard_secondary
{
visibility:hidden;
display:none;
}
.turbo-nag
{
visibility:hidden;
display:none;
}

#adminmenu
#menu-users

{
visibility:hidden;
display:none;
}
#menu-tools
{
visibility:hidden;
display:none;
}
#menu-settings
{
visibility:hidden;
display:none;
}
#dashboard_recent_comments
{
visibility:hidden;
display:none;
}

/*****end ***/

vendredi 26 novembre 2010

Les compétences ne sont pas éternelles…

En informatique, cependant, nous devons constamment nous poser une question : "Les compétences que j'ai acquises intéressent-elles encore quelqu'un?"

L'informatique évolue plus vite que tout autre secteur économique. Et les informaticiens doivent suivre sans délais cette évolution, sauf à ne plus disposer que de compétences obsolètes.

Lorsqu'un informaticien est en situation de demande d'emploi, la question incontournable est celle-ci : "Mes compétences actuelles correspondent-elles à une demande présente ou future?"

Si la réponse est négative, il n'est plus temps de chercher du travail. Il devient indispensable au préalable de resynchroniser ses compétences avec les demandes des entreprises. C'est ce qui vous permettra de restaurer votre employabilité

Votre employabilité, c'est votre capacité à donner envie aux entreprises de vous employer.


Restaurez votre employabilité…

En informatique, si vos compétences sont obsolètes, il est vraisemblable que vous ne retrouverez pas un emploi à la hauteur de vos souhaits professionnels, et peut-être pas d'emploi du tout.

Il est temps de vous remettre à vos études et vous familiariser avec les technologies "fashion" du moment.

L'informatique est comme la mode. Synchronisez-vous avec les technologies montantes sur lesquelles les entreprises sont demandeuses et en manque de ressources. Là , vous les intéresserez!


Démontrez votre expertise grâce aux certifications…

Certaines entreprises ont mis en place des parcours d'évaluations techniques organisés autours d'entretiens, de questionnaires écrits, de mises en situation, …

Si votre expertise est réelle, et si vous avez l'opportunité de parvenir jusqu'au stade de ces tests, vous êtes en bonne voie.

Mais comment évaluer votre niveau d'expertise, et transmettre cette information, au même titre qu'on parlerait d'un Bac+2, d'une maîtrise, d'un ingénieur, … ?

Les certifications vous permettent de démontrer votre expertise.

jeudi 11 novembre 2010

Qu’est ce que la RFID ?

La RFID (radio frequency identification) est une méthode pour stocker et
récupérer des données à distance en utilisant des marqueurs appelés
« radio-étiquettes » (« RFID tag »). Les radio-étiquettes sont de petits
objets, tels que des étiquettes autoadhésives, qui peuvent être collées ou
incorporées dans des produits.

Le RFID sur le long terme ?

De plus en plus de villes font le choix d’une taxe sur le poids des
ordures plutôt qu’une taxe sur l’enlèvement de celle ci. Par un système
incitatif de pesée embarquée, les habitants payent en fonction du poids
de leurs ordures ménagères. Le but de notre application serait de faciliter
le tri sélectif tout en sauvegardant la planète.
A terme les puces RFID vont se généraliser dans les emballages. Notre
cuisine permettra le passage d’un produit à un déchet, de l’achat à la
poubelle. En simplifiant la chaine, cela permettra aux enfants et aux
adultes de ne plus se tromper dans les poubelles ainsi qu’aux
aveugles.

Requêter Active Directory via .NET

Active Directory, le service d’annuaire de Microsoft se repose sur le protocole LDAP. Pouvoir se connecter à l’Active Directory, y ajouter des utilisateurs, des groupes, etc… est possible avec le framework .NET grâce au namespace System.DirectoryServices.

Avant de commencer le code, il faut ajouter une référence dans votre projet vers System.DirectoryServices.

Se connecter à Active Directory

La connexion se fait en 2 temps. Premièrement, on créé un DirectoryEntry avec le serveur, nom d’utilisateur, mot de passe, etc… Si une correspondance est faite dans l’AD, on continue. Si le couple utilisateur/mot de passe, l’adresse du serveur n’est pas bonne, etc… une exception de type DirectoryServicesCOMException sera levée. Si la connexion est faite, on pourra tester que pour se connecter, l’utilisateur doit être dans le groupe administrateur. Cette recherche se fait à l’aide d’un DirectorySearcher. La syntaxe du filtre est celle propre à LDAP. Le filtre utilisé ci-dessous, vérifie que l’utilisateur a bien pour nom « Aymeric », qu’il appartient au groupe administrateur et qu’il est bien de type « user ».

01string host = "192.168.65.156";
02string DN = "DC=aymeric,DC=lan";
03string domain = "AYMERIC";
04string user = "Aymeric";
05string logonName = String.Format(@"{0}\{1}", domain, user);
06string password = "Sup1nf0";
07string path = String.Format("LDAP://{0}", host);
08
09// Connection
10try
11{
12 DirectoryEntry de = new DirectoryEntry(path, user, password, AuthenticationTypes.Secure);
13
14 DirectorySearcher ds = new DirectorySearcher(de);
15 ds.Filter = "(&(&(objectClass=user) " +
16 "(memberOf=CN=Administrators,CN=Builtin," + DN + "))" +
17 "(samAccountName=" + user + "))";
18 SearchResult result = ds.FindOne();
19
20 if (result != null)
21 {
22 Console.WriteLine("Connected....");
23 }
24 else
25 {
26 Console.WriteLine("Connection Failed....");
27 }
28}
29catch (DirectoryServicesCOMException ex)
30{
31 Console.WriteLine(ex.Message);
32}

Ajout d’un nouvel utilisateur

La création d’un nouvel utilisateur passe par la création d’un nouveau DirectoryEntry à l’intérieur de celui déjà créé lors de la connexion à l’annuaire. Les informations relatives au nouvel utilisateur sont ensuite ajoutées via la collection de Properties que contient le DirectoryEntry. Le prénom, nom et surnom sont les seules propriétés spécifiées dans l’exemple ci-dessous.

Attention cependant à la propriété « memberOf« , qui contient les groupes auxquels appartient l’utilisateur. Cette propriété est en lecture seule et ne peut donc pas être modifiée. Pour ajouter un utilisateur dans un groupe, il faut partir du groupe en question (décrit plus tard dans l’article).

01// Add a user
02Console.WriteLine("Add a new user");
03
04string firstName = "Scott";
05string lastName = "Guthrie";
06string username = "scottgu";
07string container = "CN=Users";
08
09string userPath = String.Format("CN={0},{1}", username, container);
10DirectoryEntry newUser = de.Children.Add(userPath, "user");
11newUser.Properties["samAccountName"].Value = username;
12newUser.Properties["givenName"].Value = firstName;
13newUser.Properties["sn"].Value = lastName;
14
15newUser.CommitChanges();
16
17string guid = newUser.Guid.ToString();
18
19newUser.Invoke("SetPassword", new object[] { password });
20newUser.CommitChanges();
21
22Console.WriteLine("{0} {1} aka {2} : {3}", firstName, lastName, username, guid);

Comme expliqué ci-dessus, ce code est à mettre à la suite de celui établissant la connexion à la base de données. Les exceptions levées par ce code sont toujours du type DirectoryServicesCOMException.

Pour ajouter un groupe, le principe est le même. Dans le Add(), il faut simplement remplacer le 2ème paramètre par « group » et non « user« .

Ajouter un utilisateur à un groupe

Pour ajouter un utilisateur dans un groupe, il faut impérativement que l’utilisateur soit déjà créé, ce qui implique que l’on ne peut pas ajouter un utilisateur à un groupe de la même manière que son nom ou prénom. Il faut, comme expliqué plus haut dans l’article, ajouter un utilisateur via un groupe. Il faut donc recréer un DirectoryEntry qui représente le groupe en question, puis y ajouter l’utilisateur.

1Console.WriteLine("Add the new user in the Administrators group");
2
3DirectoryEntry grp = de.Children.Find("CN=Administrators,CN=Builtin");
4grp.Invoke("add", newUser.Path);
5
6Console.WriteLine("{0} {1} aka {2} is now administrator", firstName, lastName, username);

Supprimer un utilisateur ou un groupe

Pour supprimer un utilisateur ou un groupe, il faut partir du DirectoryEntry initial (créé pour la connexion) et appeler la méthode Remove() en y passant le DirectoryEntry representant l’objet à supprimer. Dans l’exemple ci-dessous, on supprime l’utilisateur nouvellement créé.

1de.Children.Remove(newUser);
2de.CommitChanges();
3
4Console.WriteLine("{0} {1} aka {2} is deleted", firstName, lastName, username);

Afin de libérer toute les ressources, il faut fermer les DirectoryEntry créés.

1newUser.Close();
2grp.Close();
3de.Close();

Le projet utilisé pour cet article est disponible ici.

vendredi 5 novembre 2010

Actualisation Webservice

si vous avez ajouter à nouveau service offert par un webservice et ce webservice est utilisé par une autre application asp.net ,il faut




mercredi 3 novembre 2010

Export report view to PDF/EXCEL

  • Export PDF


public void ExportRerportToPDF(string FileNameOutput)
{
string mimeType;
string encoding;
string extension;
Warning[] warnings;
string[] streamids;
byte[] Bytes = ReportViewer1.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings);

#region save In DIsk
//FileStream fs = new FileStream(@"c:\" + FileNameOutput + "." + extension, FileMode.Create);
//fs.Write(Bytes, 0, Bytes.Length);
//fs.Close();
#endregion

#region View Immidiatly In Cuurent HTTP Flux
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = mimeType;
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename="+FileNameOutput+"." + extension);
HttpContext.Current.Response.BinaryWrite(Bytes);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
#endregion
}

  • Export Excel


public void ExportRerportToExcel(string FileNameOutput)
{
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string extension;
string deviceInfo;
deviceInfo = "True";
byte[] bytes = ReportViewer1.LocalReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamids, out warnings);

#region save In DIsk
FileStream fs =new FileStream(@"c:\" + FileNameOutput + ".xls", FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
fs.Close();
#endregion

#region View Immidiatly In Cuurent HTTP Flux
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = mimeType;
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + FileNameOutput + "." + extension);
HttpContext.Current.Response.BinaryWrite(bytes);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
#endregion

}

mardi 2 novembre 2010

Count the total number of records in all user tables

I once had a management request for the total number of records in a database. This may not be a particularly useful statistic, but ...

To count the number of records in a table:

select count(*) from

To count the number of user-tables:

select count(*) from sysobjects where type='U'

To count the total number of records in all the user tables (this uses cursors to loop through considering each table at a time):

declare table_cursor CURSOR for select name from sysobjects where type='U'

declare @table_name sysname
declare @num_recs int
declare @count_sql as nvarchar(128)
declare @total_recs int

set @total_recs = 0

open table_cursor
fetch next from table_cursor into @table_name
while @@FETCH_STATUS=0
begin
set @count_sql = 'select @num_recs = count(*) from ' + @table_name
exec sp_executesql @count_sql,N'@num_recs int output',@num_recs output
print @table_name + ' ' + cast(@num_recs as varchar)
set @total_recs = @total_recs + @num_recs
fetch next from table_cursor into @table_name
end
close table_cursor
deallocate table_cursor

print 'Total number of records: ' + cast(@total_recs as varchar)

Réduire le temps de chargement d’une page ASP.NET avec le SQL Server Cache Dependency

Un système de cache permet de mettre temporairement des données en mémoire sur le serveur permettant un affichage plus rapide des pages du site web.

En ASP.NET, il existe plusieurs solutions pour créer un système de cache :

  • Output Caching : Une copie de la page web finale (HTML) est stockée sur le serveur. Lors du prochain appel à la page, la copie stockée sera automatiquement rendue au client n’exécutant ainsi pas les requêtes SQL, traitements côté serveur, etc… La copie expirera automatiquement après un temps préalablement configurée ou si le serveur manque de mémoire.
  • Data Caching : Il est possible de stocker en mémoire sur le serveur des données comme un DataSet. Si le DataSet est mis en cache, on évite ainsi un appel à la base de données. Contrairement à l’Output Caching, c’est à vous de définir les objets qui seront mis en cache.

Dans cet article, c’est une partie du Data Caching qui nous intéresse : le SQL Server Cache Dependency. Le principe de cette méthode de caching est de limiter les appels à la base de données en mettant en cache le résultat d’une requête SQL et en l’utilisant tant que la table à qui elle fait appel n’est pas modifiée.

Concrètement si un GridView utilise un SqlDataSource pour récupérer toutes les colonnes de la table MaTable dans une base de données.

  • Sans SQL Cache Dependencies, à chaque exécution de la page, un appel à la base de données sera fait pour récupérer les informations dans la table MaTable.
  • Avec SQL Cache Dependency, lors de la première exécution de la page un appel à la base de données sera fait puis lors de chaque appel le résultat de la requête sera récupéré dans le cache. Si la table vient à être modifiée, un nouvel appel à la base de données sera fait, et ainsi de suite.

Comment mettre en place le SQL Server Cache Dependency

Attention, la mise en place décrite ci-dessous ne fonctionne que sur SQL Server 2005 et plus. Pour SQL Server 2000 le SQL Cache Dependency est possible, mais beaucoup plus lourd à mettre en place.

Premièrement, pour activer les notifications sur SQL Server (qui permettront d’avertir du changement dans une table), démarrer Visual Studio Command Prompt (Démarrer -> Tous les programmes -> Microsoft Visual Studio 2010 -> Visual Studio Tools -> Visual Studio Command Prompt).

Tapez ensuite : SqlCmd -S

command_prompt

Entrez ensuite les requêtes suivantes :

1USE
2ALTER DATABASE SET ENABLE BROKER
3GO

Attention, pour que cette requête s’exécute avec succès, aucune autre session ne doit être ouverte pour cette base de données.

Il faut ensuite ajouter une entrée dans le web.config pour indiquer que la base de données utilisera le cache :

1<system.web>
2 <caching>
3 <sqlCacheDependency enabled="true">
4 <databases>
5 <add name="Ma_Base" connectionStringName="Site" pollTime="20000"/>
6 databases>
7 sqlCacheDependency>
8 caching>
9system.web>
  • name : Nom de la base de données
  • connectionStringName : nom de la chaine de connexion définie dans le web.config
  • pollTime : temps entre chaque notification (ici 20s)

Il faut ensuite activer les notifications pour la base de données et pour la table concernée. Pour pouvoir accéder à la classe SqlCacheDependencyAdmin, importez System.Web.Caching dans votre page.

1string cnx = ConfigurationManager.ConnectionStrings["Site"].ToString();
2SqlCacheDependencyAdmin.EnableNotifications(cnx);
3SqlCacheDependencyAdmin.EnableTableForNotifications(cnx, "Ma_Table");

Dernière étape, activer le Cache dans les propriétés du SqlDataSource ou ObjectDataSource.

cache_datasource

EnableCaching doit être passé à true et SqlCacheDependency doit contenir MaBase:MaTable.

Il faut noter qu’une table AspNet_SqlCacheTablesForChangeNotification est créée pour stocker les changements dans la base de données. A chaque modification le champ changeId est incrémenté de 1.

Les performances

Pour démontrer les performances de ce système de cache, j’ai fait des tests sur une requête SQL qui récupère les 34487 villes de France. Le test se base sur 10 exécutions de page dans les 2 cas et avec une désactivation du cache du navigateur.

Sans cache, l’exécution moyenne des pages est de 0,4825s alors qu’avec le cache, on obtient une exécution moyenne de 0,0284s soit une exécution 17 fois inférieure.

resultat

Il est possible de télécharger ici le projet utilisé pour les tests.

lien Source

Regular_Expression

http://en.csharp-online.net/CSharp_Regular_Expression_Recipes%E2%80%94Using_Common_Patterns

Regular_Expression

http://en.csharp-online.net/CSharp_Regular_Expression_Recipes%E2%80%94Using_Common_Patterns

Ajax Toollkit

http://www.asp.net/ajax/videos

dimanche 31 octobre 2010

vendredi 29 octobre 2010

HTMLEditor AjaxToolkit

HTMLEditor is an ASP.NET AJAX Control that allows you to easily create and edit HTML content. Various buttons in toolbar are used for content editing. You can see generated HTML markup and preview document.

http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/HTMLEditor/HTMLEditor.aspx

query datatable

Use a DataView to query a DataTable or you can use LINQ.

//LINQ Example
DataRow row = customers.AsEnumerable()
.Where(i => i.Field("CustID") == 4)
.FirstOrDefault();

//LINQ - Strongly Typed DataSet
DataRow row = ds.Customers.AsEnumerable()
.Where(i => i.CustID == 4)
.FirstOrDefault();

//DataTable Example
DataRow row = customers.Select("CustID = 4")[0];

//DataView Example
DataView dv = new DataView(customers);
dv.RowFilter = "CustID = 4";

jeudi 21 octobre 2010

Converting VB LINQ to C# LINQ

VB.Net to C# Converter is one of the few conversion tools that knows about LINQ and lambdas and the other 3.5 stuff. I turned to a trial version of the product after going in circles on this VB code conversion:

Dim q = From c In dc.Categories, _
p In dc.Products _
Where c.CategoryID = p.CategoryID _
Group p By c.CategoryName Into Group _
Select New With _
{.cgname = CategoryName, _
.prdcts = Group
}

While other tools choked, VBConversions churned out this:

var q = (
from c in dc.Categories
from p in dc.Products
where c.CategoryID == p.CategoryID
group p by c.CategoryName into g
let CategoryName = g.Key
let Group = g.ToArray()
select new { CategoryName, Group }).Select(s =>
new { cgname = s.CategoryName, prdcts = s.Group }
);

I'm not sure I would have figured that out on my own.

Actually, I fixed a small bug in the conversion. The original result had the assignment operator (=) instead of the comparison operator (==) in the where clause. When I reported this issue to the author, I got a prompt, polite, and appreciative response with the assurance of a fix in the next release.

One thing that I'd like to see is a snippet converter in the tool. Right now, you need to point the converter to a VS project file - something I don't normally use in file-based, ASP.NET 3.5 Web development.

For more info on VB.Net to C# Converter, see http://vbconversions.net/ .

BTW, I had to smile at C#'s use of "let" in LINQ syntax. Don't I remember Let from the earliest BASIC days?

Using XSLT files with the new XMLDataSource control

VS 2005 RTM (.net framework 2.0)
Target: Intermediate Developers

Consider you have an XML file like this:

<Employees>

<Employee FirstName="Tom" LastName="Jones" CustomerId="1" />

<Employee FirstName="John" LastName="Doe" CustomerId="2" />

Employees>

You wish to display the data in a DropDownList with the DataTextField set to the FirstName and the DataValueField set to the CustomerId..

..and you do not want to write any code ;-)

Here is how you do it.

Drag and drop an
XmlDataSource and DropDownList control on to your page. Set their properties like so:

<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Employees.xml">asp:XmlDataSource>

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="XmlDataSource1"

DataTextField="FirstName" DataValueField="CustomerId">

asp:DropDownList>


Run the page.

The DropDownList will get rendered like so:



What if the XML file were like this (where the values were elements instead of attributes)?

<Employees>

<Employee>

<FirstName>TomFirstName>

<LastName>JonesLastName>

<CustomerId>1CustomerId>

Employee>

<Employee>

<FirstName>JohnFirstName>

<LastName>DoeLastName>

<CustomerId>2CustomerId>

Employee>

Employees>

Our page will fail with the following error:
DataBinding: 'System.Web.UI.WebControls.XmlDataSourceNodeDescriptor' does not contain a property with the name 'FirstName'.


The reason is that attributes of XML elements are promoted to properties and exposed through the XmlDataSource during databinding. In our case, FirstName is an element instead of an attribute which leads to the error.

So what can we do about this? Easy, we have to figure out how to transform the FirstName, CustomerId so that they become attributes of the parent node - Employee. In other words, we need to transform the second XML file so that it looks like the first XML file. This is were XSLTs come in. Explaining XLSTs is beyond the scope of this post. Please use your search engine to learn more J
XSLT Reference

The
XmlDataSource allows you to specify an XSLT file where you can define a transformation that will be applied to the DataFile you specified.

Add an XSL file to your project and enter the following (In brief, the XSLT below will transform the XML file resulting in the FirstName, CustomerId elements becoming attributes of the Employee node)


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="Employees">

<Employees>

<xsl:apply-templates select="Employee"/>

Employees>

xsl:template>

<xsl:template match="Employee">

<Employee>

<xsl:attribute name="FirstName">

<xsl:value-of select="FirstName"/>

xsl:attribute>

<xsl:attribute name="CustomerId">

<xsl:value-of select="CustomerId"/>

xsl:attribute>

Employee>

xsl:template>

xsl:stylesheet>

Set the XmlDataSource’s TransformFile property to point to this XSL file. Our page will look like this:

<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Employees.xml" TransformFile="~/XSLTFile.xsl">asp:XmlDataSource>

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="XmlDataSource1"

DataTextField="FirstName" DataValueField="CustomerId">

asp:DropDownList>

The DropDownList will now get rendered like so:

What if you wanted to display the FirstName, LastName in the DataTextField separated by a comma?

Easy! Change the XSL file to this:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="Employees">

<Employees>

<xsl:apply-templates select="Employee"/>

Employees>

xsl:template>

<xsl:template match="Employee">

<Employee>

<xsl:attribute name="FullName">

<xsl:value-of select="FirstName"/>

<xsl:text xml:space="preserve">, xsl:text>

<xsl:value-of select="LastName"/>

xsl:attribute>

<xsl:attribute name="CustomerId">

<xsl:value-of select="CustomerId"/>

xsl:attribute>

Employee>

xsl:template>

xsl:stylesheet>


Note that we changed the attribute name to FullName.

Note also the xml:space attribute which specifies that the space after the comma should be preserved.

Now change the page to this:

<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Employees.xml" TransformFile="~/XSLTFile.xsl">asp:XmlDataSource>

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="XmlDataSource1"

DataTextField="FullName" DataValueField="CustomerId">

asp:DropDownList>


The DropDownList will get rendered like this:


All this without writing a single line of code (if you exclude the xsl file you wrote)!