Commentor Blog

When Quality Matters

Commentor A/S

When Quality Matters

Contact usSend mail

Recent comments

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2012

SQL Compact Query Analyzer

I’ve been working extensively on enterprise mobility projects lately. These applications integrate into large SAP based systems and when testing the system it can get very tedious to set up some temporary data from the backend. I’m also working with some not-so-technical testers that get intimidated by the Visual Studio or the SQL Server Management Studio. This led me to writing an open source project called SQL Compact Query Analyzer

 

Here’s some details I pulled directly off the CodePlex site

 

Project Description
SQL Server Compact Edition Database Query Analyzer

Features:
- Execute SQL Queries against a SQL Server Compact Edition database
- Table Data Editor to easily edit the contents of the database
- Supports SQLCE 3.0, 3.1, 3.5 and 4.0
- Execute multiple SQL queries (delimited by a semi colon ;)
- Display query result as XML
- Shrink and Compact Databases
- SDF file association with SQL Compact Query Analyzer for launching directly by opening the SDF in Windows Explorer
- Generate Schema and Data Scripts
- Display database and schema information
- Support for password protected databases

Coming Soon:
- Purge database content
- Create new database
- Create, edit, and drop tables
- Create, edit, and delete table references and indexes
- Support for SQL Server Compact Edition 2.0


Screenshots


- Displays database and schema information and executes multiple SQL queries directly


- Edit the table data directly


- Display the contents of IMAGE fields


- Performance numbers for queries


- Query errors


- Output result set as XML

Prerequisites:

- .NET Framework 4.0 

 

Check it out! You might find it useful!

Currently rated 1.5 by 2 people

  • Currently 1.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by christian.resma.helle on Friday, June 24, 2011 9:05 AM
Permalink | Comments (0) | Post RSSRSS comment feed

SQL CE Code Generator

More than a year ago, I published a project on CodePlex called SQL CE Code Generator. Unfortunately, I never managed to find the time to do some work on it and the project was set on a very long hold. A year after I suddenly really needed such a tool and decided that I should put in some hours on the project.

 

I'm currently working on a large enterprise project where changes to the database schema is done rather frequently, to avoid the pain of updating my data layer after every change I decided to use my code generator.

 

Here's some details I pulled directly off the CodePlex site.

 

Project Description
Contains a stand alone GUI application and a Visual Studio Custom Tool for automatically generating a .NET data access layer code for objects in a SQL Server Compact Edition database.

Features:
- Visual Studio 2008 and 2010 Custom Tool Support
- Creates entity classes for each table in the database
- Generates data access code that implements the Repository Pattern
- Generates methods for Create, Read, Update and Delete operations
- Generates SelectBy methods for every column in every table
- Generates a Purge method for every table to delete all records
- Generates Count() method for retrieving the number of records in each table
- Generates CreateDatabase() method for re-creating the database
- Generates xml-doc code comments for entities and data access methods
- Generates Entity Unit Tests
- Generates Data Access Unit Tests
- Generates .NET Compact and Full Framework compatible code

Coming Soon:
- Generate database maintenance code (clear database, shrink/compress database)
- Support for multiple versions of SQL Server Compact Edition (3.0, 3.1 3.5, 3.5 SP1, 3.5 SP2, 4.0)
- Generate unit tests for multiple unit test frameworks
- VB.NET Code Support


Screenshots:


Custom Tool


Generating Entity Classes


Generating Data Access methods that implement the Repository Pattern


Generating Entity Unit Tests


Generating Data Access Unit Tests to validate the integrity between the data layer and the actual databa

 

 

Check it out! You might find it useful too...

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by christian.resma.helle on Sunday, March 27, 2011 5:16 PM
Permalink | Comments (0) | Post RSSRSS comment feed

Problem upgrading to SQL Server (R2) before upgrading to TFS2010

When an instance of TFS2008 (or 2005) is to be upgraded to TFS2010 the SQL Server must be upgraded to 2008 (sp1) as a minimum. I expected this to be the smallest issue but the problem that:

"Rule 'Consistency validation for SQL Server registry keys' failed". The SQL Server registry keys from a prior installation cannot be modified. To continue, see SQL Server Setup documentation about how to fix registry keys.

It turned out to be a problem with the permissions for a registry key for SQL Server. Even though I tried to upgrade with an account with local admin rights there was a registry key which didn't allow access. For this particular instance it was the key:

HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\UDDI\MSSQLServer\SuperSocketNetLib\Lpc

The solution was to add the account which was used for the upgrade to have full access to this key. Probably write acces would have been sufficient.

