Thursday, November 27, 2008

Live webinar: Accelerate the deployment and provisioning of your SharePoint e-learning platform

Challenges faced by today’s educational institutions typically lie in three main areas: efficiency, security, and accuracy. When it comes to building a Microsoft based e-learning platform, thousands of students, teachers, and parents’ accounts should be provisioned for tens or hundreds of your schools on an interrelated set of Microsoft application servers such as Active directory, SharePoint, Exchange, and Office Communication Server (OCS). In reality, these activities are painful. In such large-scale deployments of Microsoft Learning Gateway (MLG) or other connected e-learning solutions, manual provisioning becomes practically impossible. Consider data incompleteness and inconsistency. And add the fact that mass provisioning is needed every new academic year and ongoing re-provisioning is needed through the year.

Build your Microsoft e-learning platform. Automate your most mission-critical provisioning and ongoing management activities. Rely on a secure, reliable, and scalable provisioning solution; ITWorx Education Catalyst Provisioning Suite.

ITWorx introduces Catalyst 2.0, the second release of its market- sweeping provisioning product, with a richer set of functions and capabilities to further expedite and facilitate your provisioning processes.

In this webinar you will learn how Catalyst can:

  • Decrease the provisioning time from weeks to hours.
  • Meet the real education business challenges.
  • Automate the synchronization with Schools’ Management Information Systems.
  • Guarantee data consistency and accuracy across the board.
  • Tailor to administrator needs for reduced complexity.

Thursday, November 20, 2008

Storing Arabic (or Unicode) data in MySQL using Connector/Net 5.2

Storing Unicode data in varchar columns in MySQL can be tricky. I spent some time to use MySQL Connector/Net 5.2 to store Arabic data.
Once you know it, it's simple:

  • The varchar column Charset should be utf8
  • The varchar column Collate property should be utf8_general_ci. I tried utf8_bin and worked too. This is a screen shot from MySQL Administrator table editor:

  • In the .net application, the connection string must include charset=utf8. For example:


Friday, November 14, 2008

Scripting SQL Server database objects using SMO

Scripting a database objects from development environment is a necessary step before deployment to production or test environments and to add the script to source control. Doing this manually is error prone and time consuming.
Also If you practice continuous integration, it's a must to automate the script generation process.

I used Database Publishing Wizard which is hosted on codeplex. It's good but the command line options lack the ability to determine which objects to script. That caused a problem because it scripted users as well. Which I did not want it to do.

Although it's hosted on codeplex, I could not download the source code to make the necessary modifications.

So, I had to go the hard way. And I did it myself. Using SQL Server Management Objects (SMO), I built a small command line utility to script: Tables, Indexes, UDFs, Veiws, SPs, Defaults, Checks, Foreign keys.
There are limitations ofcourse, But at least it's under control as long as the code is available.

The application depends on the core class ScriptingEngine, which in turn depends on Microsoft.SqlServer.Management.Smo.Scripter class.

Points of interest:
  • Order of scripting is important for the script to be used to regenerate objects.
  • Determining object dependencies is an important trick. Using DiscoverDependencies method, it's possible to order objects bu

public void ScriptViews()
List<urn> urns=new List<urn>();

foreach (View view in _database.Views)
if (view.IsSystemObject)


DependencyTree tree = _scripter.DiscoverDependencies(urns.ToArray(), true);
DependencyCollection dc = _scripter.WalkDependencies(tree);

RemoveUrnType(dc, "UserDefinedFunction");



  • Note the RemoveUrnType method, it's used to filter unwanted object types from the DependencyCollection:

private void RemoveUrnType(DependencyCollection dc,string type)
for (int counter = 0; counter < dc.Count; counter++)
if (dc[counter].Urn.Type==type)

  • Usage:
SqlScripter.exe -server:server\instance -database:dbname -login:login -password:pwd -filename:pathtoscriptfile

You can download the source from skydrive:

Saturday, November 1, 2008

New .NET logos and poster

Microsoft announced new logos for the .net platform. Also a new poster for .NET 4.0 is available.
The reason for the new logo seems to be it's more suitable for the new Azure Services Platform.

A big goodbye to the old logo:

Also a new poster for .NET 4.0 is announced, PDF download is available

For more information, check: Chris Koenig's and Brad Abrams's blogs.