The way to find out which key(s) it is/are is to look in the SQL Server installation log:

Folder: .\Microsoft SQL Server\100\Setup Bootstrap\LOG\ ("and then the date and time of the upgrade attempt")

Look for "System.UnauthorizedAccessException" in the Details.txt file

///Jørn

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by jorn.floor.andersen on Monday, June 14, 2010 6:25 AM
Permalink | Comments (0) | Post RSSRSS comment feed

SqlCeEngineEx - Extending the SqlCeEngine class

I use System.Data.SqlServer.SqlCeEngine() quite a lot in all my projects. I normally create the database on the fly when the application is launched for the first time and then I populate the initial data via a web service.

I often check if database objects exist before I create them. You can do this by querying the INFORMATION_SCHEMA views. I created a helper class called SqlCeEngineEx that contains the following methods for querying the INFORMATION_SCHEMA:

1) bool DoesTableExist(string table) - Checks if a table exists in the database
2) string[] GetTables() - Returns a string array of all the tables in the database
3) string[] GetTableConstraints(string table) - Returns a string array of all the constraints for a table
4) string[] GetTableConstraints() - Returns a string array of all the constraints in the database

And here is the full code:

public class SqlCeEngineEx : IDisposable
{
  private SqlCeEngine engine;

  public SqlCeEngineEx()
  {
   engine = new SqlCeEngine();
  }

  public SqlCeEngineEx(string connectionString)
  {
   engine = new SqlCeEngine(connectionString);
  }

  public bool DoesTableExist(string tablename)
  {
   bool result = false;

   using (SqlCeConnection conn = new SqlCeConnection(LocalConnectionString)) {
    conn.Open();
    using (SqlCeCommand cmd = conn.CreateCommand()) {
     cmd.CommandText =
      @"SELECT COUNT(TABLE_NAME)
       FROM INFORMATION_SCHEMA.TABLES
       WHERE TABLE_NAME=@Name"
;
     cmd.Parameters.AddWithValue("@Name", tablename);
     result = Convert.ToBoolean(cmd.ExecuteScalar());
    }
   }

   return result;
  }

  private string[] PopulateStringList(SqlCeCommand cmd)
  {
   List<string> list = new List<string>();

   using (SqlCeDataReader reader = cmd.ExecuteReader()) {
    while (reader.Read()) {
     list.Add(reader.GetString(0));
    }
   }

   return list.ToArray();
  }

  public string[] GetTables()
  {
   string[] tables;

   using (SqlCeConnection conn = new SqlCeConnection(LocalConnectionString)) {
    conn.Open();
    using (SqlCeCommand cmd = conn.CreateCommand()) {
     cmd.CommandText = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES";
     tables = PopulateStringList(cmd);
    }
   }

   return tables;
  }

  public string[] GetTableConstraints()
  {
   string[] constraints;

   using (SqlCeConnection conn = new SqlCeConnection(LocalConnectionString)) {
    conn.Open();
    using (SqlCeCommand cmd = conn.CreateCommand()) {
     cmd.CommandText = "SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS";
     constraints = PopulateStringList(cmd);
    }
   }

   return constraints;
  }

  public string[] GetTableConstraints(string tablename)
  {
   string[] constraints;

   using (SqlCeConnection conn = new SqlCeConnection(LocalConnectionString)) {
    conn.Open();
    using (SqlCeCommand cmd = conn.CreateCommand()) {
     cmd.CommandText =
      @"SELECT CONSTRAINT_NAME
       FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
       WHERE TABLE_NAME=@Name"
;
     cmd.Parameters.AddWithValue("@Name", tablename);
     constraints = PopulateStringList(cmd);
    }
   }

   return constraints;
  }

  public string LocalConnectionString
  {
   get { return engine.LocalConnectionString; }
   set { engine.LocalConnectionString = value; }
  }

  public void Compact()
  {
   engine.Compact(null);
  }

  public void Compact(string connectionString)
  {
   engine.Compact(connectionString);
  }

  public void CreateDatabase()
  {
   engine.CreateDatabase();
  }

  public void Repair(string connectionString, RepairOption options)
  {
   engine.Repair(connectionString, options);
  }

  public void Shrink()
  {
   engine.Shrink();
  }

  public bool Verify()
  {
   return engine.Verify();
  }

  public void Dispose()
  {
   engine.Dispose();
   engine = null;
  }
}

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by christian.resma.helle on Wednesday, December 05, 2007 9:40 AM
Permalink | Comments (0) | Post RSSRSS comment feed